[U-Boot] [PATCH 1/1] arm: armv7: enable unaligned access

Siarhei Siamashka siarhei.siamashka at gmail.com
Thu Mar 29 23:36:17 UTC 2018


On Thu, 29 Mar 2018 23:33:50 +0200
Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:

> We use the command bootefi to run UEFI executables like GRUB and iPXE.
> The UEFI spec requires that unaligned access is enabled if the CPU
> supports it. This is true for armv7.
> 
> So we should not set bit 1 of the system control register, the alignment
> bit.
> 
> Without this patch iPXE snp.efi cannot be executed on the Allwinner A20.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
>  arch/arm/cpu/armv7/start.S | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
> index 7e2695761e..1771741119 100644
> --- a/arch/arm/cpu/armv7/start.S
> +++ b/arch/arm/cpu/armv7/start.S
> @@ -150,7 +150,6 @@ ENTRY(cpu_init_cp15)
>  	mrc	p15, 0, r0, c1, c0, 0
>  	bic	r0, r0, #0x00002000	@ clear bits 13 (--V-)
>  	bic	r0, r0, #0x00000007	@ clear bits 2:0 (-CAM)
> -	orr	r0, r0, #0x00000002	@ set bit 1 (--A-) Align
>  	orr	r0, r0, #0x00000800	@ set bit 11 (Z---) BTB
>  #ifdef CONFIG_SYS_ICACHE_OFF
>  	bic	r0, r0, #0x00001000	@ clear bit 12 (I) I-cache

Can you postpone flipping this bit until the very moment when you
are about to start your UEFI executable?

The main reason against setting this bit for the whole U-Boot
globally is that a lot of common code in U-Boot can be run on
different CPU architectures, including those which don't
support unaligned memory accesses (ARMv5, MIPS, ...). This
is a maintenance nightmare. Because the people, who test their
patches only on ARMv7 hardware, will unintentionally keep
breaking other architectures.

-- 
Best regards,
Siarhei Siamashka


More information about the U-Boot mailing list