On 21/01/2016 12:15, woojung....@microchip.com wrote: > Update lan78xx to use patch of commit 4f2aaf7dd95b > ("Merge branch 'fix-phy-ignore-interrupts'")
Looks fine, just one nit below: > > Signed-off-by: Woojung Huh <woojung....@microchip.com> > --- > drivers/net/usb/lan78xx.c | 28 ++++++++++++++-------------- > 1 file changed, 14 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c > index 2ed5333..85ca7de 100644 > --- a/drivers/net/usb/lan78xx.c > +++ b/drivers/net/usb/lan78xx.c > @@ -36,7 +36,7 @@ > #define DRIVER_AUTHOR "WOOJUNG HUH <woojung....@microchip.com>" > #define DRIVER_DESC "LAN78XX USB 3.0 Gigabit Ethernet Devices" > #define DRIVER_NAME "lan78xx" > -#define DRIVER_VERSION "1.0.1" > +#define DRIVER_VERSION "1.0.2" > > #define TX_TIMEOUT_JIFFIES (5 * HZ) > #define THROTTLE_JIFFIES (HZ / 8) > @@ -914,6 +914,8 @@ static int lan78xx_link_reset(struct lan78xx_net *dev) > ret = lan78xx_write_reg(dev, MAC_CR, buf); > if (unlikely(ret < 0)) > return -EIO; > + > + phy_mac_interrupt(phydev, 0); > } else if (phydev->link && !dev->link_on) { > dev->link_on = true; > > @@ -954,6 +956,7 @@ static int lan78xx_link_reset(struct lan78xx_net *dev) > > ret = lan78xx_update_flowcontrol(dev, ecmd.duplex, ladv, radv); > netif_carrier_on(dev->net); Do you need this netif_carrier_on() call here? PHYLIB should set that already. > + phy_mac_interrupt(phydev, 1); > } > > return ret; > @@ -1495,7 +1498,6 @@ done: > static int lan78xx_mdio_init(struct lan78xx_net *dev) > { > int ret; > - int i; > > dev->mdiobus = mdiobus_alloc(); > if (!dev->mdiobus) { > @@ -1511,10 +1513,6 @@ static int lan78xx_mdio_init(struct lan78xx_net *dev) > snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", > dev->udev->bus->busnum, dev->udev->devnum); > > - /* handle our own interrupt */ > - for (i = 0; i < PHY_MAX_ADDR; i++) > - dev->mdiobus->irq[i] = PHY_IGNORE_INTERRUPT; > - > switch (dev->devid & ID_REV_CHIP_ID_MASK_) { > case 0x78000000: > case 0x78500000: > @@ -1558,6 +1556,16 @@ static int lan78xx_phy_init(struct lan78xx_net *dev) > return -EIO; > } > > + /* Enable PHY interrupts. > + * We handle our own interrupt > + */ > + ret = phy_read(phydev, LAN88XX_INT_STS); > + ret = phy_write(phydev, LAN88XX_INT_MASK, > + LAN88XX_INT_MASK_MDINTPIN_EN_ | > + LAN88XX_INT_MASK_LINK_CHANGE_); > + > + phydev->irq = PHY_IGNORE_INTERRUPT; > + > ret = phy_connect_direct(dev->net, phydev, > lan78xx_link_status_change, > PHY_INTERFACE_MODE_GMII); > @@ -1580,14 +1588,6 @@ static int lan78xx_phy_init(struct lan78xx_net *dev) > SUPPORTED_Pause | SUPPORTED_Asym_Pause); > genphy_config_aneg(phydev); > > - /* Workaround to enable PHY interrupt. > - * phy_start_interrupts() is API for requesting and enabling > - * PHY interrupt. However, USB-to-Ethernet device can't use > - * request_irq() called in phy_start_interrupts(). > - * Set PHY to PHY_HALTED and call phy_start() > - * to make a call to phy_enable_interrupts() > - */ > - phy_stop(phydev); > phy_start(phydev); > > netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); >