[U-Boot] [PATCH v5 09/11] armv8: ls2080a: Drop early MMU for SPL build

york sun york.sun at nxp.com
Tue Mar 7 04:31:10 UTC 2017


On 03/06/2017 07:59 PM, Marek Vasut wrote:
> On 03/06/2017 06:02 PM, York Sun wrote:
>> Early MMU improves performance especially on emulators. However, the
>> early MMU is left enabled after the first stage of SPL boot. Instead
>> of flushing D-cache and dealing with re-enabling MMU for the second
>> stage U-Boot, disabling it for SPL build simplifies the process. The
>> performance penalty is unnoticeable on the real hardware. As of now,
>> SPL boot is not supported by existing emulators. So this should have
>> no impact on emulators.
>>
>> Signed-off-by: York Sun <york.sun at nxp.com>
>
> This looks stupid. Why don't you just keep it enabled between SPL and
> U-Boot ? That'd be much more logical and sensible ...

Mark,

We are probably the only one using early MMU to speed up execution on 
emulators. I only noticed recently the cache/MMU wasn't enabled for most 
ARMv8 layerscape SoCs for SPL, except LS2080A (which is where we 
started). During recent debug, I learned the process of 
break-before-make process should be strictly followed when changing MMU. 
The normal boot part surely creates MMU tables. If the SPL also creates 
MMU table and enables cache, then we need to flush cache and disable MMU 
before the normal boot part begins to run. Instead of dealing all these 
steps just for LS2080A, I figure it would be a lot easier to drop it as 
I proposed in this patch.

York

>
>> ---
>>
>> Changes in v5: None
>> Changes in v4: None
>> Changes in v3:
>>   Add a patch to drop early MMU setup for LS2080A SPL build.
>>
>> Changes in v2: None
>>
>>  arch/arm/cpu/armv8/fsl-layerscape/spl.c | 3 ---
>>  1 file changed, 3 deletions(-)
>>
>> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/spl.c b/arch/arm/cpu/armv8/fsl-layerscape/spl.c
>> index 1dabdbb..73a8680 100644
>> --- a/arch/arm/cpu/armv8/fsl-layerscape/spl.c
>> +++ b/arch/arm/cpu/armv8/fsl-layerscape/spl.c
>> @@ -45,9 +45,6 @@ void board_init_f(ulong dummy)
>>  {
>>  	/* Clear global data */
>>  	memset((void *)gd, 0, sizeof(gd_t));
>> -#ifdef CONFIG_LS2080A
>> -	arch_cpu_init();
>> -#endif
>>  	board_early_init_f();
>>  	timer_init();
>>  #ifdef CONFIG_LS2080A
>>
>
>



More information about the U-Boot mailing list