[PATCH 1/1] efi_loader: QEMU CONFIG_EFI_GRUB_ARM32_WORKAROUND=n
Heinrich Schuchardt
xypron.glpk at gmx.de
Sat Sep 19 14:17:18 CEST 2020
On 19.09.20 13:42, Mark Kettenis wrote:
>> From: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> Date: Thu, 17 Sep 2020 20:03:24 +0200
>>
>> On 9/17/20 7:47 PM, Tom Rini wrote:
>>> On Thu, Sep 17, 2020 at 07:18:08PM +0200, Heinrich Schuchardt wrote:
>>>
>>>> CONFIG_EFI_GRUB_ARM32 is only needed for architectures with caches that are
>>>> not managed via CP15 (or for some outdated buggy versions of GRUB). It
>>>> makes more sense to disable the setting per architecture than per defconfig.
>>>>
>>>> Move QEMU's CONFIG_EFI_GRUB_ARM32_WORKAROUND=n from defconfig to Kconfig.
>>>>
>>>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>>>> ---
>>>> configs/qemu_arm_defconfig | 1 -
>>>> lib/efi_loader/Kconfig | 1 +
>>>> 2 files changed, 1 insertion(+), 1 deletion(-)
>>>
>>> Why? Are we about to move this to be a short list of "default y if ..."
>>> instead? Otherwise no, this is the level of detail that should be in a
>>> defconfig I think and not Kconfig.
>>>
>>
>> Hello Tom,
>>
>> yes, in the long run I want to turn this into "default y if". But I
>> first need to a list of all ARCH_* which have a cache which is not
>> controlled via CP15.
>
> It is fairly standard for SoCs with Cortex-A9 cores. Maybe some SoCs
> with Cortex-A8 are affected as well. Probably the list of affected
> SoCs is those that implement v7_outer_cache_enable().
>
git grep -n v7_outer_cache_enable
yields
arch/arm/cpu/armv7/cache_v7.c:210:__weak void v7_outer_cache_enable(void) {}
arch/arm/include/asm/armv7.h:128:void v7_outer_cache_enable(void);
arch/arm/mach-imx/cache.c:83:void v7_outer_cache_enable(void)
arch/arm/mach-mvebu/cpu.c:658:void v7_outer_cache_enable(void)
arch/arm/mach-omap2/omap3/board.c:433:void v7_outer_cache_enable(void)
arch/arm/mach-omap2/omap4/hwinit.c:166:void v7_outer_cache_enable(void)
arch/arm/mach-s5pc1xx/cache.c:27:void v7_outer_cache_enable(void)
arch/arm/mach-socfpga/misc.c:69:void v7_outer_cache_enable(void)
arch/arm/mach-uniphier/arm32/cache-uniphier.c:277:void
v7_outer_cache_enable(void)
arch/arm/mach-kirkwood/cache.c has an architecture specific
implementation of l2_cache_disable().
> However, since other 32-bit ARM UEFI implementation are generally not
> unavailable, I'm not sure disabling this workaround on other SoCs is
> feasable since the code oath for booting OSes without the MMU enabled
> may not be very well tested.
>
According to the UEFI spec we have to fulfill the following requirements
when handing over to the OS on ARM 32bit:
- MMU enabled
- Instruction and data caches enabled
- Access flag disabled
- Translation remap disabled
- Fast Context Switch Extension (FCSE) must be disabled
- caches requiring platform information to manage or invoke
non-architectural cache/TLB lockdown mechanisms disabled
With the GRUB workaround enabled we call cleanup_before_linux().
According to README.arm_caches this shall disable the MMU.
Mark, I do not understand your concerns regarding a disabled MMU when
*not* calling cleanup_before_linux().
Best regards
Heinrich
More information about the U-Boot
mailing list