Re: [PATCH net-next 2/3] net: ethernet: socionext: add AVE ethernet driver
From: Andrew Lunn <andrew@lunn.ch>
Date: 2017-09-11 12:31:49
Also in:
linux-arm-kernel, linux-devicetree, lkml
From: Andrew Lunn <andrew@lunn.ch>
Date: 2017-09-11 12:31:49
Also in:
linux-arm-kernel, linux-devicetree, lkml
quoted
quoted
+static irqreturn_t ave_interrupt(int irq, void *netdev) +{ + struct net_device *ndev = (struct net_device *)netdev; + struct ave_private *priv = netdev_priv(ndev); + u32 gimr_val, gisr_val; + + gimr_val = ave_irq_disable_all(ndev); + + /* get interrupt status */ + gisr_val = ave_r32(ndev, AVE_GISR); + + /* PHY */ + if (gisr_val & AVE_GI_PHY) { + ave_w32(ndev, AVE_GISR, AVE_GI_PHY); + if (priv->internal_phy_interrupt) + phy_mac_interrupt(ndev->phydev, ndev->phydev->link);Humm. I don't think this is correct. You are supposed to give it the new link state, not the old. What does a PHY interrupt mean here?In the general case, I think PHY events like changing link state are transmitted to CPU as interrupt via interrupt controller, then PHY driver itself can handle the interrupt. And in this case, PHY events are transmitted to MAC as one of its interrupt factor, then I thought that MAC driver had to tell the events to PHY.
Could this be in-band SGMI signalling from the PHY to the MAC? Does
the documentation give examples of when this interrupt will happen?
Andrew