[U-Boot] [PATCH] ppc4xx - allow usage of fixed/unmanaged PHYs

Grant Erickson gerickson at nuovations.com
Tue Aug 26 21:12:26 CEST 2008


On 8/26/08 11:11 AM, Wolfgang Ocker wrote:
> This patch allows a managed switch like the 88E6083 to be directly
> connected to a 4xx using PHY mode.
> 
> It avoids waiting for a link (it's always there) and uses fixed values
> for speed and duplex mode since both settings are hardware controlled.
> 
> Should I use "FIXED" instead of "UNMANAGED" (so called in the kernel
> afair)?
> 
> ---
> Support unmanaged/fixed PHYs like port 8/9 of Marvell 88E6083 on 4xx.
>     
> Added config vars CONFIG_UNMANAGED_PHY, CONFIG_UNMANAGED_PHY_SPEED
> and CONFIG_UNMANAGED_PHY_FULL_DUPLEX to allow unmanaged PHYs
> and to configure the settings for speed and duplex mode.
> 
> Signed-off-by: Wolfgang Ocker <weo at reccoware.de>

Wolfgang:

Are ports 8/9 truly "unmanaged" or are they like ports 4/5 on the M88E6061
in which the ports have MDIO/MII interfaces but do not follow IEEE register
conventions?

If the former, then I think it is better to just pull the speed and duplex
settings from the switch and pass them up to the 4xx Ethernet driver. In my
situation, I did as shown below. It is likely more invasive than your
approach; however, it ensures that software follows what the hardware is
strapped to.

diff -aruN u-boot-1.3.2/cpu/ppc4xx/4xx_enet.c
u-boot-1.3.2.N/cpu/ppc4xx/4xx_enet.c
--- u-boot-1.3.2/cpu/ppc4xx/4xx_enet.c    2008-05-15 16:16:22.000000000
-0700
+++ u-boot-1.3.2.N/cpu/ppc4xx/4xx_enet.c    2008-05-15 16:15:47.000000000
-0700
@@ -92,6 +92,10 @@
 #include <malloc.h>
 #include <asm/ppc4xx-intvec.h>
 
+#if defined(CONFIG_M88E6061)
+#include <m88e6061.h>
+#endif
+
 /*
  * Only compile for platform with AMCC EMAC ethernet controller and
  * network support enabled.
@@ -903,7 +907,7 @@
 
     /* wait for PHY to complete auto negotiation */
     reg_short = 0;
-#ifndef CONFIG_CS8952_PHY
+#if !defined(CONFIG_CS8952_PHY) && !defined(CONFIG_M88E6061)
     switch (devnum) {
     case 0:
         reg = CONFIG_PHY_ADDR;
@@ -941,7 +945,7 @@
         miiphy_write (dev->name, reg, 0x18, 0x4101);
         miiphy_write (dev->name, reg, 0x09, 0x0e00);
         miiphy_write (dev->name, reg, 0x04, 0x01e1);
-#endif
+#endif /* defined(CONFIG_M88E1111_PHY) */
         miiphy_reset (dev->name, reg);
 
 #if defined(CONFIG_440GX) || \
@@ -960,7 +964,7 @@
             miiphy_write (dev->name, reg, 23, 0x1300);
 #else
             miiphy_write (dev->name, reg, 23, 0x1000);
-#endif
+#endif /* defined(CONFIG_CIS8201_SHORT_ETCH) */
             /*
              * Vitesse VSC8201/Cicada CIS8201 errata:
              * Interoperability problem with Intel 82547EI phys
@@ -978,7 +982,7 @@
             miiphy_write (dev->name, reg, 0x1f, 0x0000);
             /* end Vitesse/Cicada errata */
         }
-#endif
+#endif /* defined(CONFIG_CIS8201_PHY) */
 
 #if defined(CONFIG_ET1011C_PHY)
         /*
@@ -997,9 +1001,8 @@
 
             miiphy_write(dev->name, reg, 0x1c, 0x74f0);
         }
-#endif
-
-#endif
+#endif /* defined(CONFIG_ET1011C_PHY) */
+#endif /*defined(CONFIG_440GX) || ... || defined(CONFIG_405EX) */
         /* Start/Restart autonegotiation */
         phy_setup_aneg (dev->name, reg);
         udelay (1000);
@@ -1034,10 +1038,15 @@
         puts (" done\n");
         udelay (500000);    /* another 500 ms (results in faster booting)
*/
     }
-#endif /* #ifndef CONFIG_CS8952_PHY */
+#endif /* !defined(CONFIG_CS8952_PHY) && !defined(CONFIG_M88E6061) */
 
+#if defined(CONFIG_M88E6061)
+    speed = m88e6061_speed (dev->name, CFG_M88E6061_CPU_PORT);
+    duplex = m88e6061_duplex (dev->name, CFG_M88E6061_CPU_PORT);
+#else
     speed = miiphy_speed (dev->name, reg);
     duplex = miiphy_duplex (dev->name, reg);
+#endif /* defined(CONFIG_M88E6061) */
 
     if (hw_p->print_speed) {
         hw_p->print_speed = 0;

Regards,

Grant




More information about the U-Boot mailing list