On 04/03/2012 10:41 PM, Mike Frysinger wrote:
On Friday 23 March 2012 16:11:17 Sebastian Andrzej Siewior wrote:
If we set the status after successful init call then we get in trouble
if stdout (or setderr) is set to netconsole. If we are going to use one
of those (lets say printf) during ->init() the following happens:
- network is of (state passive)
- we switch on netconsole
- nc_getc() gets called
- in NetLoop() we switch on ethernet via eth_init()
- we end up in tsec_init() (inc case we use the tsec driver). Here we
   call a printf()

considering your followup patches convert printf() to serial_printf(), is this
patch still needed ?

Not for the tsec driver but it is possible that other driver do have
the same problem. I haven't also checked all the phy devices which
might do some prints. Therefore I would prefer to have this in.

--- a/net/eth.c
+++ b/net/eth.c
@@ -380,14 +380,17 @@ int eth_init(bd_t *bis)

        old_current = eth_current;
        do {
+               int old_state;
+
                debug("Trying %s\n", eth_current->name);

-               if (eth_current->init(eth_current,bis)>= 0) {
-                       eth_current->state = ETH_STATE_ACTIVE;
-
+               old_state = eth_current->state;
+               eth_current->state = ETH_STATE_ACTIVE;
+               if (eth_current->init(eth_current,bis)>= 0)
                        return 0;
-               }
+
                debug("FAIL\n");
+               eth_current->state = old_state;

                eth_try_another(0);
        } while (old_current != eth_current);

this needs a comment in the code explaining why you're setting things active
early and then turning it off

Okay.

-mike

Sebastian
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to