[U-Boot] [PATCH] AT91: Defer Dataflash access to env_relocate_spec

Albert ARIBAUD albert.u.boot at aribaud.net
Fri Aug 12 11:38:39 CEST 2011


On 03/08/2011 09:36, Hong Xu wrote:
> Hi Reinhard,
>
> On 08/03/2011 03:20 PM, Reinhard Meyer wrote:
>> Dear Hong Xu,
>>   >  When env_init is called, the SPI is not actually initialized in U-Boot.
>>   >  So that we can not read Dataflash for its content.
>>   >  We simply mark it OK for now, and defer the real work to
>>   >  `env_relocate_spec'. (Idealy from env_nand.c)
>>   >
>>   >  Signed-off-by: Hong Xu<hong.xu at atmel.com>
>>   >  ---
>>   >  common/env_dataflash.c | 83
>> ++++++++++++++++++++++++++----------------------
>>   >  1 files changed, 45 insertions(+), 38 deletions(-)
>>
>> I cannot really decide if that is a good approach. Where would be
>> the issue if SPI/dataflash were initialized at this point (before
>> relocation)?
>
> Currently the SPI is initialized in board_init which is called in
> board_init_r, but env_init is called in board_init_f. So actually the
> original code needs the SPI to be initialized before env_init, not
> before relocation.
>
> An alternative way is to put SPI initialization code in
> board_early_init_f. But I'm not sure if it's the correct way.

I guess this is a general issue: if some driver is needed to get access 
to environment, then it must be initialized before relocation. But not 
all boards need initialization this early, and conversively, for each 
board-specific case where environment reading requires driver X, this 
adds a *general* constraint of initializing X before relocation -- and 
we'll end up initializing just about anything before reloc on boards 
that do not actually need initializations this early.

Now this may not be feasible, but I think the idea is more "initialize 
what is needed for relocation, then relocate, then initialize the rest.

Does anyone else here see this problem as I see it, or am I just being 
over-nit-picking?

If it *is* a problem, then the only way I see to solve this is, for each 
driver that *might* be initialized before reloc, to provide a 
configuration option to select between initializing before or after 
relocation (possibly with variations in the driver initialization code 
based on this config option).

Or am I also over-engineering here?

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list