
On 19.09.20 13:42, Mark Kettenis wrote:
From: Heinrich Schuchardt xypron.glpk@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@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