blob: 678d9c2f0ae6358af83786f90cc149a1320bb668 [file] [log] [blame]
Yatharth Kochardafb2472016-06-30 14:52:12 +01001/*
Yann Gautierc1425872019-02-15 16:42:20 +01002 * Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
Yatharth Kochardafb2472016-06-30 14:52:12 +01003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Yatharth Kochardafb2472016-06-30 14:52:12 +01005 */
6
7#include <arch.h>
8#include <asm_macros.S>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +00009#include <common/bl_common.h>
Yatharth Kochardafb2472016-06-30 14:52:12 +010010
11 .globl bl2_vector_table
12 .globl bl2_entrypoint
13
14
15vector_base bl2_vector_table
16 b bl2_entrypoint
17 b report_exception /* Undef */
18 b report_exception /* SVC call */
Yann Gautierc1425872019-02-15 16:42:20 +010019 b report_prefetch_abort /* Prefetch abort */
20 b report_data_abort /* Data abort */
Yatharth Kochardafb2472016-06-30 14:52:12 +010021 b report_exception /* Reserved */
22 b report_exception /* IRQ */
23 b report_exception /* FIQ */
24
25
26func bl2_entrypoint
27 /*---------------------------------------------
Soby Mathew73308d02018-01-09 14:36:14 +000028 * Save arguments x0 - x3 from BL1 for future
29 * use.
Yatharth Kochardafb2472016-06-30 14:52:12 +010030 * ---------------------------------------------
31 */
Soby Mathew73308d02018-01-09 14:36:14 +000032 mov r9, r0
33 mov r10, r1
34 mov r11, r2
35 mov r12, r3
Yatharth Kochardafb2472016-06-30 14:52:12 +010036
37 /* ---------------------------------------------
38 * Set the exception vector to something sane.
39 * ---------------------------------------------
40 */
41 ldr r0, =bl2_vector_table
42 stcopr r0, VBAR
43 isb
44
John Tsichritzisd5a59602019-03-04 16:42:54 +000045 /* --------------------------------------------------------
46 * Enable the instruction cache - disable speculative loads
47 * --------------------------------------------------------
Yatharth Kochardafb2472016-06-30 14:52:12 +010048 */
49 ldcopr r0, SCTLR
50 orr r0, r0, #SCTLR_I_BIT
John Tsichritzisd5a59602019-03-04 16:42:54 +000051 bic r0, r0, #SCTLR_DSSBS_BIT
Yatharth Kochardafb2472016-06-30 14:52:12 +010052 stcopr r0, SCTLR
53 isb
54
55 /* ---------------------------------------------
56 * Since BL2 executes after BL1, it is assumed
57 * here that BL1 has already has done the
58 * necessary register initializations.
59 * ---------------------------------------------
60 */
61
62 /* ---------------------------------------------
63 * Invalidate the RW memory used by the BL2
64 * image. This includes the data and NOBITS
65 * sections. This is done to safeguard against
66 * possible corruption of this memory by dirty
67 * cache lines in a system cache as a result of
68 * use by an earlier boot loader stage.
69 * ---------------------------------------------
70 */
71 ldr r0, =__RW_START__
72 ldr r1, =__RW_END__
73 sub r1, r1, r0
74 bl inv_dcache_range
75
76 /* ---------------------------------------------
77 * Zero out NOBITS sections. There are 2 of them:
78 * - the .bss section;
79 * - the coherent memory section.
80 * ---------------------------------------------
81 */
82 ldr r0, =__BSS_START__
Yann Gautiere57bce82020-08-18 14:42:41 +020083 ldr r1, =__BSS_END__
84 sub r1, r1, r0
Yatharth Kochardafb2472016-06-30 14:52:12 +010085 bl zeromem
86
87#if USE_COHERENT_MEM
88 ldr r0, =__COHERENT_RAM_START__
Yann Gautiere57bce82020-08-18 14:42:41 +020089 ldr r1, =__COHERENT_RAM_END_UNALIGNED__
90 sub r1, r1, r0
Yatharth Kochardafb2472016-06-30 14:52:12 +010091 bl zeromem
92#endif
93
94 /* --------------------------------------------
95 * Allocate a stack whose memory will be marked
96 * as Normal-IS-WBWA when the MMU is enabled.
97 * There is no risk of reading stale stack
98 * memory after enabling the MMU as only the
99 * primary cpu is running at the moment.
100 * --------------------------------------------
101 */
102 bl plat_set_my_stack
103
104 /* ---------------------------------------------
Douglas Raillard306593d2017-02-24 18:14:15 +0000105 * Initialize the stack protector canary before
106 * any C code is called.
107 * ---------------------------------------------
108 */
109#if STACK_PROTECTOR_ENABLED
110 bl update_stack_protector_canary
111#endif
112
113 /* ---------------------------------------------
Antonio Nino Diaz6e4b0832019-01-31 10:48:47 +0000114 * Perform BL2 setup
Yatharth Kochardafb2472016-06-30 14:52:12 +0100115 * ---------------------------------------------
116 */
Soby Mathew73308d02018-01-09 14:36:14 +0000117 mov r0, r9
118 mov r1, r10
119 mov r2, r11
120 mov r3, r12
Antonio Nino Diaz6e4b0832019-01-31 10:48:47 +0000121
122 bl bl2_setup
Yatharth Kochardafb2472016-06-30 14:52:12 +0100123
124 /* ---------------------------------------------
125 * Jump to main function.
126 * ---------------------------------------------
127 */
128 bl bl2_main
129
130 /* ---------------------------------------------
131 * Should never reach this point.
132 * ---------------------------------------------
133 */
Jeenu Viswambharan68aef102016-11-30 15:21:11 +0000134 no_ret plat_panic_handler
Yatharth Kochardafb2472016-06-30 14:52:12 +0100135
136endfunc bl2_entrypoint