xref: /rk3399_rockchip-uboot/arch/arm/cpu/armv8/psci.S (revision b5178a1f2468d5e9b1066e7d08757c1164727e4c)
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