]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
mpc83xx: mpc8360 rev.2.1 erratum 2: replace rgmii-id with rgmii-rxid
authorKim Phillips <kim.phillips@freescale.com>
Fri, 9 Nov 2007 20:28:08 +0000 (14:28 -0600)
committerKim Phillips <kim.phillips@freescale.com>
Tue, 8 Jan 2008 15:55:40 +0000 (09:55 -0600)
u-boot itself uses GMII mode on the 8360.  Fix up UCC phy-connection-type
properties in the device tree so the PHY gets configured for internal delay on
RX only by the OS, as prescribed by mpc8360 rev. 2.1 pb mds erratum #2.

Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
board/freescale/mpc8360emds/mpc8360emds.c

index 538a556c6033fc36b1320381b5fe74b149cbd398..ff9a85cc4658d1c223135c2beb728b6f6affafbb 100644 (file)
@@ -303,6 +303,7 @@ void sdram_init(void)
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
+       const immap_t *immr = (immap_t *)CFG_IMMR;
 #if defined(CONFIG_OF_FLAT_TREE)
        u32 *p;
        int len;
@@ -317,5 +318,35 @@ void ft_board_setup(void *blob, bd_t *bd)
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
 #endif
+       /*
+        * mpc8360ea pb mds errata 2: RGMII timing
+        * if on mpc8360ea rev. 2.1,
+        * change both ucc phy-connection-types from rgmii-id to rgmii-rxid
+        */
+       if (immr->sysconf.spridr == SPR_8360_REV21 ||
+           immr->sysconf.spridr == SPR_8360E_REV21) {
+               int nodeoffset;
+               void *prop;
+
+               /* fixup UCC 1 if using rgmii-id mode */
+               nodeoffset = fdt_find_node_by_path(blob, "/" OF_QE "/ucc@2000");
+               if (nodeoffset >= 0) {
+                       prop = fdt_getprop(blob, nodeoffset,
+                                               "phy-connection-type", 0);
+                       if (prop && (strcmp(prop, "rgmii-id") == 0))
+                               fdt_setprop(blob, nodeoffset, "phy-connection-type",
+                                           "rgmii-rxid", sizeof("rgmii-rxid"));
+               }
+
+               /* fixup UCC 2 if using rgmii-id mode */
+               nodeoffset = fdt_find_node_by_path(blob, "/" OF_QE "/ucc@3000");
+               if (nodeoffset >= 0) {
+                       prop = fdt_getprop(blob, nodeoffset,
+                                               "phy-connection-type", 0);
+                       if (prop && (strcmp(prop, "rgmii-id") == 0))
+                               fdt_setprop(blob, nodeoffset, "phy-connection-type",
+                                           "rgmii-rxid", sizeof("rgmii-rxid"));
+               }
+       }
 }
 #endif