blob: 8b9c2a6493233ed74ab5f746764abfc261afee6c [file] [log] [blame]
Yatharth Kocharb1c2fe02015-10-14 15:27:24 +01001/*
Douglas Raillard21362a92016-12-02 13:51:54 +00002 * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
Yatharth Kocharb1c2fe02015-10-14 15:27:24 +01003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Yatharth Kocharb1c2fe02015-10-14 15:27:24 +01005 */
6
7#include <arch.h>
8#include <asm_macros.S>
9#include <bl_common.h>
10
11
12 .globl bl2u_entrypoint
13
14
15func bl2u_entrypoint
16 /*---------------------------------------------
17 * Store the extents of the tzram available to
18 * BL2U and other platform specific information
19 * for future use. x0 is currently not used.
20 * ---------------------------------------------
21 */
22 mov x20, x1
23 mov x21, x2
24
25 /* ---------------------------------------------
26 * Set the exception vector to something sane.
27 * ---------------------------------------------
28 */
29 adr x0, early_exceptions
30 msr vbar_el1, x0
31 isb
32
33 /* ---------------------------------------------
34 * Enable the SError interrupt now that the
35 * exception vectors have been setup.
36 * ---------------------------------------------
37 */
38 msr daifclr, #DAIF_ABT_BIT
39
40 /* ---------------------------------------------
41 * Enable the instruction cache, stack pointer
42 * and data access alignment checks
43 * ---------------------------------------------
44 */
45 mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
46 mrs x0, sctlr_el1
47 orr x0, x0, x1
48 msr sctlr_el1, x0
49 isb
50
51 /* ---------------------------------------------
52 * Invalidate the RW memory used by the BL2U
53 * image. This includes the data and NOBITS
54 * sections. This is done to safeguard against
55 * possible corruption of this memory by dirty
56 * cache lines in a system cache as a result of
57 * use by an earlier boot loader stage.
58 * ---------------------------------------------
59 */
60 adr x0, __RW_START__
61 adr x1, __RW_END__
62 sub x1, x1, x0
63 bl inv_dcache_range
64
65 /* ---------------------------------------------
66 * Zero out NOBITS sections. There are 2 of them:
67 * - the .bss section;
68 * - the coherent memory section.
69 * ---------------------------------------------
70 */
71 ldr x0, =__BSS_START__
72 ldr x1, =__BSS_SIZE__
Douglas Raillard21362a92016-12-02 13:51:54 +000073 bl zeromem
Yatharth Kocharb1c2fe02015-10-14 15:27:24 +010074
75 /* --------------------------------------------
76 * Allocate a stack whose memory will be marked
77 * as Normal-IS-WBWA when the MMU is enabled.
78 * There is no risk of reading stale stack
79 * memory after enabling the MMU as only the
80 * primary cpu is running at the moment.
81 * --------------------------------------------
82 */
83 bl plat_set_my_stack
84
85 /* ---------------------------------------------
Douglas Raillard306593d2017-02-24 18:14:15 +000086 * Initialize the stack protector canary before
87 * any C code is called.
88 * ---------------------------------------------
89 */
90#if STACK_PROTECTOR_ENABLED
91 bl update_stack_protector_canary
92#endif
93
94 /* ---------------------------------------------
Yatharth Kocharb1c2fe02015-10-14 15:27:24 +010095 * Perform early platform setup & platform
96 * specific early arch. setup e.g. mmu setup
97 * ---------------------------------------------
98 */
99 mov x0, x20
100 mov x1, x21
101 bl bl2u_early_platform_setup
102 bl bl2u_plat_arch_setup
103
104 /* ---------------------------------------------
105 * Jump to bl2u_main function.
106 * ---------------------------------------------
107 */
108 bl bl2u_main
109
Antonio Nino Diaz1f21bcf2016-02-01 13:57:25 +0000110 /* ---------------------------------------------
111 * Should never reach this point.
112 * ---------------------------------------------
113 */
Jeenu Viswambharan68aef102016-11-30 15:21:11 +0000114 no_ret plat_panic_handler
Antonio Nino Diaz1f21bcf2016-02-01 13:57:25 +0000115
Yatharth Kocharb1c2fe02015-10-14 15:27:24 +0100116endfunc bl2u_entrypoint