diff options
-rw-r--r-- | drivers/net/phy/marvell.c | 5 | ||||
-rw-r--r-- | drivers/net/phy/micrel.c | 26 | ||||
-rw-r--r-- | drivers/net/rtl8169.c | 13 | ||||
-rw-r--r-- | net/nfs.c | 17 |
4 files changed, 52 insertions, 9 deletions
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index d2e68d492a..58d287bb07 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -476,10 +476,7 @@ static int m88e1310_config(struct phy_device *phydev) /* Ensure to return to page 0 */ phy_write(phydev, MDIO_DEVAD_NONE, MIIM_88E1310_PHY_PAGE, 0x0000); - genphy_config_aneg(phydev); - phy_reset(phydev); - - return 0; + return genphy_config_aneg(phydev); } static struct phy_driver M88E1011S_driver = { diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index b08788a2b0..6b313a9fd3 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -487,6 +487,31 @@ static struct phy_driver ksz9031_driver = { .readext = &ksz9031_phy_extread, }; +int ksz886x_config(struct phy_device *phydev) +{ + /* we are connected directly to the switch without + * dedicated PHY. */ + phydev->link = 1; + phydev->duplex = DUPLEX_FULL; + phydev->speed = SPEED_100; + return 0; +} + +static int ksz886x_startup(struct phy_device *phydev) +{ + return 0; +} + +static struct phy_driver ksz886x_driver = { + .name = "Micrel KSZ886x Switch", + .uid = 0x00221430, + .mask = 0xfffff0, + .features = PHY_BASIC_FEATURES, + .config = &ksz886x_config, + .startup = &ksz886x_startup, + .shutdown = &genphy_shutdown, +}; + int phy_micrel_init(void) { phy_register(&KSZ804_driver); @@ -500,5 +525,6 @@ int phy_micrel_init(void) #endif phy_register(&ksz9031_driver); phy_register(&ksz8895_driver); + phy_register(&ksz886x_driver); return 0; } diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c index 163b9df55c..843b083f8f 100644 --- a/drivers/net/rtl8169.c +++ b/drivers/net/rtl8169.c @@ -850,9 +850,11 @@ static void rtl8169_init_ring(pci_dev_t dev) } #ifdef CONFIG_DM_ETH -static void rtl8169_common_start(struct udevice *dev, unsigned char *enetaddr) +static void rtl8169_common_start(struct udevice *dev, unsigned char *enetaddr, + unsigned long dev_iobase) #else -static void rtl8169_common_start(pci_dev_t dev, unsigned char *enetaddr) +static void rtl8169_common_start(pci_dev_t dev, unsigned char *enetaddr, + unsigned long dev_iobase) #endif { int i; @@ -862,6 +864,8 @@ static void rtl8169_common_start(pci_dev_t dev, unsigned char *enetaddr) printf ("%s\n", __FUNCTION__); #endif + ioaddr = dev_iobase; + rtl8169_init_ring(dev); rtl8169_hw_start(dev); /* Construct a perfect filter frame with the mac address as first match @@ -885,8 +889,9 @@ static void rtl8169_common_start(pci_dev_t dev, unsigned char *enetaddr) static int rtl8169_eth_start(struct udevice *dev) { struct eth_pdata *plat = dev_get_platdata(dev); + struct rtl8169_private *priv = dev_get_priv(dev); - rtl8169_common_start(dev, plat->enetaddr); + rtl8169_common_start(dev, plat->enetaddr, priv->iobase); return 0; } @@ -897,7 +902,7 @@ RESET - Finish setting up the ethernet interface static int rtl_reset(struct eth_device *dev, bd_t *bis) { rtl8169_common_start((pci_dev_t)(unsigned long)dev->priv, - dev->enetaddr); + dev->enetaddr, dev->iobase); return 0; } @@ -481,8 +481,23 @@ static int nfs_lookup_reply(uchar *pkt, unsigned len) if (rpc_pkt.u.reply.rstatus || rpc_pkt.u.reply.verifier || rpc_pkt.u.reply.astatus || - rpc_pkt.u.reply.data[0]) + rpc_pkt.u.reply.data[0]) { + switch (ntohl(rpc_pkt.u.reply.astatus)) { + case 0: /* Not an error */ + break; + case 2: /* Remote can't support NFS version */ + printf("*** ERROR: NFS version not supported: Requested: V%d, accepted: min V%d - max V%d\n", + 2, + ntohl(rpc_pkt.u.reply.data[0]), + ntohl(rpc_pkt.u.reply.data[1])); + break; + default: /* Unknown error on 'accept state' flag */ + printf("*** ERROR: accept state error (%d)\n", + ntohl(rpc_pkt.u.reply.astatus)); + break; + } return -1; + } memcpy(filefh, rpc_pkt.u.reply.data + 1, NFS_FHSIZE); |