[U-Boot] Inefficient code in NetLoop() ?

Rafal Jaworowski raj at semihalf.com
Fri Sep 26 10:14:19 CEST 2008


Stefan Roese wrote:
> On Friday 26 September 2008, Wolfgang Denk wrote:
>>>> Am I reading this correctly that we  eth_halt()  and  eth_init()  the
>>>> network interface for each and every call to NetLoop?
>>> Yes, it looks that way.  Ripe for gutting.
>> I didn't have much time to look into the code, so I'm just speculating
>> - maybe this is needed for switching interfaces in case of errors?
> 
> Some ethernet interfaces (e.g. ppc4xx) need to get stopped after the network 
> transaction. Otherwise the interface will continue to DMA data to the buffers 
> and this could break OS booting. So please don't remove the eth_halt() after 
> the transaction is finished.

I share Stefan's concerns. Isn't in general the eth_init()/eth_halt()
construct because of polling mode where the network controller needs to make
sure to operate in well defined states?

In our deployments of using U-Boot networking facilities in standalone apps,
there were problems when not doing the full eth_init()/eth_halt() sequence:
without closing eth_halt() after the initial successfull transaction the
network interface would choke and not work after some time, and all subsequent
transfers would fail.

kind regards,
Rafal


More information about the U-Boot mailing list