Add the BTI instructions and the associated note to make the AArch64 asm objects compatible with BTI enforcement. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com> Reviewed-by: Oliver Smith-Denny <osd@smith-denny.com>
		
			
				
	
	
		
			151 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #
 | |
| #  Copyright (c) 2014-2018, Linaro Limited. All rights reserved.
 | |
| #
 | |
| #  SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| #
 | |
| #
 | |
| 
 | |
| .text
 | |
| .align 3
 | |
| 
 | |
| GCC_ASM_EXPORT(MmioRead8Internal)
 | |
| GCC_ASM_EXPORT(MmioWrite8Internal)
 | |
| GCC_ASM_EXPORT(MmioRead16Internal)
 | |
| GCC_ASM_EXPORT(MmioWrite16Internal)
 | |
| GCC_ASM_EXPORT(MmioRead32Internal)
 | |
| GCC_ASM_EXPORT(MmioWrite32Internal)
 | |
| GCC_ASM_EXPORT(MmioRead64Internal)
 | |
| GCC_ASM_EXPORT(MmioWrite64Internal)
 | |
| 
 | |
| //
 | |
| //  Reads an 8-bit MMIO register.
 | |
| //
 | |
| //  Reads the 8-bit MMIO register specified by Address. The 8-bit read value is
 | |
| //  returned. This function must guarantee that all MMIO read and write
 | |
| //  operations are serialized.
 | |
| //
 | |
| //  @param  Address The MMIO register to read.
 | |
| //
 | |
| //  @return The value read.
 | |
| //
 | |
| ASM_PFX(MmioRead8Internal):
 | |
|   AARCH64_BTI(c)
 | |
|   ldrb    w0, [x0]
 | |
|   dmb     ld
 | |
|   ret
 | |
| 
 | |
| //
 | |
| //  Writes an 8-bit MMIO register.
 | |
| //
 | |
| //  Writes the 8-bit MMIO register specified by Address with the value specified
 | |
| //  by Value and returns Value. This function must guarantee that all MMIO read
 | |
| //  and write operations are serialized.
 | |
| //
 | |
| //  @param  Address The MMIO register to write.
 | |
| //  @param  Value   The value to write to the MMIO register.
 | |
| //
 | |
| ASM_PFX(MmioWrite8Internal):
 | |
|   AARCH64_BTI(c)
 | |
|   dmb     st
 | |
|   strb    w1, [x0]
 | |
|   ret
 | |
| 
 | |
| //
 | |
| //  Reads a 16-bit MMIO register.
 | |
| //
 | |
| //  Reads the 16-bit MMIO register specified by Address. The 16-bit read value is
 | |
| //  returned. This function must guarantee that all MMIO read and write
 | |
| //  operations are serialized.
 | |
| //
 | |
| //  @param  Address The MMIO register to read.
 | |
| //
 | |
| //  @return The value read.
 | |
| //
 | |
| ASM_PFX(MmioRead16Internal):
 | |
|   AARCH64_BTI(c)
 | |
|   ldrh    w0, [x0]
 | |
|   dmb     ld
 | |
|   ret
 | |
| 
 | |
| //
 | |
| //  Writes a 16-bit MMIO register.
 | |
| //
 | |
| //  Writes the 16-bit MMIO register specified by Address with the value specified
 | |
| //  by Value and returns Value. This function must guarantee that all MMIO read
 | |
| //  and write operations are serialized.
 | |
| //
 | |
| //  @param  Address The MMIO register to write.
 | |
| //  @param  Value   The value to write to the MMIO register.
 | |
| //
 | |
| ASM_PFX(MmioWrite16Internal):
 | |
|   AARCH64_BTI(c)
 | |
|   dmb     st
 | |
|   strh    w1, [x0]
 | |
|   ret
 | |
| 
 | |
| //
 | |
| //  Reads a 32-bit MMIO register.
 | |
| //
 | |
| //  Reads the 32-bit MMIO register specified by Address. The 32-bit read value is
 | |
| //  returned. This function must guarantee that all MMIO read and write
 | |
| //  operations are serialized.
 | |
| //
 | |
| //  @param  Address The MMIO register to read.
 | |
| //
 | |
| //  @return The value read.
 | |
| //
 | |
| ASM_PFX(MmioRead32Internal):
 | |
|   AARCH64_BTI(c)
 | |
|   ldr     w0, [x0]
 | |
|   dmb     ld
 | |
|   ret
 | |
| 
 | |
| //
 | |
| //  Writes a 32-bit MMIO register.
 | |
| //
 | |
| //  Writes the 32-bit MMIO register specified by Address with the value specified
 | |
| //  by Value and returns Value. This function must guarantee that all MMIO read
 | |
| //  and write operations are serialized.
 | |
| //
 | |
| //  @param  Address The MMIO register to write.
 | |
| //  @param  Value   The value to write to the MMIO register.
 | |
| //
 | |
| ASM_PFX(MmioWrite32Internal):
 | |
|   AARCH64_BTI(c)
 | |
|   dmb     st
 | |
|   str     w1, [x0]
 | |
|   ret
 | |
| 
 | |
| //
 | |
| //  Reads a 64-bit MMIO register.
 | |
| //
 | |
| //  Reads the 64-bit MMIO register specified by Address. The 64-bit read value is
 | |
| //  returned. This function must guarantee that all MMIO read and write
 | |
| //  operations are serialized.
 | |
| //
 | |
| //  @param  Address The MMIO register to read.
 | |
| //
 | |
| //  @return The value read.
 | |
| //
 | |
| ASM_PFX(MmioRead64Internal):
 | |
|   AARCH64_BTI(c)
 | |
|   ldr     x0, [x0]
 | |
|   dmb     ld
 | |
|   ret
 | |
| 
 | |
| //
 | |
| //  Writes a 64-bit MMIO register.
 | |
| //
 | |
| //  Writes the 64-bit MMIO register specified by Address with the value specified
 | |
| //  by Value and returns Value. This function must guarantee that all MMIO read
 | |
| //  and write operations are serialized.
 | |
| //
 | |
| //  @param  Address The MMIO register to write.
 | |
| //  @param  Value   The value to write to the MMIO register.
 | |
| //
 | |
| ASM_PFX(MmioWrite64Internal):
 | |
|   AARCH64_BTI(c)
 | |
|   dmb     st
 | |
|   str     x1, [x0]
 | |
|   ret
 |