blob: 756c16dfcdf2be6e75ee01eb984f251b95de8d66 [file] [log] [blame]
Achin Gupta4f6ad662013-10-25 09:08:21 +01001/*
Antonio Nino Diaz9d93fc22019-01-31 10:48:47 +00002 * Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
Achin Gupta4f6ad662013-10-25 09:08:21 +01003 *
dp-arm82cb2c12017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Achin Gupta4f6ad662013-10-25 09:08:21 +01005 */
6
Sandrine Bailleuxc10bd2c2013-11-12 16:41:16 +00007#include <arch.h>
Andrew Thoelke0a30cf52014-03-18 13:46:55 +00008#include <asm_macros.S>
Antonio Nino Diaz09d40e02018-12-14 00:18:21 +00009#include <common/bl_common.h>
Achin Gupta4f6ad662013-10-25 09:08:21 +010010
11
12 .globl bl2_entrypoint
13
14
Achin Gupta4f6ad662013-10-25 09:08:21 +010015
Andrew Thoelke0a30cf52014-03-18 13:46:55 +000016func bl2_entrypoint
Achin Gupta4f6ad662013-10-25 09:08:21 +010017 /*---------------------------------------------
Soby Mathewa6f340f2018-01-09 14:36:14 +000018 * Save arguments x0 - x3 from BL1 for future
19 * use.
Achin Gupta4f6ad662013-10-25 09:08:21 +010020 * ---------------------------------------------
Antonio Nino Diaz1c3ea102016-02-01 13:57:25 +000021 */
Soby Mathewa6f340f2018-01-09 14:36:14 +000022 mov x20, x0
23 mov x21, x1
24 mov x22, x2
25 mov x23, x3
Achin Gupta4f6ad662013-10-25 09:08:21 +010026
27 /* ---------------------------------------------
Sandrine Bailleuxc10bd2c2013-11-12 16:41:16 +000028 * Set the exception vector to something sane.
29 * ---------------------------------------------
30 */
31 adr x0, early_exceptions
32 msr vbar_el1, x0
Achin Gupta0c8d4fe2014-08-04 23:13:10 +010033 isb
34
35 /* ---------------------------------------------
36 * Enable the SError interrupt now that the
37 * exception vectors have been setup.
38 * ---------------------------------------------
39 */
40 msr daifclr, #DAIF_ABT_BIT
Sandrine Bailleuxc10bd2c2013-11-12 16:41:16 +000041
42 /* ---------------------------------------------
Achin Guptaec3c1002014-07-18 18:38:28 +010043 * Enable the instruction cache, stack pointer
John Tsichritzis02b57942019-03-04 16:42:54 +000044 * and data access alignment checks and disable
45 * speculative loads.
Sandrine Bailleuxc10bd2c2013-11-12 16:41:16 +000046 * ---------------------------------------------
47 */
Achin Guptaec3c1002014-07-18 18:38:28 +010048 mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
Sandrine Bailleuxc10bd2c2013-11-12 16:41:16 +000049 mrs x0, sctlr_el1
Achin Guptaec3c1002014-07-18 18:38:28 +010050 orr x0, x0, x1
Boyan Karatotev10ecd582025-03-26 15:54:55 +000051#if ENABLE_BTI
52 /* Enable PAC branch type compatibility */
53 bic x0, x0, #(SCTLR_BT0_BIT | SCTLR_BT1_BIT)
54#endif
John Tsichritzis02b57942019-03-04 16:42:54 +000055 bic x0, x0, #SCTLR_DSSBS_BIT
Sandrine Bailleuxc10bd2c2013-11-12 16:41:16 +000056 msr sctlr_el1, x0
Sandrine Bailleuxc10bd2c2013-11-12 16:41:16 +000057 isb
58
Sandrine Bailleux65f546a2013-11-28 09:43:06 +000059 /* ---------------------------------------------
Achin Gupta54dc71e2015-09-11 16:03:13 +010060 * Invalidate the RW memory used by the BL2
61 * image. This includes the data and NOBITS
62 * sections. This is done to safeguard against
63 * possible corruption of this memory by dirty
64 * cache lines in a system cache as a result of
65 * use by an earlier boot loader stage.
66 * ---------------------------------------------
67 */
68 adr x0, __RW_START__
69 adr x1, __RW_END__
70 sub x1, x1, x0
71 bl inv_dcache_range
72
73 /* ---------------------------------------------
Sandrine Bailleux65f546a2013-11-28 09:43:06 +000074 * Zero out NOBITS sections. There are 2 of them:
75 * - the .bss section;
76 * - the coherent memory section.
77 * ---------------------------------------------
78 */
Soby Mathewf1722b62018-10-12 16:40:28 +010079 adrp x0, __BSS_START__
80 add x0, x0, :lo12:__BSS_START__
81 adrp x1, __BSS_END__
82 add x1, x1, :lo12:__BSS_END__
83 sub x1, x1, x0
Douglas Raillard308d3592016-12-02 13:51:54 +000084 bl zeromem
Sandrine Bailleux65f546a2013-11-28 09:43:06 +000085
Soby Mathewab8707e2015-01-08 18:02:44 +000086#if USE_COHERENT_MEM
Soby Mathewf1722b62018-10-12 16:40:28 +010087 adrp x0, __COHERENT_RAM_START__
88 add x0, x0, :lo12:__COHERENT_RAM_START__
89 adrp x1, __COHERENT_RAM_END_UNALIGNED__
90 add x1, x1, :lo12:__COHERENT_RAM_END_UNALIGNED__
91 sub x1, x1, x0
Douglas Raillard308d3592016-12-02 13:51:54 +000092 bl zeromem
Soby Mathewab8707e2015-01-08 18:02:44 +000093#endif
Sandrine Bailleux65f546a2013-11-28 09:43:06 +000094
Achin Gupta4f6ad662013-10-25 09:08:21 +010095 /* --------------------------------------------
Achin Gupta754a2b72014-06-25 19:26:22 +010096 * Allocate a stack whose memory will be marked
97 * as Normal-IS-WBWA when the MMU is enabled.
98 * There is no risk of reading stale stack
99 * memory after enabling the MMU as only the
100 * primary cpu is running at the moment.
Achin Gupta4f6ad662013-10-25 09:08:21 +0100101 * --------------------------------------------
102 */
Soby Mathew85a181c2015-07-13 11:21:11 +0100103 bl plat_set_my_stack
Achin Gupta4f6ad662013-10-25 09:08:21 +0100104
105 /* ---------------------------------------------
Douglas Raillard51faada2017-02-24 18:14:15 +0000106 * Initialize the stack protector canary before
107 * any C code is called.
108 * ---------------------------------------------
109 */
110#if STACK_PROTECTOR_ENABLED
111 bl update_stack_protector_canary
112#endif
113
114 /* ---------------------------------------------
Antonio Nino Diaz9d93fc22019-01-31 10:48:47 +0000115 * Perform BL2 setup
Achin Gupta4f6ad662013-10-25 09:08:21 +0100116 * ---------------------------------------------
117 */
Yatharth Kochar5698c5b2015-10-29 12:47:02 +0000118 mov x0, x20
Soby Mathewa6f340f2018-01-09 14:36:14 +0000119 mov x1, x21
120 mov x2, x22
121 mov x3, x23
Antonio Nino Diaz9d93fc22019-01-31 10:48:47 +0000122 bl bl2_setup
Soby Mathewa6f340f2018-01-09 14:36:14 +0000123
Antonio Nino Diaz9d93fc22019-01-31 10:48:47 +0000124#if ENABLE_PAUTH
Alexei Fedorov9fc59632019-05-24 12:17:09 +0100125 /* ---------------------------------------------
Alexei Fedoroved108b52019-09-13 14:11:59 +0100126 * Program APIAKey_EL1
127 * and enable pointer authentication.
Alexei Fedorov9fc59632019-05-24 12:17:09 +0100128 * ---------------------------------------------
129 */
Alexei Fedoroved108b52019-09-13 14:11:59 +0100130 bl pauth_init_enable_el1
Antonio Nino Diaz9d93fc22019-01-31 10:48:47 +0000131#endif /* ENABLE_PAUTH */
Achin Gupta4f6ad662013-10-25 09:08:21 +0100132
133 /* ---------------------------------------------
Achin Gupta4f6ad662013-10-25 09:08:21 +0100134 * Jump to main function.
135 * ---------------------------------------------
136 */
137 bl bl2_main
Antonio Nino Diaz1c3ea102016-02-01 13:57:25 +0000138
139 /* ---------------------------------------------
140 * Should never reach this point.
141 * ---------------------------------------------
142 */
Jeenu Viswambharana806dad2016-11-30 15:21:11 +0000143 no_ret plat_panic_handler
Antonio Nino Diaz1c3ea102016-02-01 13:57:25 +0000144
Kévin Petit8b779622015-03-24 14:03:57 +0000145endfunc bl2_entrypoint