mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-31 08:21:36 +01:00 
			
		
		
		
	The UEFI spec mandates that unaligned memory access should be enabled if supported by the CPU architecture. This patch implements the function unaligned_access() to set the enable unaligned data support flag and to clear the aligned flag in the system control register (SCTLR). It is called when UEFI related commands like bootefi are invoked. Reported-by: Cristian Ciocaltea <cristian.ciocaltea@gmail.com> Tested-by: Cristian Ciocaltea <cristian.ciocaltea@gmail.com> Tested-by: Guillaume Gardet <Guillaume.Gardet@arm.com> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
		
			
				
	
	
		
			26 lines
		
	
	
		
			844 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			844 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* SPDX-License-Identifier:	GPL-2.0+ */
 | |
| /*
 | |
|  *  Routines to access the system control register
 | |
|  *
 | |
|  *  Copyright (c) 2019 Heinrich Schuchardt
 | |
|  */
 | |
| 
 | |
| #include <linux/linkage.h>
 | |
| 
 | |
| /*
 | |
|  * void allow_unaligned(void) - allow unaligned access
 | |
|  *
 | |
|  * This routine sets the enable unaligned data support flag and clears the
 | |
|  * aligned flag in the system control register.
 | |
|  * After calling this routine unaligned access does no longer leads to a
 | |
|  * data abort or undefined behavior but is handled by the CPU.
 | |
|  * For details see the "ARM Architecture Reference Manual" for ARMv6.
 | |
|  */
 | |
| ENTRY(allow_unaligned)
 | |
| 	mrc	p15, 0, r0, c1, c0, 0	@ load system control register
 | |
| 	orr	r0, r0, #1 << 22	@ set unaligned data support flag
 | |
| 	bic	r0, r0, #2		@ clear aligned flag
 | |
| 	mcr	p15, 0, r0, c1, c0, 0	@ write system control register
 | |
| 	bx	lr			@ return
 | |
| ENDPROC(allow_unaligned)
 |