Re: [U-Boot] [PATCH 2/2 v3] powerpc/8xxx: Refactor fsl_ddr_get_spd into common code from board

2011-02-09 Thread Kumar Gala

On Feb 4, 2011, at 2:44 PM, Kumar Gala wrote:

 Move fsl_ddr_get_spd into common mpc8xxx/ddr/main.c as most boards
 pretty much do the same thing.  The only variations are in how many
 controllers or DIMMs per controller exist.  To make this work we
 standardize on the names of the SPD_EEPROM_ADDRESS defines based on the
 use case of the board.
 
 We allow boards to override get_spd to either do board specific fixups
 to the SPD data or deal with any unique behavior of how the SPD eeproms
 are wired up.
 
 Signed-off-by: Kumar Gala ga...@kernel.crashing.org
 ---
 * Changed __get_spd error message from debug - printf

applied to 85xx next

- k
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 2/2 v3] powerpc/8xxx: Refactor fsl_ddr_get_spd into common code from board

2011-02-04 Thread Kumar Gala
Move fsl_ddr_get_spd into common mpc8xxx/ddr/main.c as most boards
pretty much do the same thing.  The only variations are in how many
controllers or DIMMs per controller exist.  To make this work we
standardize on the names of the SPD_EEPROM_ADDRESS defines based on the
use case of the board.

We allow boards to override get_spd to either do board specific fixups
to the SPD data or deal with any unique behavior of how the SPD eeproms
are wired up.

Signed-off-by: Kumar Gala ga...@kernel.crashing.org
---
* Changed __get_spd error message from debug - printf

 arch/powerpc/cpu/mpc8xxx/ddr/main.c |   63 +--
 board/freescale/corenet_ds/ddr.c|   27 ---
 board/freescale/mpc8536ds/ddr.c |   21 ---
 board/freescale/mpc8540ads/ddr.c|   22 
 board/freescale/mpc8541cds/ddr.c|   21 ---
 board/freescale/mpc8544ds/ddr.c |   22 
 board/freescale/mpc8548cds/ddr.c|   22 
 board/freescale/mpc8555cds/ddr.c|   21 ---
 board/freescale/mpc8560ads/ddr.c|   22 
 board/freescale/mpc8568mds/ddr.c|   22 
 board/freescale/mpc8569mds/ddr.c|   22 
 board/freescale/mpc8572ds/ddr.c |   23 -
 board/freescale/mpc8610hpcd/ddr.c   |   21 ---
 board/freescale/mpc8641hpcn/ddr.c   |   30 
 board/freescale/p1022ds/ddr.c   |   18 --
 board/freescale/p2020ds/ddr.c   |   19 --
 board/sbc8548/ddr.c |   22 
 board/sbc8560/ddr.c |   22 
 board/sbc8641d/ddr.c|   30 
 board/socrates/ddr.c|   22 
 board/stx/stxgp3/ddr.c  |   22 
 board/stx/stxssa/ddr.c  |   21 ---
 board/xes/xpedite517x/ddr.c |   25 +-
 board/xes/xpedite520x/ddr.c |   17 +-
 board/xes/xpedite537x/ddr.c |   17 +-
 board/xes/xpedite550x/ddr.c |   15 +
 include/configs/MPC8569MDS.h|3 +-
 include/configs/MPC8610HPCD.h   |2 +-
 include/configs/P1022DS.h   |2 +-
 include/configs/P2020DS.h   |2 +-
 include/configs/xpedite550x.h   |2 +-
 31 files changed, 69 insertions(+), 551 deletions(-)

diff --git a/arch/powerpc/cpu/mpc8xxx/ddr/main.c 
b/arch/powerpc/cpu/mpc8xxx/ddr/main.c
index bb96d66..c8fa123 100644
--- a/arch/powerpc/cpu/mpc8xxx/ddr/main.c
+++ b/arch/powerpc/cpu/mpc8xxx/ddr/main.c
@@ -13,6 +13,7 @@
  */
 
 #include common.h
+#include i2c.h
 #include asm/fsl_ddr_sdram.h
 
 #include ddr.h
@@ -26,9 +27,65 @@ extern void fsl_ddr_set_lawbar(
 extern void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
   unsigned int ctrl_num);
 
-/* Board-specific functions defined in each board's ddr.c */
-extern void fsl_ddr_get_spd(generic_spd_eeprom_t *ctrl_dimms_spd,
-  unsigned int ctrl_num);
+#if defined(SPD_EEPROM_ADDRESS) || \
+defined(SPD_EEPROM_ADDRESS1) || defined(SPD_EEPROM_ADDRESS2) || \
+defined(SPD_EEPROM_ADDRESS3) || defined(SPD_EEPROM_ADDRESS4)
+#if (CONFIG_NUM_DDR_CONTROLLERS == 1)  (CONFIG_DIMM_SLOTS_PER_CTLR == 1)
+u8 spd_i2c_addr[CONFIG_NUM_DDR_CONTROLLERS][CONFIG_DIMM_SLOTS_PER_CTLR] = {
+   [0][0] = SPD_EEPROM_ADDRESS,
+};
+#endif
+#if (CONFIG_NUM_DDR_CONTROLLERS == 2)  (CONFIG_DIMM_SLOTS_PER_CTLR == 1)
+u8 spd_i2c_addr[CONFIG_NUM_DDR_CONTROLLERS][CONFIG_DIMM_SLOTS_PER_CTLR] = {
+   [0][0] = SPD_EEPROM_ADDRESS1,   /* controller 1 */
+   [1][0] = SPD_EEPROM_ADDRESS2,   /* controller 2 */
+};
+#endif
+#if (CONFIG_NUM_DDR_CONTROLLERS == 2)  (CONFIG_DIMM_SLOTS_PER_CTLR == 2)
+u8 spd_i2c_addr[CONFIG_NUM_DDR_CONTROLLERS][CONFIG_DIMM_SLOTS_PER_CTLR] = {
+   [0][0] = SPD_EEPROM_ADDRESS1,   /* controller 1 */
+   [0][1] = SPD_EEPROM_ADDRESS2,   /* controller 1 */
+   [1][0] = SPD_EEPROM_ADDRESS3,   /* controller 2 */
+   [1][1] = SPD_EEPROM_ADDRESS4,   /* controller 2 */
+};
+#endif
+
+static void __get_spd(generic_spd_eeprom_t *spd, u8 i2c_address)
+{
+   int ret = i2c_read(i2c_address, 0, 1, (uchar *)spd,
+   sizeof(generic_spd_eeprom_t));
+
+   if (ret) {
+   printf(DDR: failed to read SPD from address %u\n, 
i2c_address);
+   memset(spd, 0, sizeof(generic_spd_eeprom_t));
+   }
+}
+
+__attribute__((weak, alias(__get_spd)))
+void get_spd(generic_spd_eeprom_t *spd, u8 i2c_address);
+
+void fsl_ddr_get_spd(generic_spd_eeprom_t *ctrl_dimms_spd,
+ unsigned int ctrl_num)
+{
+   unsigned int i;
+   unsigned int i2c_address = 0;
+
+   if (ctrl_num = CONFIG_NUM_DDR_CONTROLLERS) {
+   printf(%s unexpected ctrl_num = %u\n, __FUNCTION__, ctrl_num);
+   return;
+   }
+
+   for (i = 0; i  CONFIG_DIMM_SLOTS_PER_CTLR; i++) {
+   i2c_address =