183d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0+ */ 214bf25d5Smacro.wave.z@gmail.com/* 314bf25d5Smacro.wave.z@gmail.com * Copyright 2016 Freescale Semiconductor, Inc. 414bf25d5Smacro.wave.z@gmail.com * Author: Hongbo Zhang <hongbo.zhang@nxp.com> 514bf25d5Smacro.wave.z@gmail.com * This file implements LS102X platform PSCI SYSTEM-SUSPEND function 614bf25d5Smacro.wave.z@gmail.com */ 714bf25d5Smacro.wave.z@gmail.com 814bf25d5Smacro.wave.z@gmail.com#include <config.h> 914bf25d5Smacro.wave.z@gmail.com#include <linux/linkage.h> 1014bf25d5Smacro.wave.z@gmail.com#include <asm/psci.h> 1114bf25d5Smacro.wave.z@gmail.com 1214bf25d5Smacro.wave.z@gmail.com/* Default PSCI function, return -1, Not Implemented */ 1314bf25d5Smacro.wave.z@gmail.com#define PSCI_DEFAULT(__fn) \ 1414bf25d5Smacro.wave.z@gmail.com ENTRY(__fn); \ 1514bf25d5Smacro.wave.z@gmail.com mov w0, #ARM_PSCI_RET_NI; \ 1614bf25d5Smacro.wave.z@gmail.com ret; \ 1714bf25d5Smacro.wave.z@gmail.com ENDPROC(__fn); \ 1814bf25d5Smacro.wave.z@gmail.com .weak __fn 1914bf25d5Smacro.wave.z@gmail.com 2014bf25d5Smacro.wave.z@gmail.com/* PSCI function and ID table definition*/ 2114bf25d5Smacro.wave.z@gmail.com#define PSCI_TABLE(__id, __fn) \ 2214bf25d5Smacro.wave.z@gmail.com .word __id; \ 2314bf25d5Smacro.wave.z@gmail.com .word __fn 2414bf25d5Smacro.wave.z@gmail.com 2514bf25d5Smacro.wave.z@gmail.com.pushsection ._secure.text, "ax" 2614bf25d5Smacro.wave.z@gmail.com 2714bf25d5Smacro.wave.z@gmail.com/* 32 bits PSCI default functions */ 2814bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_version) 2914bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_suspend) 3014bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_off) 3114bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_on) 3214bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_affinity_info) 3314bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate) 3414bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate_info_type) 3514bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate_info_up_cpu) 3614bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_system_off) 3714bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_system_reset) 3814bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_features) 3914bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_freeze) 4014bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_default_suspend) 4114bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_node_hw_state) 4214bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_system_suspend) 4314bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_set_suspend_mode) 4414bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psi_stat_residency) 4514bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_stat_count) 4614bf25d5Smacro.wave.z@gmail.com 4714bf25d5Smacro.wave.z@gmail.com.align 3 4814bf25d5Smacro.wave.z@gmail.com_psci_32_table: 4914bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_FN_CPU_SUSPEND, psci_cpu_suspend) 5014bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_FN_CPU_OFF, psci_cpu_off) 5114bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_FN_CPU_ON, psci_cpu_on) 5214bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_FN_MIGRATE, psci_migrate) 5314bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_PSCI_VERSION, psci_version) 5414bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_CPU_SUSPEND, psci_cpu_suspend) 5514bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_CPU_OFF, psci_cpu_off) 5614bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_CPU_ON, psci_cpu_on) 5714bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_AFFINITY_INFO, psci_affinity_info) 5814bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_MIGRATE, psci_migrate) 5914bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_MIGRATE_INFO_TYPE, psci_migrate_info_type) 6014bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_MIGRATE_INFO_UP_CPU, psci_migrate_info_up_cpu) 6114bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_SYSTEM_OFF, psci_system_off) 6214bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_SYSTEM_RESET, psci_system_reset) 6314bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_PSCI_FEATURES, psci_features) 6414bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_CPU_FREEZE, psci_cpu_freeze) 6514bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_CPU_DEFAULT_SUSPEND, psci_cpu_default_suspend) 6614bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_NODE_HW_STATE, psci_node_hw_state) 6714bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_SYSTEM_SUSPEND, psci_system_suspend) 6814bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_SET_SUSPEND_MODE, psci_set_suspend_mode) 6914bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_STAT_RESIDENCY, psi_stat_residency) 7014bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_STAT_COUNT, psci_stat_count) 7114bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(0, 0) 7214bf25d5Smacro.wave.z@gmail.com 7314bf25d5Smacro.wave.z@gmail.com/* 64 bits PSCI default functions */ 7414bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_suspend_64) 7514bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_on_64) 7614bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_affinity_info_64) 7714bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate_64) 7814bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate_info_up_cpu_64) 7914bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_default_suspend_64) 8014bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_node_hw_state_64) 8114bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_system_suspend_64) 8214bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_stat_residency_64) 8314bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_stat_count_64) 8414bf25d5Smacro.wave.z@gmail.com 8514bf25d5Smacro.wave.z@gmail.com.align 3 8614bf25d5Smacro.wave.z@gmail.com_psci_64_table: 8714bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_CPU_SUSPEND, psci_cpu_suspend_64) 8814bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_CPU_ON, psci_cpu_on_64) 8914bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_AFFINITY_INFO, psci_affinity_info_64) 9014bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_MIGRATE, psci_migrate_64) 9114bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU, psci_migrate_info_up_cpu_64) 9214bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_CPU_DEFAULT_SUSPEND, psci_cpu_default_suspend_64) 9314bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_NODE_HW_STATE, psci_node_hw_state_64) 9414bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_SYSTEM_SUSPEND, psci_system_suspend_64) 9514bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_STAT_RESIDENCY, psci_stat_residency_64) 9614bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_STAT_COUNT, psci_stat_count_64) 9714bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(0, 0) 9814bf25d5Smacro.wave.z@gmail.com 9914bf25d5Smacro.wave.z@gmail.com.macro psci_enter 10014bf25d5Smacro.wave.z@gmail.com /* PSCI call is Fast Call(atomic), so mask DAIF */ 10114bf25d5Smacro.wave.z@gmail.com mrs x15, DAIF 10214bf25d5Smacro.wave.z@gmail.com stp x15, xzr, [sp, #-16]! 10314bf25d5Smacro.wave.z@gmail.com ldr x15, =0x3C0 10414bf25d5Smacro.wave.z@gmail.com msr DAIF, x15 10514bf25d5Smacro.wave.z@gmail.com /* SMC convention, x18 ~ x30 should be saved by callee */ 10614bf25d5Smacro.wave.z@gmail.com stp x29, x30, [sp, #-16]! 10714bf25d5Smacro.wave.z@gmail.com stp x27, x28, [sp, #-16]! 10814bf25d5Smacro.wave.z@gmail.com stp x25, x26, [sp, #-16]! 10914bf25d5Smacro.wave.z@gmail.com stp x23, x24, [sp, #-16]! 11014bf25d5Smacro.wave.z@gmail.com stp x21, x22, [sp, #-16]! 11114bf25d5Smacro.wave.z@gmail.com stp x19, x20, [sp, #-16]! 11214bf25d5Smacro.wave.z@gmail.com mrs x15, elr_el3 11314bf25d5Smacro.wave.z@gmail.com stp x18, x15, [sp, #-16]! 11414bf25d5Smacro.wave.z@gmail.com.endm 11514bf25d5Smacro.wave.z@gmail.com 11614bf25d5Smacro.wave.z@gmail.com.macro psci_return 11714bf25d5Smacro.wave.z@gmail.com /* restore registers */ 11814bf25d5Smacro.wave.z@gmail.com ldp x18, x15, [sp], #16 11914bf25d5Smacro.wave.z@gmail.com msr elr_el3, x15 12014bf25d5Smacro.wave.z@gmail.com ldp x19, x20, [sp], #16 12114bf25d5Smacro.wave.z@gmail.com ldp x21, x22, [sp], #16 12214bf25d5Smacro.wave.z@gmail.com ldp x23, x24, [sp], #16 12314bf25d5Smacro.wave.z@gmail.com ldp x25, x26, [sp], #16 12414bf25d5Smacro.wave.z@gmail.com ldp x27, x28, [sp], #16 12514bf25d5Smacro.wave.z@gmail.com ldp x29, x30, [sp], #16 12614bf25d5Smacro.wave.z@gmail.com /* restore DAIF */ 12714bf25d5Smacro.wave.z@gmail.com ldp x15, xzr, [sp], #16 12814bf25d5Smacro.wave.z@gmail.com msr DAIF, x15 12914bf25d5Smacro.wave.z@gmail.com eret 13014bf25d5Smacro.wave.z@gmail.com.endm 13114bf25d5Smacro.wave.z@gmail.com 13214bf25d5Smacro.wave.z@gmail.com/* Caller must put PSCI function-ID table base in x9 */ 13314bf25d5Smacro.wave.z@gmail.comhandle_psci: 13414bf25d5Smacro.wave.z@gmail.com psci_enter 13514bf25d5Smacro.wave.z@gmail.com1: ldr x10, [x9] /* Load PSCI function table */ 13614bf25d5Smacro.wave.z@gmail.com ubfx x11, x10, #32, #32 13714bf25d5Smacro.wave.z@gmail.com ubfx x10, x10, #0, #32 13814bf25d5Smacro.wave.z@gmail.com cbz x10, 3f /* If reach the end, bail out */ 13914bf25d5Smacro.wave.z@gmail.com cmp x10, x0 14014bf25d5Smacro.wave.z@gmail.com b.eq 2f /* PSCI function found */ 14114bf25d5Smacro.wave.z@gmail.com add x9, x9, #8 /* If not match, try next entry */ 14214bf25d5Smacro.wave.z@gmail.com b 1b 14314bf25d5Smacro.wave.z@gmail.com 14414bf25d5Smacro.wave.z@gmail.com2: blr x11 /* Call PSCI function */ 14514bf25d5Smacro.wave.z@gmail.com psci_return 14614bf25d5Smacro.wave.z@gmail.com 14714bf25d5Smacro.wave.z@gmail.com3: mov x0, #ARM_PSCI_RET_NI 14814bf25d5Smacro.wave.z@gmail.com psci_return 14914bf25d5Smacro.wave.z@gmail.com 15014bf25d5Smacro.wave.z@gmail.comunknown_smc_id: 15114bf25d5Smacro.wave.z@gmail.com ldr x0, =0xFFFFFFFF 15214bf25d5Smacro.wave.z@gmail.com eret 15314bf25d5Smacro.wave.z@gmail.com 15414bf25d5Smacro.wave.z@gmail.comhandle_smc32: 15514bf25d5Smacro.wave.z@gmail.com /* SMC function ID 0x84000000-0x8400001F: 32 bits PSCI */ 15614bf25d5Smacro.wave.z@gmail.com ldr w9, =0x8400001F 15714bf25d5Smacro.wave.z@gmail.com cmp w0, w9 15814bf25d5Smacro.wave.z@gmail.com b.gt unknown_smc_id 15914bf25d5Smacro.wave.z@gmail.com ldr w9, =0x84000000 16014bf25d5Smacro.wave.z@gmail.com cmp w0, w9 16114bf25d5Smacro.wave.z@gmail.com b.lt unknown_smc_id 16214bf25d5Smacro.wave.z@gmail.com 16314bf25d5Smacro.wave.z@gmail.com adr x9, _psci_32_table 16414bf25d5Smacro.wave.z@gmail.com b handle_psci 16514bf25d5Smacro.wave.z@gmail.com 16614bf25d5Smacro.wave.z@gmail.comhandle_smc64: 16714bf25d5Smacro.wave.z@gmail.com /* check SMC32 or SMC64 calls */ 16814bf25d5Smacro.wave.z@gmail.com ubfx x9, x0, #30, #1 16914bf25d5Smacro.wave.z@gmail.com cbz x9, handle_smc32 17014bf25d5Smacro.wave.z@gmail.com 17114bf25d5Smacro.wave.z@gmail.com /* SMC function ID 0xC4000000-0xC400001F: 64 bits PSCI */ 17214bf25d5Smacro.wave.z@gmail.com ldr x9, =0xC400001F 17314bf25d5Smacro.wave.z@gmail.com cmp x0, x9 17414bf25d5Smacro.wave.z@gmail.com b.gt unknown_smc_id 17514bf25d5Smacro.wave.z@gmail.com ldr x9, =0xC4000000 17614bf25d5Smacro.wave.z@gmail.com cmp x0, x9 17714bf25d5Smacro.wave.z@gmail.com b.lt unknown_smc_id 17814bf25d5Smacro.wave.z@gmail.com 17914bf25d5Smacro.wave.z@gmail.com adr x9, _psci_64_table 18014bf25d5Smacro.wave.z@gmail.com b handle_psci 18114bf25d5Smacro.wave.z@gmail.com 18214bf25d5Smacro.wave.z@gmail.com/* 18314bf25d5Smacro.wave.z@gmail.com * Get CPU ID from MPIDR, suppose every cluster has same number of CPU cores, 18414bf25d5Smacro.wave.z@gmail.com * Platform with asymmetric clusters should implement their own interface. 18514bf25d5Smacro.wave.z@gmail.com * In case this function being called by other platform's C code, the ARM 18614bf25d5Smacro.wave.z@gmail.com * Architecture Procedure Call Standard is considered, e.g. register X0 is 18714bf25d5Smacro.wave.z@gmail.com * used for the return value, while in this PSCI environment, X0 usually holds 18814bf25d5Smacro.wave.z@gmail.com * the SMC function identifier, so X0 should be saved by caller function. 18914bf25d5Smacro.wave.z@gmail.com */ 19014bf25d5Smacro.wave.z@gmail.comENTRY(psci_get_cpu_id) 19114bf25d5Smacro.wave.z@gmail.com#ifdef CONFIG_ARMV8_PSCI_CPUS_PER_CLUSTER 19214bf25d5Smacro.wave.z@gmail.com mrs x9, MPIDR_EL1 19314bf25d5Smacro.wave.z@gmail.com ubfx x9, x9, #8, #8 19414bf25d5Smacro.wave.z@gmail.com ldr x10, =CONFIG_ARMV8_PSCI_CPUS_PER_CLUSTER 19514bf25d5Smacro.wave.z@gmail.com mul x9, x10, x9 19614bf25d5Smacro.wave.z@gmail.com#else 19714bf25d5Smacro.wave.z@gmail.com mov x9, xzr 19814bf25d5Smacro.wave.z@gmail.com#endif 19914bf25d5Smacro.wave.z@gmail.com mrs x10, MPIDR_EL1 20014bf25d5Smacro.wave.z@gmail.com ubfx x10, x10, #0, #8 20114bf25d5Smacro.wave.z@gmail.com add x0, x10, x9 20214bf25d5Smacro.wave.z@gmail.com ret 20314bf25d5Smacro.wave.z@gmail.comENDPROC(psci_get_cpu_id) 20414bf25d5Smacro.wave.z@gmail.com.weak psci_get_cpu_id 20514bf25d5Smacro.wave.z@gmail.com 20614bf25d5Smacro.wave.z@gmail.com/* CPU ID input in x0, stack top output in x0*/ 20714bf25d5Smacro.wave.z@gmail.comLENTRY(psci_get_cpu_stack_top) 20814bf25d5Smacro.wave.z@gmail.com adr x9, __secure_stack_end 20914bf25d5Smacro.wave.z@gmail.com lsl x0, x0, #ARM_PSCI_STACK_SHIFT 21014bf25d5Smacro.wave.z@gmail.com sub x0, x9, x0 21114bf25d5Smacro.wave.z@gmail.com ret 21214bf25d5Smacro.wave.z@gmail.comENDPROC(psci_get_cpu_stack_top) 21314bf25d5Smacro.wave.z@gmail.com 21414bf25d5Smacro.wave.z@gmail.comunhandled_exception: 21514bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* simply dead loop */ 21614bf25d5Smacro.wave.z@gmail.com 21714bf25d5Smacro.wave.z@gmail.comhandle_sync: 21814bf25d5Smacro.wave.z@gmail.com mov x15, x30 21914bf25d5Smacro.wave.z@gmail.com mov x14, x0 22014bf25d5Smacro.wave.z@gmail.com 22114bf25d5Smacro.wave.z@gmail.com bl psci_get_cpu_id 22214bf25d5Smacro.wave.z@gmail.com bl psci_get_cpu_stack_top 22314bf25d5Smacro.wave.z@gmail.com mov x9, #1 22414bf25d5Smacro.wave.z@gmail.com msr spsel, x9 22514bf25d5Smacro.wave.z@gmail.com mov sp, x0 22614bf25d5Smacro.wave.z@gmail.com 22714bf25d5Smacro.wave.z@gmail.com mov x0, x14 22814bf25d5Smacro.wave.z@gmail.com mov x30, x15 22914bf25d5Smacro.wave.z@gmail.com 23014bf25d5Smacro.wave.z@gmail.com mrs x9, esr_el3 23114bf25d5Smacro.wave.z@gmail.com ubfx x9, x9, #26, #6 23214bf25d5Smacro.wave.z@gmail.com cmp x9, #0x13 23314bf25d5Smacro.wave.z@gmail.com b.eq handle_smc32 23414bf25d5Smacro.wave.z@gmail.com cmp x9, #0x17 23514bf25d5Smacro.wave.z@gmail.com b.eq handle_smc64 23614bf25d5Smacro.wave.z@gmail.com 23714bf25d5Smacro.wave.z@gmail.com b unhandled_exception 23814bf25d5Smacro.wave.z@gmail.com 239*eb13ddddSChee Hong Ang#ifdef CONFIG_ARMV8_EA_EL3_FIRST 240*eb13ddddSChee Hong Ang/* 241*eb13ddddSChee Hong Ang * Override this function if custom error handling is 242*eb13ddddSChee Hong Ang * needed for asynchronous aborts 243*eb13ddddSChee Hong Ang */ 244*eb13ddddSChee Hong AngENTRY(plat_error_handler) 245*eb13ddddSChee Hong Ang ret 246*eb13ddddSChee Hong AngENDPROC(plat_error_handler) 247*eb13ddddSChee Hong Ang.weak plat_error_handler 248*eb13ddddSChee Hong Ang 249*eb13ddddSChee Hong Anghandle_error: 250*eb13ddddSChee Hong Ang bl psci_get_cpu_id 251*eb13ddddSChee Hong Ang bl psci_get_cpu_stack_top 252*eb13ddddSChee Hong Ang mov x9, #1 253*eb13ddddSChee Hong Ang msr spsel, x9 254*eb13ddddSChee Hong Ang mov sp, x0 255*eb13ddddSChee Hong Ang 256*eb13ddddSChee Hong Ang bl plat_error_handler /* Platform specific error handling */ 257*eb13ddddSChee Hong Angdeadloop: 258*eb13ddddSChee Hong Ang b deadloop /* Never return */ 259*eb13ddddSChee Hong Ang#endif 260*eb13ddddSChee Hong Ang 26114bf25d5Smacro.wave.z@gmail.com .align 11 26214bf25d5Smacro.wave.z@gmail.com .globl el3_exception_vectors 26314bf25d5Smacro.wave.z@gmail.comel3_exception_vectors: 26414bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* Sync, Current EL using SP0 */ 26514bf25d5Smacro.wave.z@gmail.com .align 7 26614bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* IRQ, Current EL using SP0 */ 26714bf25d5Smacro.wave.z@gmail.com .align 7 26814bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* FIQ, Current EL using SP0 */ 26914bf25d5Smacro.wave.z@gmail.com .align 7 27014bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* SError, Current EL using SP0 */ 27114bf25d5Smacro.wave.z@gmail.com .align 7 27214bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* Sync, Current EL using SPx */ 27314bf25d5Smacro.wave.z@gmail.com .align 7 27414bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* IRQ, Current EL using SPx */ 27514bf25d5Smacro.wave.z@gmail.com .align 7 27614bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* FIQ, Current EL using SPx */ 27714bf25d5Smacro.wave.z@gmail.com .align 7 27814bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* SError, Current EL using SPx */ 27914bf25d5Smacro.wave.z@gmail.com .align 7 28014bf25d5Smacro.wave.z@gmail.com b handle_sync /* Sync, Lower EL using AArch64 */ 28114bf25d5Smacro.wave.z@gmail.com .align 7 28214bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* IRQ, Lower EL using AArch64 */ 28314bf25d5Smacro.wave.z@gmail.com .align 7 28414bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* FIQ, Lower EL using AArch64 */ 28514bf25d5Smacro.wave.z@gmail.com .align 7 286*eb13ddddSChee Hong Ang#ifdef CONFIG_ARMV8_EA_EL3_FIRST 287*eb13ddddSChee Hong Ang b handle_error /* SError, Lower EL using AArch64 */ 288*eb13ddddSChee Hong Ang#else 28914bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* SError, Lower EL using AArch64 */ 290*eb13ddddSChee Hong Ang#endif 29114bf25d5Smacro.wave.z@gmail.com .align 7 29214bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* Sync, Lower EL using AArch32 */ 29314bf25d5Smacro.wave.z@gmail.com .align 7 29414bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* IRQ, Lower EL using AArch32 */ 29514bf25d5Smacro.wave.z@gmail.com .align 7 29614bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* FIQ, Lower EL using AArch32 */ 29714bf25d5Smacro.wave.z@gmail.com .align 7 29814bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* SError, Lower EL using AArch32 */ 29914bf25d5Smacro.wave.z@gmail.com 30014bf25d5Smacro.wave.z@gmail.comENTRY(psci_setup_vectors) 30114bf25d5Smacro.wave.z@gmail.com adr x0, el3_exception_vectors 30214bf25d5Smacro.wave.z@gmail.com msr vbar_el3, x0 30314bf25d5Smacro.wave.z@gmail.com ret 30414bf25d5Smacro.wave.z@gmail.comENDPROC(psci_setup_vectors) 30514bf25d5Smacro.wave.z@gmail.com 30614bf25d5Smacro.wave.z@gmail.comENTRY(psci_arch_init) 30714bf25d5Smacro.wave.z@gmail.com ret 30814bf25d5Smacro.wave.z@gmail.comENDPROC(psci_arch_init) 30914bf25d5Smacro.wave.z@gmail.com.weak psci_arch_init 31014bf25d5Smacro.wave.z@gmail.com 31114bf25d5Smacro.wave.z@gmail.com.popsection 312