--- a/arch/mips/ath79/dev-wmac.c +++ b/arch/mips/ath79/dev-wmac.c @@ -62,10 +62,27 @@ static void __init ar913x_wmac_setup(voi static int ar933x_wmac_reset(void) { + int retries = 20; + ath79_device_reset_set(AR933X_RESET_WMAC); ath79_device_reset_clear(AR933X_RESET_WMAC); - return 0; + while (1) { + u32 bootstrap; + + bootstrap = ath79_reset_rr(AR933X_RESET_REG_BOOTSTRAP); + if ((bootstrap & AR933X_BOOTSTRAP_EEPBUSY) == 0) + return 0; + + if (retries-- == 0) + break; + + udelay(10000); + retries++; + } + + pr_err("ar933x: WMAC reset timed out"); + return -ETIMEDOUT; } static int ar933x_r1_get_wmac_revision(void)