mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 12:08:19 +00:00 
			
		
		
		
	Commit 81ea00838c6 ("efi_loader: PSCI reset and shutdown") put the SMCCC
assembly code into the efi specific code section. This is wrong when we
do not have EFI_LOADER enabled, as that strips efi runtime sections from
the output binary
Reported-by: Michal Simek <monstr@monstr.eu>
Reported-by: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Tested-by: Michal Simek <monstr@monstr.eu>
Fixes: 81ea00838c6 ("efi_loader: PSCI reset and shutdown")
Signed-off-by: Alexander Graf <agraf@suse.de>
		
	
			
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| /*
 | |
|  * Copyright (c) 2015, Linaro Limited
 | |
|  */
 | |
| #include <linux/linkage.h>
 | |
| #include <linux/arm-smccc.h>
 | |
| #include <generated/asm-offsets.h>
 | |
| 
 | |
| #ifdef CONFIG_EFI_LOADER
 | |
| 	.section	.text.efi_runtime
 | |
| #endif
 | |
| 
 | |
| 	.macro SMCCC instr
 | |
| 	.cfi_startproc
 | |
| 	\instr	#0
 | |
| 	ldr	x4, [sp]
 | |
| 	stp	x0, x1, [x4, #ARM_SMCCC_RES_X0_OFFS]
 | |
| 	stp	x2, x3, [x4, #ARM_SMCCC_RES_X2_OFFS]
 | |
| 	ldr	x4, [sp, #8]
 | |
| 	cbz	x4, 1f /* no quirk structure */
 | |
| 	ldr	x9, [x4, #ARM_SMCCC_QUIRK_ID_OFFS]
 | |
| 	cmp	x9, #ARM_SMCCC_QUIRK_QCOM_A6
 | |
| 	b.ne	1f
 | |
| 	str	x6, [x4, ARM_SMCCC_QUIRK_STATE_OFFS]
 | |
| 1:	ret
 | |
| 	.cfi_endproc
 | |
| 	.endm
 | |
| 
 | |
| /*
 | |
|  * void arm_smccc_smc(unsigned long a0, unsigned long a1, unsigned long a2,
 | |
|  *		  unsigned long a3, unsigned long a4, unsigned long a5,
 | |
|  *		  unsigned long a6, unsigned long a7, struct arm_smccc_res *res,
 | |
|  *		  struct arm_smccc_quirk *quirk)
 | |
|  */
 | |
| ENTRY(__arm_smccc_smc)
 | |
| 	SMCCC	smc
 | |
| ENDPROC(__arm_smccc_smc)
 | |
| 
 | |
| /*
 | |
|  * void arm_smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2,
 | |
|  *		  unsigned long a3, unsigned long a4, unsigned long a5,
 | |
|  *		  unsigned long a6, unsigned long a7, struct arm_smccc_res *res,
 | |
|  *		  struct arm_smccc_quirk *quirk)
 | |
|  */
 | |
| ENTRY(__arm_smccc_hvc)
 | |
| 	SMCCC	hvc
 | |
| ENDPROC(__arm_smccc_hvc)
 |