diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/libchip/network/greth.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/c/src/libchip/network/greth.c b/c/src/libchip/network/greth.c index e50c6421cb..05d74c775b 100644 --- a/c/src/libchip/network/greth.c +++ b/c/src/libchip/network/greth.c @@ -268,6 +268,7 @@ greth_initialize_hardware (struct greth_softc *sc) int tmp2; unsigned int msecs; struct timeval tstart, tnow; + int anegtout; greth_regs *regs; @@ -303,6 +304,10 @@ greth_initialize_hardware (struct greth_softc *sc) sc->sp = 0; sc->auto_neg = 0; sc->auto_neg_time = 0; + /* the anegtout variable is needed because print cannot be done before mac has + been reconfigured due to a possible deadlock situation if rtems + is run through the edcl with uart polling (-u)*/ + anegtout = 0; if ((phyctrl >> 12) & 1) { /*wait for auto negotiation to complete*/ msecs = 0; @@ -329,7 +334,7 @@ greth_initialize_hardware (struct greth_softc *sc) msecs = (tnow.tv_sec-tstart.tv_sec)*1000+(tnow.tv_usec-tstart.tv_usec)/1000; if ( msecs > GRETH_AUTONEGO_TIMEOUT_MS ){ sc->auto_neg_time = msecs; - printk("Auto negotiation timed out. Selecting default config\n\r"); + anegtout = 1 tmp1 = read_mii(phyaddr, 0); sc->gb = ((phyctrl >> 6) & 1) && !((phyctrl >> 13) & 1); sc->sp = !((phyctrl >> 6) & 1) && ((phyctrl >> 13) & 1); @@ -477,7 +482,11 @@ auto_neg_done: #endif regs->ctrl |= GRETH_CTRL_RXEN | (sc->fd << 4) | GRETH_CTRL_RXIRQ | (sc->sp << 7) | (sc->gb << 8); - + + if (anegtout) { + printk("Auto negotiation timed out. Selecting default config\n\r"); + } + print_init_info(sc); } |