83xx: initialize serdes for MPC837XRDB boards
authorAnton Vorontsov <avorontsov@ru.mvista.com>
Mon, 24 Mar 2008 14:40:43 +0000 (17:40 +0300)
committerKim Phillips <kim.phillips@freescale.com>
Wed, 26 Mar 2008 00:16:45 +0000 (19:16 -0500)
On the MPC8377ERDB: 2 SATA and 2 PCI-E.
On the MPC8378ERDB: 2 PCI-E
On the MPC8379ERDB: 4 SATA

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
board/freescale/mpc837xerdb/mpc837xerdb.c
include/configs/MPC837XERDB.h

index a3b20b8f9584ef0623dfd16e30c0d2901f441040..d09153805820cc22e8ddb81fa8fe2d7e7ea1df7b 100644 (file)
@@ -15,6 +15,7 @@
 #include <common.h>
 #include <i2c.h>
 #include <asm/io.h>
+#include <asm/fsl_serdes.h>
 #include <spd_sdram.h>
 #include <vsc7385.h>
 
@@ -132,6 +133,42 @@ int checkboard(void)
        return 0;
 }
 
+int board_early_init_f(void)
+{
+#ifdef CONFIG_FSL_SERDES
+       immap_t *immr = (immap_t *)CFG_IMMR;
+       u32 spridr = in_be32(&immr->sysconf.spridr);
+
+       /* we check only part num, and don't look for CPU revisions */
+       switch (spridr >> 16) {
+       case SPR_8379E_REV10 >> 16:
+       case SPR_8379_REV10 >> 16:
+               fsl_setup_serdes(CONFIG_FSL_SERDES1, FSL_SERDES_PROTO_SATA,
+                                FSL_SERDES_CLK_100, FSL_SERDES_VDD_1V);
+               fsl_setup_serdes(CONFIG_FSL_SERDES2, FSL_SERDES_PROTO_SATA,
+                                FSL_SERDES_CLK_100, FSL_SERDES_VDD_1V);
+               break;
+       case SPR_8378E_REV10 >> 16:
+       case SPR_8378_REV10 >> 16:
+               fsl_setup_serdes(CONFIG_FSL_SERDES1, FSL_SERDES_PROTO_PEX,
+                                FSL_SERDES_CLK_100, FSL_SERDES_VDD_1V);
+               break;
+       case SPR_8377E_REV10 >> 16:
+       case SPR_8377_REV10 >> 16:
+               fsl_setup_serdes(CONFIG_FSL_SERDES1, FSL_SERDES_PROTO_SATA,
+                                FSL_SERDES_CLK_100, FSL_SERDES_VDD_1V);
+               fsl_setup_serdes(CONFIG_FSL_SERDES2, FSL_SERDES_PROTO_PEX,
+                                FSL_SERDES_CLK_100, FSL_SERDES_VDD_1V);
+               break;
+       default:
+               printf("serdes not configured: unknown CPU part number: "
+                      "%04x\n", spridr >> 16);
+               break;
+       }
+#endif /* CONFIG_FSL_SERDES */
+       return 0;
+}
+
 /*
  * Miscellaneous late-boot configurations
  *
index e3cb3c7c1ef5db2e940e28f53824150424fa4f22..c2e7701702159edbed4b3918e5d76dcd44cfb495 100644 (file)
@@ -32,6 +32,7 @@
 
 #define CONFIG_PCI     1
 
+#define CONFIG_BOARD_EARLY_INIT_F
 #define CONFIG_MISC_INIT_R
 
 /*
 #define CFG_NS16550_COM1       (CFG_IMMR+0x4500)
 #define CFG_NS16550_COM2       (CFG_IMMR+0x4600)
 
+/* SERDES */
+#define CONFIG_FSL_SERDES
+#define CONFIG_FSL_SERDES1     0xe3000
+#define CONFIG_FSL_SERDES2     0xe3100
+
 /* Use the HUSH parser */
 #define CFG_HUSH_PARSER
 #ifdef CFG_HUSH_PARSER