DF-3905 / fix.diff
--- a/sys/dev/netif/sk/if_sk.c +++ b/sys/dev/netif/sk/if_sk.c @@ -516,13 +516,14 @@ sk_marv_miibus_writereg(struct sk_if_softc *sc_if, int phy, int reg, int val) SK_YU_WRITE_2(sc_if, YUKON_SMIDR, val); SK_YU_WRITE_2(sc_if, YUKON_SMICR, YU_SMICR_PHYAD(phy) | YU_SMICR_REGAD(reg) | YU_SMICR_OP_WRITE); + /* Wait until the SMI write completes (BUSY deasserts). */ for (i = 0; i < SK_TIMEOUT; i++) { DELAY(1); - if (SK_YU_READ_2(sc_if, YUKON_SMICR) & YU_SMICR_BUSY) + if ((SK_YU_READ_2(sc_if, YUKON_SMICR) & YU_SMICR_BUSY) == 0) break; } if (i == SK_TIMEOUT) if_printf(&sc_if->arpcom.ac_if, "phy write timed out\n"); |