aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/cpu/armv8/start.S')
-rw-r--r--arch/arm/cpu/armv8/start.S21
1 files changed, 16 insertions, 5 deletions
diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
index d4db4d044f..99d126660d 100644
--- a/arch/arm/cpu/armv8/start.S
+++ b/arch/arm/cpu/armv8/start.S
@@ -18,7 +18,7 @@
18 18
19.globl _start 19.globl _start
20_start: 20_start:
21#if defined(LINUX_KERNEL_IMAGE_HEADER) 21#if defined(CONFIG_LINUX_KERNEL_IMAGE_HEADER)
22#include <asm/boot0-linux-kernel-header.h> 22#include <asm/boot0-linux-kernel-header.h>
23#elif defined(CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK) 23#elif defined(CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK)
24/* 24/*
@@ -87,13 +87,22 @@ pie_fixup_done:
87#ifdef CONFIG_SYS_RESET_SCTRL 87#ifdef CONFIG_SYS_RESET_SCTRL
88 bl reset_sctrl 88 bl reset_sctrl
89#endif 89#endif
90
91#if defined(CONFIG_ARMV8_SPL_EXCEPTION_VECTORS) || !defined(CONFIG_SPL_BUILD)
92.macro set_vbar, regname, reg
93 msr \regname, \reg
94.endm
95 adr x0, vectors
96#else
97.macro set_vbar, regname, reg
98.endm
99#endif
90 /* 100 /*
91 * Could be EL3/EL2/EL1, Initial State: 101 * Could be EL3/EL2/EL1, Initial State:
92 * Little Endian, MMU Disabled, i/dCache Disabled 102 * Little Endian, MMU Disabled, i/dCache Disabled
93 */ 103 */
94 adr x0, vectors
95 switch_el x1, 3f, 2f, 1f 104 switch_el x1, 3f, 2f, 1f
963: msr vbar_el3, x0 1053: set_vbar vbar_el3, x0
97 mrs x0, scr_el3 106 mrs x0, scr_el3
98 orr x0, x0, #0xf /* SCR_EL3.NS|IRQ|FIQ|EA */ 107 orr x0, x0, #0xf /* SCR_EL3.NS|IRQ|FIQ|EA */
99 msr scr_el3, x0 108 msr scr_el3, x0
@@ -103,11 +112,11 @@ pie_fixup_done:
103 msr cntfrq_el0, x0 /* Initialize CNTFRQ */ 112 msr cntfrq_el0, x0 /* Initialize CNTFRQ */
104#endif 113#endif
105 b 0f 114 b 0f
1062: msr vbar_el2, x0 1152: set_vbar vbar_el2, x0
107 mov x0, #0x33ff 116 mov x0, #0x33ff
108 msr cptr_el2, x0 /* Enable FP/SIMD */ 117 msr cptr_el2, x0 /* Enable FP/SIMD */
109 b 0f 118 b 0f
1101: msr vbar_el1, x0 1191: set_vbar vbar_el1, x0
111 mov x0, #3 << 20 120 mov x0, #3 << 20
112 msr cpacr_el1, x0 /* Enable FP/SIMD */ 121 msr cpacr_el1, x0 /* Enable FP/SIMD */
1130: 1220:
@@ -345,6 +354,7 @@ ENDPROC(smp_kick_all_cpus)
345/*-----------------------------------------------------------------------*/ 354/*-----------------------------------------------------------------------*/
346 355
347ENTRY(c_runtime_cpu_setup) 356ENTRY(c_runtime_cpu_setup)
357#if defined(CONFIG_ARMV8_SPL_EXCEPTION_VECTORS) || !defined(CONFIG_SPL_BUILD)
348 /* Relocate vBAR */ 358 /* Relocate vBAR */
349 adr x0, vectors 359 adr x0, vectors
350 switch_el x1, 3f, 2f, 1f 360 switch_el x1, 3f, 2f, 1f
@@ -354,6 +364,7 @@ ENTRY(c_runtime_cpu_setup)
354 b 0f 364 b 0f
3551: msr vbar_el1, x0 3651: msr vbar_el1, x0
3560: 3660:
367#endif
357 368
358 ret 369 ret
359ENDPROC(c_runtime_cpu_setup) 370ENDPROC(c_runtime_cpu_setup)