bcmgenet_mii_wait() waits for the UNIMAC MDIO command busy bit to clear, but ignores wait_event_timeout() and always returns success. Return -ETIMEDOUT when the busy bit remains set for the whole wait period so MDIO callers see the failed transaction instead of continuing as if the bus were idle. Signed-off-by: Pengpeng Hou --- drivers/net/ethernet/broadcom/genet/bcmmii.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index a4e0d5a68268..92b5997d00b2 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c @@ -439,10 +439,12 @@ static int bcmgenet_mii_wait(void *wait_func_data) { struct bcmgenet_priv *priv = wait_func_data; - wait_event_timeout(priv->wq, - !(bcmgenet_umac_readl(priv, UMAC_MDIO_CMD) - & MDIO_START_BUSY), - HZ / 100); + if (!wait_event_timeout(priv->wq, + !(bcmgenet_umac_readl(priv, UMAC_MDIO_CMD) + & MDIO_START_BUSY), + HZ / 100)) + return -ETIMEDOUT; + return 0; } -- 2.50.1 (Apple Git-155)