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