1*14bf25d5Smacro.wave.z@gmail.com/* 2*14bf25d5Smacro.wave.z@gmail.com * Copyright 2016 Freescale Semiconductor, Inc. 3*14bf25d5Smacro.wave.z@gmail.com * Author: Hongbo Zhang <hongbo.zhang@nxp.com> 4*14bf25d5Smacro.wave.z@gmail.com * 5*14bf25d5Smacro.wave.z@gmail.com * SPDX-License-Identifier: GPL-2.0+ 6*14bf25d5Smacro.wave.z@gmail.com * This file implements LS102X platform PSCI SYSTEM-SUSPEND function 7*14bf25d5Smacro.wave.z@gmail.com */ 8*14bf25d5Smacro.wave.z@gmail.com 9*14bf25d5Smacro.wave.z@gmail.com#include <config.h> 10*14bf25d5Smacro.wave.z@gmail.com#include <linux/linkage.h> 11*14bf25d5Smacro.wave.z@gmail.com#include <asm/psci.h> 12*14bf25d5Smacro.wave.z@gmail.com 13*14bf25d5Smacro.wave.z@gmail.com/* Default PSCI function, return -1, Not Implemented */ 14*14bf25d5Smacro.wave.z@gmail.com#define PSCI_DEFAULT(__fn) \ 15*14bf25d5Smacro.wave.z@gmail.com ENTRY(__fn); \ 16*14bf25d5Smacro.wave.z@gmail.com mov w0, #ARM_PSCI_RET_NI; \ 17*14bf25d5Smacro.wave.z@gmail.com ret; \ 18*14bf25d5Smacro.wave.z@gmail.com ENDPROC(__fn); \ 19*14bf25d5Smacro.wave.z@gmail.com .weak __fn 20*14bf25d5Smacro.wave.z@gmail.com 21*14bf25d5Smacro.wave.z@gmail.com/* PSCI function and ID table definition*/ 22*14bf25d5Smacro.wave.z@gmail.com#define PSCI_TABLE(__id, __fn) \ 23*14bf25d5Smacro.wave.z@gmail.com .word __id; \ 24*14bf25d5Smacro.wave.z@gmail.com .word __fn 25*14bf25d5Smacro.wave.z@gmail.com 26*14bf25d5Smacro.wave.z@gmail.com.pushsection ._secure.text, "ax" 27*14bf25d5Smacro.wave.z@gmail.com 28*14bf25d5Smacro.wave.z@gmail.com/* 32 bits PSCI default functions */ 29*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_version) 30*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_suspend) 31*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_off) 32*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_on) 33*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_affinity_info) 34*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate) 35*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate_info_type) 36*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate_info_up_cpu) 37*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_system_off) 38*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_system_reset) 39*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_features) 40*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_freeze) 41*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_default_suspend) 42*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_node_hw_state) 43*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_system_suspend) 44*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_set_suspend_mode) 45*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psi_stat_residency) 46*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_stat_count) 47*14bf25d5Smacro.wave.z@gmail.com 48*14bf25d5Smacro.wave.z@gmail.com.align 3 49*14bf25d5Smacro.wave.z@gmail.com_psci_32_table: 50*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_FN_CPU_SUSPEND, psci_cpu_suspend) 51*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_FN_CPU_OFF, psci_cpu_off) 52*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_FN_CPU_ON, psci_cpu_on) 53*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_FN_MIGRATE, psci_migrate) 54*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_PSCI_VERSION, psci_version) 55*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_CPU_SUSPEND, psci_cpu_suspend) 56*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_CPU_OFF, psci_cpu_off) 57*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_CPU_ON, psci_cpu_on) 58*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_AFFINITY_INFO, psci_affinity_info) 59*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_MIGRATE, psci_migrate) 60*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_MIGRATE_INFO_TYPE, psci_migrate_info_type) 61*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_MIGRATE_INFO_UP_CPU, psci_migrate_info_up_cpu) 62*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_SYSTEM_OFF, psci_system_off) 63*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN_SYSTEM_RESET, psci_system_reset) 64*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_PSCI_FEATURES, psci_features) 65*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_CPU_FREEZE, psci_cpu_freeze) 66*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_CPU_DEFAULT_SUSPEND, psci_cpu_default_suspend) 67*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_NODE_HW_STATE, psci_node_hw_state) 68*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_SYSTEM_SUSPEND, psci_system_suspend) 69*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_SET_SUSPEND_MODE, psci_set_suspend_mode) 70*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_STAT_RESIDENCY, psi_stat_residency) 71*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN_STAT_COUNT, psci_stat_count) 72*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(0, 0) 73*14bf25d5Smacro.wave.z@gmail.com 74*14bf25d5Smacro.wave.z@gmail.com/* 64 bits PSCI default functions */ 75*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_suspend_64) 76*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_on_64) 77*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_affinity_info_64) 78*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate_64) 79*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_migrate_info_up_cpu_64) 80*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_cpu_default_suspend_64) 81*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_node_hw_state_64) 82*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_system_suspend_64) 83*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_stat_residency_64) 84*14bf25d5Smacro.wave.z@gmail.comPSCI_DEFAULT(psci_stat_count_64) 85*14bf25d5Smacro.wave.z@gmail.com 86*14bf25d5Smacro.wave.z@gmail.com.align 3 87*14bf25d5Smacro.wave.z@gmail.com_psci_64_table: 88*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_CPU_SUSPEND, psci_cpu_suspend_64) 89*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_CPU_ON, psci_cpu_on_64) 90*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_AFFINITY_INFO, psci_affinity_info_64) 91*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_MIGRATE, psci_migrate_64) 92*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU, psci_migrate_info_up_cpu_64) 93*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_CPU_DEFAULT_SUSPEND, psci_cpu_default_suspend_64) 94*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_NODE_HW_STATE, psci_node_hw_state_64) 95*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_SYSTEM_SUSPEND, psci_system_suspend_64) 96*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_STAT_RESIDENCY, psci_stat_residency_64) 97*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(ARM_PSCI_1_0_FN64_STAT_COUNT, psci_stat_count_64) 98*14bf25d5Smacro.wave.z@gmail.comPSCI_TABLE(0, 0) 99*14bf25d5Smacro.wave.z@gmail.com 100*14bf25d5Smacro.wave.z@gmail.com.macro psci_enter 101*14bf25d5Smacro.wave.z@gmail.com /* PSCI call is Fast Call(atomic), so mask DAIF */ 102*14bf25d5Smacro.wave.z@gmail.com mrs x15, DAIF 103*14bf25d5Smacro.wave.z@gmail.com stp x15, xzr, [sp, #-16]! 104*14bf25d5Smacro.wave.z@gmail.com ldr x15, =0x3C0 105*14bf25d5Smacro.wave.z@gmail.com msr DAIF, x15 106*14bf25d5Smacro.wave.z@gmail.com /* SMC convention, x18 ~ x30 should be saved by callee */ 107*14bf25d5Smacro.wave.z@gmail.com stp x29, x30, [sp, #-16]! 108*14bf25d5Smacro.wave.z@gmail.com stp x27, x28, [sp, #-16]! 109*14bf25d5Smacro.wave.z@gmail.com stp x25, x26, [sp, #-16]! 110*14bf25d5Smacro.wave.z@gmail.com stp x23, x24, [sp, #-16]! 111*14bf25d5Smacro.wave.z@gmail.com stp x21, x22, [sp, #-16]! 112*14bf25d5Smacro.wave.z@gmail.com stp x19, x20, [sp, #-16]! 113*14bf25d5Smacro.wave.z@gmail.com mrs x15, elr_el3 114*14bf25d5Smacro.wave.z@gmail.com stp x18, x15, [sp, #-16]! 115*14bf25d5Smacro.wave.z@gmail.com.endm 116*14bf25d5Smacro.wave.z@gmail.com 117*14bf25d5Smacro.wave.z@gmail.com.macro psci_return 118*14bf25d5Smacro.wave.z@gmail.com /* restore registers */ 119*14bf25d5Smacro.wave.z@gmail.com ldp x18, x15, [sp], #16 120*14bf25d5Smacro.wave.z@gmail.com msr elr_el3, x15 121*14bf25d5Smacro.wave.z@gmail.com ldp x19, x20, [sp], #16 122*14bf25d5Smacro.wave.z@gmail.com ldp x21, x22, [sp], #16 123*14bf25d5Smacro.wave.z@gmail.com ldp x23, x24, [sp], #16 124*14bf25d5Smacro.wave.z@gmail.com ldp x25, x26, [sp], #16 125*14bf25d5Smacro.wave.z@gmail.com ldp x27, x28, [sp], #16 126*14bf25d5Smacro.wave.z@gmail.com ldp x29, x30, [sp], #16 127*14bf25d5Smacro.wave.z@gmail.com /* restore DAIF */ 128*14bf25d5Smacro.wave.z@gmail.com ldp x15, xzr, [sp], #16 129*14bf25d5Smacro.wave.z@gmail.com msr DAIF, x15 130*14bf25d5Smacro.wave.z@gmail.com eret 131*14bf25d5Smacro.wave.z@gmail.com.endm 132*14bf25d5Smacro.wave.z@gmail.com 133*14bf25d5Smacro.wave.z@gmail.com/* Caller must put PSCI function-ID table base in x9 */ 134*14bf25d5Smacro.wave.z@gmail.comhandle_psci: 135*14bf25d5Smacro.wave.z@gmail.com psci_enter 136*14bf25d5Smacro.wave.z@gmail.com1: ldr x10, [x9] /* Load PSCI function table */ 137*14bf25d5Smacro.wave.z@gmail.com ubfx x11, x10, #32, #32 138*14bf25d5Smacro.wave.z@gmail.com ubfx x10, x10, #0, #32 139*14bf25d5Smacro.wave.z@gmail.com cbz x10, 3f /* If reach the end, bail out */ 140*14bf25d5Smacro.wave.z@gmail.com cmp x10, x0 141*14bf25d5Smacro.wave.z@gmail.com b.eq 2f /* PSCI function found */ 142*14bf25d5Smacro.wave.z@gmail.com add x9, x9, #8 /* If not match, try next entry */ 143*14bf25d5Smacro.wave.z@gmail.com b 1b 144*14bf25d5Smacro.wave.z@gmail.com 145*14bf25d5Smacro.wave.z@gmail.com2: blr x11 /* Call PSCI function */ 146*14bf25d5Smacro.wave.z@gmail.com psci_return 147*14bf25d5Smacro.wave.z@gmail.com 148*14bf25d5Smacro.wave.z@gmail.com3: mov x0, #ARM_PSCI_RET_NI 149*14bf25d5Smacro.wave.z@gmail.com psci_return 150*14bf25d5Smacro.wave.z@gmail.com 151*14bf25d5Smacro.wave.z@gmail.comunknown_smc_id: 152*14bf25d5Smacro.wave.z@gmail.com ldr x0, =0xFFFFFFFF 153*14bf25d5Smacro.wave.z@gmail.com eret 154*14bf25d5Smacro.wave.z@gmail.com 155*14bf25d5Smacro.wave.z@gmail.comhandle_smc32: 156*14bf25d5Smacro.wave.z@gmail.com /* SMC function ID 0x84000000-0x8400001F: 32 bits PSCI */ 157*14bf25d5Smacro.wave.z@gmail.com ldr w9, =0x8400001F 158*14bf25d5Smacro.wave.z@gmail.com cmp w0, w9 159*14bf25d5Smacro.wave.z@gmail.com b.gt unknown_smc_id 160*14bf25d5Smacro.wave.z@gmail.com ldr w9, =0x84000000 161*14bf25d5Smacro.wave.z@gmail.com cmp w0, w9 162*14bf25d5Smacro.wave.z@gmail.com b.lt unknown_smc_id 163*14bf25d5Smacro.wave.z@gmail.com 164*14bf25d5Smacro.wave.z@gmail.com adr x9, _psci_32_table 165*14bf25d5Smacro.wave.z@gmail.com b handle_psci 166*14bf25d5Smacro.wave.z@gmail.com 167*14bf25d5Smacro.wave.z@gmail.comhandle_smc64: 168*14bf25d5Smacro.wave.z@gmail.com /* check SMC32 or SMC64 calls */ 169*14bf25d5Smacro.wave.z@gmail.com ubfx x9, x0, #30, #1 170*14bf25d5Smacro.wave.z@gmail.com cbz x9, handle_smc32 171*14bf25d5Smacro.wave.z@gmail.com 172*14bf25d5Smacro.wave.z@gmail.com /* SMC function ID 0xC4000000-0xC400001F: 64 bits PSCI */ 173*14bf25d5Smacro.wave.z@gmail.com ldr x9, =0xC400001F 174*14bf25d5Smacro.wave.z@gmail.com cmp x0, x9 175*14bf25d5Smacro.wave.z@gmail.com b.gt unknown_smc_id 176*14bf25d5Smacro.wave.z@gmail.com ldr x9, =0xC4000000 177*14bf25d5Smacro.wave.z@gmail.com cmp x0, x9 178*14bf25d5Smacro.wave.z@gmail.com b.lt unknown_smc_id 179*14bf25d5Smacro.wave.z@gmail.com 180*14bf25d5Smacro.wave.z@gmail.com adr x9, _psci_64_table 181*14bf25d5Smacro.wave.z@gmail.com b handle_psci 182*14bf25d5Smacro.wave.z@gmail.com 183*14bf25d5Smacro.wave.z@gmail.com/* 184*14bf25d5Smacro.wave.z@gmail.com * Get CPU ID from MPIDR, suppose every cluster has same number of CPU cores, 185*14bf25d5Smacro.wave.z@gmail.com * Platform with asymmetric clusters should implement their own interface. 186*14bf25d5Smacro.wave.z@gmail.com * In case this function being called by other platform's C code, the ARM 187*14bf25d5Smacro.wave.z@gmail.com * Architecture Procedure Call Standard is considered, e.g. register X0 is 188*14bf25d5Smacro.wave.z@gmail.com * used for the return value, while in this PSCI environment, X0 usually holds 189*14bf25d5Smacro.wave.z@gmail.com * the SMC function identifier, so X0 should be saved by caller function. 190*14bf25d5Smacro.wave.z@gmail.com */ 191*14bf25d5Smacro.wave.z@gmail.comENTRY(psci_get_cpu_id) 192*14bf25d5Smacro.wave.z@gmail.com#ifdef CONFIG_ARMV8_PSCI_CPUS_PER_CLUSTER 193*14bf25d5Smacro.wave.z@gmail.com mrs x9, MPIDR_EL1 194*14bf25d5Smacro.wave.z@gmail.com ubfx x9, x9, #8, #8 195*14bf25d5Smacro.wave.z@gmail.com ldr x10, =CONFIG_ARMV8_PSCI_CPUS_PER_CLUSTER 196*14bf25d5Smacro.wave.z@gmail.com mul x9, x10, x9 197*14bf25d5Smacro.wave.z@gmail.com#else 198*14bf25d5Smacro.wave.z@gmail.com mov x9, xzr 199*14bf25d5Smacro.wave.z@gmail.com#endif 200*14bf25d5Smacro.wave.z@gmail.com mrs x10, MPIDR_EL1 201*14bf25d5Smacro.wave.z@gmail.com ubfx x10, x10, #0, #8 202*14bf25d5Smacro.wave.z@gmail.com add x0, x10, x9 203*14bf25d5Smacro.wave.z@gmail.com ret 204*14bf25d5Smacro.wave.z@gmail.comENDPROC(psci_get_cpu_id) 205*14bf25d5Smacro.wave.z@gmail.com.weak psci_get_cpu_id 206*14bf25d5Smacro.wave.z@gmail.com 207*14bf25d5Smacro.wave.z@gmail.com/* CPU ID input in x0, stack top output in x0*/ 208*14bf25d5Smacro.wave.z@gmail.comLENTRY(psci_get_cpu_stack_top) 209*14bf25d5Smacro.wave.z@gmail.com adr x9, __secure_stack_end 210*14bf25d5Smacro.wave.z@gmail.com lsl x0, x0, #ARM_PSCI_STACK_SHIFT 211*14bf25d5Smacro.wave.z@gmail.com sub x0, x9, x0 212*14bf25d5Smacro.wave.z@gmail.com ret 213*14bf25d5Smacro.wave.z@gmail.comENDPROC(psci_get_cpu_stack_top) 214*14bf25d5Smacro.wave.z@gmail.com 215*14bf25d5Smacro.wave.z@gmail.comunhandled_exception: 216*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* simply dead loop */ 217*14bf25d5Smacro.wave.z@gmail.com 218*14bf25d5Smacro.wave.z@gmail.comhandle_sync: 219*14bf25d5Smacro.wave.z@gmail.com mov x15, x30 220*14bf25d5Smacro.wave.z@gmail.com mov x14, x0 221*14bf25d5Smacro.wave.z@gmail.com 222*14bf25d5Smacro.wave.z@gmail.com bl psci_get_cpu_id 223*14bf25d5Smacro.wave.z@gmail.com bl psci_get_cpu_stack_top 224*14bf25d5Smacro.wave.z@gmail.com mov x9, #1 225*14bf25d5Smacro.wave.z@gmail.com msr spsel, x9 226*14bf25d5Smacro.wave.z@gmail.com mov sp, x0 227*14bf25d5Smacro.wave.z@gmail.com 228*14bf25d5Smacro.wave.z@gmail.com mov x0, x14 229*14bf25d5Smacro.wave.z@gmail.com mov x30, x15 230*14bf25d5Smacro.wave.z@gmail.com 231*14bf25d5Smacro.wave.z@gmail.com mrs x9, esr_el3 232*14bf25d5Smacro.wave.z@gmail.com ubfx x9, x9, #26, #6 233*14bf25d5Smacro.wave.z@gmail.com cmp x9, #0x13 234*14bf25d5Smacro.wave.z@gmail.com b.eq handle_smc32 235*14bf25d5Smacro.wave.z@gmail.com cmp x9, #0x17 236*14bf25d5Smacro.wave.z@gmail.com b.eq handle_smc64 237*14bf25d5Smacro.wave.z@gmail.com 238*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception 239*14bf25d5Smacro.wave.z@gmail.com 240*14bf25d5Smacro.wave.z@gmail.com .align 11 241*14bf25d5Smacro.wave.z@gmail.com .globl el3_exception_vectors 242*14bf25d5Smacro.wave.z@gmail.comel3_exception_vectors: 243*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* Sync, Current EL using SP0 */ 244*14bf25d5Smacro.wave.z@gmail.com .align 7 245*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* IRQ, Current EL using SP0 */ 246*14bf25d5Smacro.wave.z@gmail.com .align 7 247*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* FIQ, Current EL using SP0 */ 248*14bf25d5Smacro.wave.z@gmail.com .align 7 249*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* SError, Current EL using SP0 */ 250*14bf25d5Smacro.wave.z@gmail.com .align 7 251*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* Sync, Current EL using SPx */ 252*14bf25d5Smacro.wave.z@gmail.com .align 7 253*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* IRQ, Current EL using SPx */ 254*14bf25d5Smacro.wave.z@gmail.com .align 7 255*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* FIQ, Current EL using SPx */ 256*14bf25d5Smacro.wave.z@gmail.com .align 7 257*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* SError, Current EL using SPx */ 258*14bf25d5Smacro.wave.z@gmail.com .align 7 259*14bf25d5Smacro.wave.z@gmail.com b handle_sync /* Sync, Lower EL using AArch64 */ 260*14bf25d5Smacro.wave.z@gmail.com .align 7 261*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* IRQ, Lower EL using AArch64 */ 262*14bf25d5Smacro.wave.z@gmail.com .align 7 263*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* FIQ, Lower EL using AArch64 */ 264*14bf25d5Smacro.wave.z@gmail.com .align 7 265*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* SError, Lower EL using AArch64 */ 266*14bf25d5Smacro.wave.z@gmail.com .align 7 267*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* Sync, Lower EL using AArch32 */ 268*14bf25d5Smacro.wave.z@gmail.com .align 7 269*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* IRQ, Lower EL using AArch32 */ 270*14bf25d5Smacro.wave.z@gmail.com .align 7 271*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* FIQ, Lower EL using AArch32 */ 272*14bf25d5Smacro.wave.z@gmail.com .align 7 273*14bf25d5Smacro.wave.z@gmail.com b unhandled_exception /* SError, Lower EL using AArch32 */ 274*14bf25d5Smacro.wave.z@gmail.com 275*14bf25d5Smacro.wave.z@gmail.comENTRY(psci_setup_vectors) 276*14bf25d5Smacro.wave.z@gmail.com adr x0, el3_exception_vectors 277*14bf25d5Smacro.wave.z@gmail.com msr vbar_el3, x0 278*14bf25d5Smacro.wave.z@gmail.com ret 279*14bf25d5Smacro.wave.z@gmail.comENDPROC(psci_setup_vectors) 280*14bf25d5Smacro.wave.z@gmail.com 281*14bf25d5Smacro.wave.z@gmail.comENTRY(psci_arch_init) 282*14bf25d5Smacro.wave.z@gmail.com ret 283*14bf25d5Smacro.wave.z@gmail.comENDPROC(psci_arch_init) 284*14bf25d5Smacro.wave.z@gmail.com.weak psci_arch_init 285*14bf25d5Smacro.wave.z@gmail.com 286*14bf25d5Smacro.wave.z@gmail.com.popsection 287