xref: /rk3399_ARM-atf/bl2/aarch32/bl2_entrypoint.S (revision 9d93fc2f89a00e104bfe6be31f87861c26ba2bf0)
1d48c12e9SYatharth Kochar/*
2*9d93fc2fSAntonio Nino Diaz * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
3d48c12e9SYatharth Kochar *
482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause
5d48c12e9SYatharth Kochar */
6d48c12e9SYatharth Kochar
7d48c12e9SYatharth Kochar#include <arch.h>
8d48c12e9SYatharth Kochar#include <asm_macros.S>
909d40e0eSAntonio Nino Diaz#include <common/bl_common.h>
10d48c12e9SYatharth Kochar
11d48c12e9SYatharth Kochar	.globl	bl2_vector_table
12d48c12e9SYatharth Kochar	.globl	bl2_entrypoint
13d48c12e9SYatharth Kochar
14d48c12e9SYatharth Kochar
15d48c12e9SYatharth Kocharvector_base bl2_vector_table
16d48c12e9SYatharth Kochar	b	bl2_entrypoint
17d48c12e9SYatharth Kochar	b	report_exception	/* Undef */
18d48c12e9SYatharth Kochar	b	report_exception	/* SVC call */
19d48c12e9SYatharth Kochar	b	report_exception	/* Prefetch abort */
20d48c12e9SYatharth Kochar	b	report_exception	/* Data abort */
21d48c12e9SYatharth Kochar	b	report_exception	/* Reserved */
22d48c12e9SYatharth Kochar	b	report_exception	/* IRQ */
23d48c12e9SYatharth Kochar	b	report_exception	/* FIQ */
24d48c12e9SYatharth Kochar
25d48c12e9SYatharth Kochar
26d48c12e9SYatharth Kocharfunc bl2_entrypoint
27d48c12e9SYatharth Kochar	/*---------------------------------------------
28a6f340feSSoby Mathew	 * Save arguments x0 - x3 from BL1 for future
29a6f340feSSoby Mathew	 * use.
30d48c12e9SYatharth Kochar	 * ---------------------------------------------
31d48c12e9SYatharth Kochar	 */
32a6f340feSSoby Mathew	mov	r9, r0
33a6f340feSSoby Mathew	mov	r10, r1
34a6f340feSSoby Mathew	mov	r11, r2
35a6f340feSSoby Mathew	mov	r12, r3
36d48c12e9SYatharth Kochar
37d48c12e9SYatharth Kochar	/* ---------------------------------------------
38d48c12e9SYatharth Kochar	 * Set the exception vector to something sane.
39d48c12e9SYatharth Kochar	 * ---------------------------------------------
40d48c12e9SYatharth Kochar	 */
41d48c12e9SYatharth Kochar	ldr	r0, =bl2_vector_table
42d48c12e9SYatharth Kochar	stcopr	r0, VBAR
43d48c12e9SYatharth Kochar	isb
44d48c12e9SYatharth Kochar
45d48c12e9SYatharth Kochar	/* -----------------------------------------------------
46d48c12e9SYatharth Kochar	 * Enable the instruction cache
47d48c12e9SYatharth Kochar	 * -----------------------------------------------------
48d48c12e9SYatharth Kochar	 */
49d48c12e9SYatharth Kochar	ldcopr	r0, SCTLR
50d48c12e9SYatharth Kochar	orr	r0, r0, #SCTLR_I_BIT
51d48c12e9SYatharth Kochar	stcopr	r0, SCTLR
52d48c12e9SYatharth Kochar	isb
53d48c12e9SYatharth Kochar
54d48c12e9SYatharth Kochar	/* ---------------------------------------------
55d48c12e9SYatharth Kochar	 * Since BL2 executes after BL1, it is assumed
56d48c12e9SYatharth Kochar	 * here that BL1 has already has done the
57d48c12e9SYatharth Kochar	 * necessary register initializations.
58d48c12e9SYatharth Kochar	 * ---------------------------------------------
59d48c12e9SYatharth Kochar	 */
60d48c12e9SYatharth Kochar
61d48c12e9SYatharth Kochar	/* ---------------------------------------------
62d48c12e9SYatharth Kochar	 * Invalidate the RW memory used by the BL2
63d48c12e9SYatharth Kochar	 * image. This includes the data and NOBITS
64d48c12e9SYatharth Kochar	 * sections. This is done to safeguard against
65d48c12e9SYatharth Kochar	 * possible corruption of this memory by dirty
66d48c12e9SYatharth Kochar	 * cache lines in a system cache as a result of
67d48c12e9SYatharth Kochar	 * use by an earlier boot loader stage.
68d48c12e9SYatharth Kochar	 * ---------------------------------------------
69d48c12e9SYatharth Kochar	 */
70d48c12e9SYatharth Kochar	ldr	r0, =__RW_START__
71d48c12e9SYatharth Kochar	ldr	r1, =__RW_END__
72d48c12e9SYatharth Kochar	sub	r1, r1, r0
73d48c12e9SYatharth Kochar	bl	inv_dcache_range
74d48c12e9SYatharth Kochar
75d48c12e9SYatharth Kochar	/* ---------------------------------------------
76d48c12e9SYatharth Kochar	 * Zero out NOBITS sections. There are 2 of them:
77d48c12e9SYatharth Kochar	 *   - the .bss section;
78d48c12e9SYatharth Kochar	 *   - the coherent memory section.
79d48c12e9SYatharth Kochar	 * ---------------------------------------------
80d48c12e9SYatharth Kochar	 */
81d48c12e9SYatharth Kochar	ldr	r0, =__BSS_START__
82d48c12e9SYatharth Kochar	ldr	r1, =__BSS_SIZE__
83d48c12e9SYatharth Kochar	bl	zeromem
84d48c12e9SYatharth Kochar
85d48c12e9SYatharth Kochar#if USE_COHERENT_MEM
86d48c12e9SYatharth Kochar	ldr	r0, =__COHERENT_RAM_START__
87d48c12e9SYatharth Kochar	ldr	r1, =__COHERENT_RAM_UNALIGNED_SIZE__
88d48c12e9SYatharth Kochar	bl	zeromem
89d48c12e9SYatharth Kochar#endif
90d48c12e9SYatharth Kochar
91d48c12e9SYatharth Kochar	/* --------------------------------------------
92d48c12e9SYatharth Kochar	 * Allocate a stack whose memory will be marked
93d48c12e9SYatharth Kochar	 * as Normal-IS-WBWA when the MMU is enabled.
94d48c12e9SYatharth Kochar	 * There is no risk of reading stale stack
95d48c12e9SYatharth Kochar	 * memory after enabling the MMU as only the
96d48c12e9SYatharth Kochar	 * primary cpu is running at the moment.
97d48c12e9SYatharth Kochar	 * --------------------------------------------
98d48c12e9SYatharth Kochar	 */
99d48c12e9SYatharth Kochar	bl	plat_set_my_stack
100d48c12e9SYatharth Kochar
101d48c12e9SYatharth Kochar	/* ---------------------------------------------
10251faada7SDouglas Raillard	 * Initialize the stack protector canary before
10351faada7SDouglas Raillard	 * any C code is called.
10451faada7SDouglas Raillard	 * ---------------------------------------------
10551faada7SDouglas Raillard	 */
10651faada7SDouglas Raillard#if STACK_PROTECTOR_ENABLED
10751faada7SDouglas Raillard	bl	update_stack_protector_canary
10851faada7SDouglas Raillard#endif
10951faada7SDouglas Raillard
11051faada7SDouglas Raillard	/* ---------------------------------------------
111*9d93fc2fSAntonio Nino Diaz	 * Perform BL2 setup
112d48c12e9SYatharth Kochar	 * ---------------------------------------------
113d48c12e9SYatharth Kochar	 */
114a6f340feSSoby Mathew	mov	r0, r9
115a6f340feSSoby Mathew	mov	r1, r10
116a6f340feSSoby Mathew	mov	r2, r11
117a6f340feSSoby Mathew	mov	r3, r12
118*9d93fc2fSAntonio Nino Diaz
119*9d93fc2fSAntonio Nino Diaz	bl	bl2_setup
120d48c12e9SYatharth Kochar
121d48c12e9SYatharth Kochar	/* ---------------------------------------------
122d48c12e9SYatharth Kochar	 * Jump to main function.
123d48c12e9SYatharth Kochar	 * ---------------------------------------------
124d48c12e9SYatharth Kochar	 */
125d48c12e9SYatharth Kochar	bl	bl2_main
126d48c12e9SYatharth Kochar
127d48c12e9SYatharth Kochar	/* ---------------------------------------------
128d48c12e9SYatharth Kochar	 * Should never reach this point.
129d48c12e9SYatharth Kochar	 * ---------------------------------------------
130d48c12e9SYatharth Kochar	 */
131a806dad5SJeenu Viswambharan	no_ret	plat_panic_handler
132d48c12e9SYatharth Kochar
133d48c12e9SYatharth Kocharendfunc bl2_entrypoint
134