mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-01 11:24:25 +08:00
net: phy: smsc: fix link up detection in forced irq mode
[ Upstream commit58aac3a2ef
] Currently link up can't be detected in forced mode if polling isn't used. Only link up interrupt source we have is aneg complete which isn't applicable in forced mode. Therefore we have to use energy-on as link up indicator. Fixes:7365494550
("net: phy: smsc: skip ENERGYON interrupt if disabled") Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d83813f724
commit
fe8787c1e4
@ -44,7 +44,6 @@ static struct smsc_hw_stat smsc_hw_stats[] = {
|
||||
};
|
||||
|
||||
struct smsc_phy_priv {
|
||||
u16 intmask;
|
||||
bool energy_enable;
|
||||
struct clk *refclk;
|
||||
};
|
||||
@ -58,7 +57,6 @@ static int smsc_phy_ack_interrupt(struct phy_device *phydev)
|
||||
|
||||
static int smsc_phy_config_intr(struct phy_device *phydev)
|
||||
{
|
||||
struct smsc_phy_priv *priv = phydev->priv;
|
||||
int rc;
|
||||
|
||||
if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
|
||||
@ -66,14 +64,9 @@ static int smsc_phy_config_intr(struct phy_device *phydev)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
priv->intmask = MII_LAN83C185_ISF_INT4 | MII_LAN83C185_ISF_INT6;
|
||||
if (priv->energy_enable)
|
||||
priv->intmask |= MII_LAN83C185_ISF_INT7;
|
||||
|
||||
rc = phy_write(phydev, MII_LAN83C185_IM, priv->intmask);
|
||||
rc = phy_write(phydev, MII_LAN83C185_IM,
|
||||
MII_LAN83C185_ISF_INT_PHYLIB_EVENTS);
|
||||
} else {
|
||||
priv->intmask = 0;
|
||||
|
||||
rc = phy_write(phydev, MII_LAN83C185_IM, 0);
|
||||
if (rc)
|
||||
return rc;
|
||||
@ -86,7 +79,6 @@ static int smsc_phy_config_intr(struct phy_device *phydev)
|
||||
|
||||
static irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
|
||||
{
|
||||
struct smsc_phy_priv *priv = phydev->priv;
|
||||
int irq_status;
|
||||
|
||||
irq_status = phy_read(phydev, MII_LAN83C185_ISF);
|
||||
@ -95,7 +87,7 @@ static irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
if (!(irq_status & priv->intmask))
|
||||
if (!(irq_status & MII_LAN83C185_ISF_INT_PHYLIB_EVENTS))
|
||||
return IRQ_NONE;
|
||||
|
||||
phy_trigger_machine(phydev);
|
||||
|
Loading…
Reference in New Issue
Block a user