IXP NPE: add support for fixed-speed MII ports
authorMichael Schwingen <michael@schwingen.org>
Sun, 22 May 2011 22:00:08 +0000 (00:00 +0200)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 23 Jun 2011 06:25:18 +0000 (08:25 +0200)
Signed-off-by: Michael Schwingen <michael@schwingen.org>
arch/arm/cpu/ixp/npe/npe.c

index 6d92c53d4c16a0df096344762bb5c692a9a18911..f0e02bf7d92e5d280074f69d5534e8f174b30212 100644 (file)
@@ -359,36 +359,53 @@ static int npe_init(struct eth_device *dev, bd_t * bis)
 
        debug("%s: 1\n", __FUNCTION__);
 
-       miiphy_read (dev->name, p_npe->phy_no, MII_BMSR, &reg_short);
-
-       /*
-        * Wait if PHY is capable of autonegotiation and autonegotiation is not complete
-        */
-       if ((reg_short & BMSR_ANEGCAPABLE) && !(reg_short & BMSR_ANEGCOMPLETE)) {
-               puts ("Waiting for PHY auto negotiation to complete");
-               i = 0;
-               while (!(reg_short & BMSR_ANEGCOMPLETE)) {
-                       /*
-                        * Timeout reached ?
-                        */
-                       if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
-                               puts (" TIMEOUT !\n");
-                               break;
-                       }
+#ifdef CONFIG_MII_NPE0_FIXEDLINK
+       if (0 == p_npe->eth_id) {
+               speed = CONFIG_MII_NPE0_SPEED;
+               duplex = CONFIG_MII_NPE0_FULLDUPLEX ? FULL : HALF;
+       } else
+#endif
+#ifdef CONFIG_MII_NPE1_FIXEDLINK
+       if (1 == p_npe->eth_id) {
+               speed = CONFIG_MII_NPE1_SPEED;
+               duplex = CONFIG_MII_NPE1_FULLDUPLEX ? FULL : HALF;
+       } else
+#endif
+       {
+               miiphy_read(dev->name, p_npe->phy_no, MII_BMSR, &reg_short);
+
+               /*
+                * Wait if PHY is capable of autonegotiation and
+                * autonegotiation is not complete
+                */
+               if ((reg_short & BMSR_ANEGCAPABLE) &&
+                   !(reg_short & BMSR_ANEGCOMPLETE)) {
+                       puts("Waiting for PHY auto negotiation to complete");
+                       i = 0;
+                       while (!(reg_short & BMSR_ANEGCOMPLETE)) {
+                               /*
+                                * Timeout reached ?
+                                */
+                               if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
+                                       puts(" TIMEOUT !\n");
+                                       break;
+                               }
 
-                       if ((i++ % 1000) == 0) {
-                               putc ('.');
-                               miiphy_read (dev->name, p_npe->phy_no, MII_BMSR, &reg_short);
+                               if ((i++ % 1000) == 0) {
+                                       putc('.');
+                                       miiphy_read(dev->name, p_npe->phy_no,
+                                                    MII_BMSR, &reg_short);
+                               }
+                               udelay(1000);   /* 1 ms */
                        }
-                       udelay (1000);  /* 1 ms */
+                       puts(" done\n");
+                       /* another 500 ms (results in faster booting) */
+                       udelay(500000);
                }
-               puts (" done\n");
-               udelay (500000);        /* another 500 ms (results in faster booting) */
+               speed = miiphy_speed(dev->name, p_npe->phy_no);
+               duplex = miiphy_duplex(dev->name, p_npe->phy_no);
        }
 
-       speed = miiphy_speed (dev->name, p_npe->phy_no);
-       duplex = miiphy_duplex (dev->name, p_npe->phy_no);
-
        if (p_npe->print_speed) {
                p_npe->print_speed = 0;
                printf ("ENET Speed is %d Mbps - %s duplex connection\n",