By default, mdiobus_alloc() sets the PHY's to polling mode, but a
pointer size memcpy means that couple IRQs (depending
on 32-bit or 64-bit kernels) end up being overwritten with
a value of 0. This means that PHY_POLL is disabled and results
in unpredictable behavior depending on the PHYs location on the mdio
bus. Remove that memcpy and the now unused phy_irq member to force
SMSC911x PHY's into polling mode 100% of the time.
Signed-off-by: Jeremy Linton <redacted>
---
drivers/net/ethernet/smsc/smsc911x.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
index 8af2556..b5ab5e1 100644
--- a/drivers/net/ethernet/smsc/smsc911x.c
+++ b/drivers/net/ethernet/smsc/smsc911x.c
@@ -116,7 +116,6 @@ struct smsc911x_data {
struct phy_device *phy_dev;
struct mii_bus *mii_bus;
- int phy_irq[PHY_MAX_ADDR];
unsigned int using_extphy;
int last_duplex;
int last_carrier;@@ -1073,7 +1072,6 @@ static int smsc911x_mii_init(struct platform_device *pdev,
pdata->mii_bus->priv = pdata;
pdata->mii_bus->read = smsc911x_mii_read;
pdata->mii_bus->write = smsc911x_mii_write;
- memcpy(pdata->mii_bus->irq, pdata->phy_irq, sizeof(pdata->mii_bus));
pdata->mii_bus->parent = &pdev->dev;
--
2.5.5
On Thu, Jun 16, 2016 at 10:54:30AM -0500, Jeremy Linton wrote:
By default, mdiobus_alloc() sets the PHY's to polling mode, but a
pointer size memcpy means that couple IRQs (depending
on 32-bit or 64-bit kernels) end up being overwritten with
a value of 0. This means that PHY_POLL is disabled and results
in unpredictable behavior depending on the PHYs location on the mdio
bus. Remove that memcpy and the now unused phy_irq member to force
SMSC911x PHY's into polling mode 100% of the time.
Signed-off-by: Jeremy Linton <redacted>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
On 06/16/2016 06:54 PM, Jeremy Linton wrote:
By default, mdiobus_alloc() sets the PHY's to polling mode, but a
Rather "PHYs".
pointer size memcpy means that couple IRQs (depending
Could be more words on this line, it's broken too early, I think.
on 32-bit or 64-bit kernels) end up being overwritten with
a value of 0. This means that PHY_POLL is disabled and results
in unpredictable behavior depending on the PHYs location on the mdio
Contrariwise, "PHY's" here. And it's MDIO.
bus. Remove that memcpy and the now unused phy_irq member to force
SMSC911x PHY's into polling mode 100% of the time.
Signed-off-by: Jeremy Linton <redacted>
Acked-by: Sergei Shtylyov <redacted>
[...]
MBR, Sergei
On 06/16/2016 09:55 PM, Sergei Shtylyov wrote:
quoted
By default, mdiobus_alloc() sets the PHY's to polling mode, but a
Rather "PHYs".
quoted
pointer size memcpy means that couple IRQs (depending
Could be more words on this line, it's broken too early, I think.
quoted
on 32-bit or 64-bit kernels) end up being overwritten with
a value of 0. This means that PHY_POLL is disabled and results
in unpredictable behavior depending on the PHYs location on the mdio
Contrariwise, "PHY's" here. And it's MDIO.
quoted
bus. Remove that memcpy and the now unused phy_irq member to force
SMSC911x PHY's into polling mode 100% of the time.
Signed-off-by: Jeremy Linton <redacted>
Acked-by: Sergei Shtylyov <redacted>
I was going to add the following too but just forgot:
Fixes: e7f4dc3536a4 ("mdio: Move allocation of interrupts into core")
[...]
MBR, Sergei