MLK-16782 net: fec: double check the mii interrupt status
authorFugang Duan <fugang.duan@nxp.com>
Wed, 8 Nov 2017 06:11:12 +0000 (14:11 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:39:10 +0000 (15:39 -0500)
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>
drivers/net/ethernet/freescale/fec_main.c

index 88ecb5b..33e5cda 100644 (file)
@@ -1844,6 +1844,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);
@@ -1863,9 +1864,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));