summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFugang Duan <fugang.duan@nxp.com>2017-11-08 14:11:12 +0800
committerFugang Duan <fugang.duan@nxp.com>2017-11-08 18:58:17 +0800
commit2d942db12c01cb0535c077da92a3710c91197d08 (patch)
tree54d0429fd09f8ea07bd5661e32c3a844a7ede412
parent508cbceee41163d7c29aa19ab37c04d8b7b2838d (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.c10
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));