diff options
author | Fugang Duan <fugang.duan@nxp.com> | 2017-11-08 14:11:12 +0800 |
---|---|---|
committer | Fugang Duan <fugang.duan@nxp.com> | 2017-11-08 18:58:17 +0800 |
commit | 2d942db12c01cb0535c077da92a3710c91197d08 (patch) | |
tree | 54d0429fd09f8ea07bd5661e32c3a844a7ede412 | |
parent | 508cbceee41163d7c29aa19ab37c04d8b7b2838d (diff) |
MLK-16782 net: fec: double check the mii interrupt status
Double check the mii interrupt status during mdio bus accessing
to avoid interrupt lost in timeout case.
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 913560a3a4f9..f01a7c755a72 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1836,6 +1836,7 @@ static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum) struct fec_enet_private *fep = bus->priv; struct device *dev = &fep->pdev->dev; unsigned long time_left; + uint int_events; int ret = 0; ret = pm_runtime_get_sync(dev); @@ -1855,9 +1856,12 @@ static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum) usecs_to_jiffies(FEC_MII_TIMEOUT)); if (time_left == 0) { fep->mii_timeout = 1; - netdev_err(fep->netdev, "MDIO read timeout\n"); - ret = -ETIMEDOUT; - goto out; + int_events = readl(fep->hwp + FEC_IEVENT); + if (!(int_events & FEC_ENET_MII)) { + netdev_err(fep->netdev, "MDIO read timeout\n"); + ret = -ETIMEDOUT; + goto out; + } } ret = FEC_MMFR_DATA(readl(fep->hwp + FEC_MII_DATA)); |