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>
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);
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));