Subject: Re: [PATCH net] lan78xx: changed to use updated phy-ignore-interrupts

From: Florian Fainelli <[email-masked]>
Date: Fri, 22 Jan 2016 19:33:40 -0800

On 21/01/2016 12:15, [email-masked] 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 <[email-masked]>
> ---
>  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 <[email-masked]>"
>  #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");
>