On Thursday 29 January 2009 15:41:31 Wolfgang Denk wrote:
> In message <200901291525.03553.vap...@gentoo.org> you wrote:
> > so how exactly are $ethaddr in the env and bi_enetaddr in the global data
> > supposed to interact ?  this is a mess in the current tree and i dont see
> > any notes that indicate how things are supposed to be handled.  and i'd
> > like to make these changes once and get it right the first time ;).
>
> Can't you just ask some simple and easy questions for a change? ;-)
>
> > i see it as:
> >  - common net code calls board_eth_init()
> >  - board_eth_init() sets up ethaddr in env if it isnt set already
> >  - board_eth_init() calls the driver init (bfin_EMAC_initialize() in my
> > case) - driver init looks up ethaddr in env and sets bi_enetaddr in
> > global data - all other code uses bi_enetaddr to get the MAC address
>
> This doesn't work, as in the case that you don;t use any network
> commands in U-Boot, board_eth_init() will not run and consequently you
> don't know the MAC address so you cannot pass it to Linux either.
>
> Rather:
>
>       - misc_init_r() [or similar] sets up ethaddr in env if it isnt
>         set already and sets bi_enetaddr in global data
>       - board_eth_init() calls the driver init
>         (bfin_EMAC_initialize() in your case)
>       - driver init looks up ethaddr in env or bi_enetaddr

well this gets us into the realm of what i was trying to avoid/fix in the 
first place: duplication of the env/ethaddr handling/parsing code.  i get 
tired of auditing every board/driver just to find the same simple bugs were 
duplicated and/or not handled properly.

i guess i can mitigate this by making functions in include/asm-blackfin/net.h 
and having the boards/drivers call those.
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.

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

Reply via email to