• Andrew Lunn's avatar
    net: ethernet: fec: Prevent MII event after MII_SPEED write · 790ab249
    Andrew Lunn authored
    The change to polled IO for MDIO completion assumes that MII events
    are only generated for MDIO transactions. However on some SoCs writing
    to the MII_SPEED register can also trigger an MII event. As a result,
    the next MDIO read has a pending MII event, and immediately reads the
    data registers before it contains useful data. When the read does
    complete, another MII event is posted, which results in the next read
    also going wrong, and the cycle continues.
    
    By writing 0 to the MII_DATA register before writing to the speed
    register, this MII event for the MII_SPEED is suppressed, and polled
    IO works as expected.
    
    Fixes: 29ae6bd1 ("net: ethernet: fec: Replace interrupt driven MDIO with polled IO")
    Reported-by: default avatarAndy Duan <fugang.duan@nxp.com>
    Suggested-by: default avatarAndy Duan <fugang.duan@nxp.com>
    Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    790ab249
fec_main.c 101 KB