diff mbox series

[U-Boot,1/1] efi_loader: restrict EFI_LOADER to armv7 and armv8 on ARM

Message ID 20191117100040.8682-1-xypron.glpk@gmx.de
State Accepted, archived
Commit b20bb09b2108c8368cce7d2801e5e746f4279e1f
Delegated to: Heinrich Schuchardt
Headers show
Series [U-Boot,1/1] efi_loader: restrict EFI_LOADER to armv7 and armv8 on ARM | expand

Commit Message

Heinrich Schuchardt Nov. 17, 2019, 10 a.m. UTC
fatload USB was reported to fail on the Sheevaplug. Debugging showed that
this was caused by an incorrect unaligned write to memory in
path_to_uefi().

UEFI on ARM requires that unaligned memory access is enabled.

* ARMv5 does not support unaligned access at all.
* ARMv6 supports unaligned access when we clear the A flag and set the
  U flag.
* On ARMv7 unaligned access is possible when clearing the aligned flag,
  which we do in function allow_unaligned() (arch/arm/cpu/armv7/sctlr.S).
  For none of the other cpus in arch/arm/cpu/ we have implemented a
  similar function.
* ARMv8 allows unaligned access.

Let EFI_LOADER on ARM depend on SYS_CPU=armv7 or SYS_CPU=armv8.

Once we have implemented allow_unaligned() for other ARM CPUs we can add
these to Kconfig.

Reported-by: Gray Remlin <gryrmln@gmail.com>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 lib/efi_loader/Kconfig | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

--
2.24.0

Comments

Tom Rini Nov. 19, 2019, 3:30 p.m. UTC | #1
On Sun, Nov 17, 2019 at 11:00:40AM +0100, Heinrich Schuchardt wrote:

> fatload USB was reported to fail on the Sheevaplug. Debugging showed that
> this was caused by an incorrect unaligned write to memory in
> path_to_uefi().
> 
> UEFI on ARM requires that unaligned memory access is enabled.
> 
> * ARMv5 does not support unaligned access at all.
> * ARMv6 supports unaligned access when we clear the A flag and set the
>   U flag.
> * On ARMv7 unaligned access is possible when clearing the aligned flag,
>   which we do in function allow_unaligned() (arch/arm/cpu/armv7/sctlr.S).
>   For none of the other cpus in arch/arm/cpu/ we have implemented a
>   similar function.
> * ARMv8 allows unaligned access.
> 
> Let EFI_LOADER on ARM depend on SYS_CPU=armv7 or SYS_CPU=armv8.
> 
> Once we have implemented allow_unaligned() for other ARM CPUs we can add
> these to Kconfig.
> 
> Reported-by: Gray Remlin <gryrmln@gmail.com>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>

Reviewed-by: Tom Rini <trini@konsulko.com>
diff mbox series

Patch

diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index c7027a9676..2f40e485ef 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -1,6 +1,9 @@ 
 config EFI_LOADER
 	bool "Support running UEFI applications"
-	depends on (ARM || X86 || RISCV || SANDBOX) && OF_LIBFDT
+	depends on OF_LIBFDT && ( \
+		ARM && (SYS_CPU = armv7 || \
+			SYS_CPU = armv8) || \
+		X86 || RISCV || SANDBOX)
 	# We need EFI_STUB_64BIT to be set on x86_64 with EFI_STUB
 	depends on !EFI_STUB || !X86_64 || EFI_STUB_64BIT
 	# We need EFI_STUB_32BIT to be set on x86_32 with EFI_STUB