
In message 1202291955.25864.43.camel@gentoo-jocke.transmode.se you wrote:
I think the register approach is needed if we ever want to make u-boot fully relocateable.
Good point.
There are a few global data accesses that needs to be fixed before that can happen though. There should not be any global data accesses before relocate_code has done its thing. One of the first things that happens in board_init_f is: for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { if ((*init_fnc_ptr) () != 0) { hang (); } } init_sequence is a global variable.
Is this table really needed? Why not move it inside board_init_f and save some bytes?
The original idea of the table was that a user could provide (in his board config file) a private version to allow for easy, #ifdef free board specific initialization sequences.
Unfortunately I never found the time or resources to complete this.
The next is access is env_get_char, this probably needs to move into GD.
I figured global data accesses wasn't allowed(other than GD) at all before relocate_code()?
They are not exactly forbidden, you just have to know exactly what you can expect - i. e., usually they just don't make much sense ;-)
Best regards,
Wolfgang Denk