xref: /rk3399_ARM-atf/bl2/aarch32/bl2_entrypoint.S (revision a806dad58c4cf752238d7bbffbc9a1ce17f63cea)
1d48c12e9SYatharth Kochar/*
2d48c12e9SYatharth Kochar * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3d48c12e9SYatharth Kochar *
4d48c12e9SYatharth Kochar * Redistribution and use in source and binary forms, with or without
5d48c12e9SYatharth Kochar * modification, are permitted provided that the following conditions are met:
6d48c12e9SYatharth Kochar *
7d48c12e9SYatharth Kochar * Redistributions of source code must retain the above copyright notice, this
8d48c12e9SYatharth Kochar * list of conditions and the following disclaimer.
9d48c12e9SYatharth Kochar *
10d48c12e9SYatharth Kochar * Redistributions in binary form must reproduce the above copyright notice,
11d48c12e9SYatharth Kochar * this list of conditions and the following disclaimer in the documentation
12d48c12e9SYatharth Kochar * and/or other materials provided with the distribution.
13d48c12e9SYatharth Kochar *
14d48c12e9SYatharth Kochar * Neither the name of ARM nor the names of its contributors may be used
15d48c12e9SYatharth Kochar * to endorse or promote products derived from this software without specific
16d48c12e9SYatharth Kochar * prior written permission.
17d48c12e9SYatharth Kochar *
18d48c12e9SYatharth Kochar * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19d48c12e9SYatharth Kochar * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20d48c12e9SYatharth Kochar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21d48c12e9SYatharth Kochar * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22d48c12e9SYatharth Kochar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23d48c12e9SYatharth Kochar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24d48c12e9SYatharth Kochar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25d48c12e9SYatharth Kochar * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26d48c12e9SYatharth Kochar * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27d48c12e9SYatharth Kochar * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28d48c12e9SYatharth Kochar * POSSIBILITY OF SUCH DAMAGE.
29d48c12e9SYatharth Kochar */
30d48c12e9SYatharth Kochar
31d48c12e9SYatharth Kochar#include <arch.h>
32d48c12e9SYatharth Kochar#include <asm_macros.S>
33d48c12e9SYatharth Kochar#include <bl_common.h>
34d48c12e9SYatharth Kochar
35d48c12e9SYatharth Kochar
36d48c12e9SYatharth Kochar	.globl	bl2_vector_table
37d48c12e9SYatharth Kochar	.globl	bl2_entrypoint
38d48c12e9SYatharth Kochar
39d48c12e9SYatharth Kochar
40d48c12e9SYatharth Kocharvector_base bl2_vector_table
41d48c12e9SYatharth Kochar	b	bl2_entrypoint
42d48c12e9SYatharth Kochar	b	report_exception	/* Undef */
43d48c12e9SYatharth Kochar	b	report_exception	/* SVC call */
44d48c12e9SYatharth Kochar	b	report_exception	/* Prefetch abort */
45d48c12e9SYatharth Kochar	b	report_exception	/* Data abort */
46d48c12e9SYatharth Kochar	b	report_exception	/* Reserved */
47d48c12e9SYatharth Kochar	b	report_exception	/* IRQ */
48d48c12e9SYatharth Kochar	b	report_exception	/* FIQ */
49d48c12e9SYatharth Kochar
50d48c12e9SYatharth Kochar
51d48c12e9SYatharth Kocharfunc bl2_entrypoint
52d48c12e9SYatharth Kochar	/*---------------------------------------------
53d48c12e9SYatharth Kochar	 * Save from r1 the extents of the trusted ram
54d48c12e9SYatharth Kochar	 * available to BL2 for future use.
55d48c12e9SYatharth Kochar	 * r0 is not currently used.
56d48c12e9SYatharth Kochar	 * ---------------------------------------------
57d48c12e9SYatharth Kochar	 */
58d48c12e9SYatharth Kochar 	mov	r11, r1
59d48c12e9SYatharth Kochar
60d48c12e9SYatharth Kochar	/* ---------------------------------------------
61d48c12e9SYatharth Kochar	 * Set the exception vector to something sane.
62d48c12e9SYatharth Kochar	 * ---------------------------------------------
63d48c12e9SYatharth Kochar	 */
64d48c12e9SYatharth Kochar	ldr	r0, =bl2_vector_table
65d48c12e9SYatharth Kochar	stcopr	r0, VBAR
66d48c12e9SYatharth Kochar	isb
67d48c12e9SYatharth Kochar
68d48c12e9SYatharth Kochar	/* -----------------------------------------------------
69d48c12e9SYatharth Kochar	 * Enable the instruction cache
70d48c12e9SYatharth Kochar	 * -----------------------------------------------------
71d48c12e9SYatharth Kochar	 */
72d48c12e9SYatharth Kochar	ldcopr	r0, SCTLR
73d48c12e9SYatharth Kochar	orr	r0, r0, #SCTLR_I_BIT
74d48c12e9SYatharth Kochar	stcopr	r0, SCTLR
75d48c12e9SYatharth Kochar	isb
76d48c12e9SYatharth Kochar
77d48c12e9SYatharth Kochar	/* ---------------------------------------------
78d48c12e9SYatharth Kochar	 * Since BL2 executes after BL1, it is assumed
79d48c12e9SYatharth Kochar	 * here that BL1 has already has done the
80d48c12e9SYatharth Kochar	 * necessary register initializations.
81d48c12e9SYatharth Kochar	 * ---------------------------------------------
82d48c12e9SYatharth Kochar	 */
83d48c12e9SYatharth Kochar
84d48c12e9SYatharth Kochar	/* ---------------------------------------------
85d48c12e9SYatharth Kochar	 * Invalidate the RW memory used by the BL2
86d48c12e9SYatharth Kochar	 * image. This includes the data and NOBITS
87d48c12e9SYatharth Kochar	 * sections. This is done to safeguard against
88d48c12e9SYatharth Kochar	 * possible corruption of this memory by dirty
89d48c12e9SYatharth Kochar	 * cache lines in a system cache as a result of
90d48c12e9SYatharth Kochar	 * use by an earlier boot loader stage.
91d48c12e9SYatharth Kochar	 * ---------------------------------------------
92d48c12e9SYatharth Kochar	 */
93d48c12e9SYatharth Kochar	ldr	r0, =__RW_START__
94d48c12e9SYatharth Kochar	ldr	r1, =__RW_END__
95d48c12e9SYatharth Kochar	sub	r1, r1, r0
96d48c12e9SYatharth Kochar	bl	inv_dcache_range
97d48c12e9SYatharth Kochar
98d48c12e9SYatharth Kochar	/* ---------------------------------------------
99d48c12e9SYatharth Kochar	 * Zero out NOBITS sections. There are 2 of them:
100d48c12e9SYatharth Kochar	 *   - the .bss section;
101d48c12e9SYatharth Kochar	 *   - the coherent memory section.
102d48c12e9SYatharth Kochar	 * ---------------------------------------------
103d48c12e9SYatharth Kochar	 */
104d48c12e9SYatharth Kochar	ldr	r0, =__BSS_START__
105d48c12e9SYatharth Kochar	ldr	r1, =__BSS_SIZE__
106d48c12e9SYatharth Kochar	bl	zeromem
107d48c12e9SYatharth Kochar
108d48c12e9SYatharth Kochar#if USE_COHERENT_MEM
109d48c12e9SYatharth Kochar	ldr	r0, =__COHERENT_RAM_START__
110d48c12e9SYatharth Kochar	ldr	r1, =__COHERENT_RAM_UNALIGNED_SIZE__
111d48c12e9SYatharth Kochar	bl	zeromem
112d48c12e9SYatharth Kochar#endif
113d48c12e9SYatharth Kochar
114d48c12e9SYatharth Kochar	/* --------------------------------------------
115d48c12e9SYatharth Kochar	 * Allocate a stack whose memory will be marked
116d48c12e9SYatharth Kochar	 * as Normal-IS-WBWA when the MMU is enabled.
117d48c12e9SYatharth Kochar	 * There is no risk of reading stale stack
118d48c12e9SYatharth Kochar	 * memory after enabling the MMU as only the
119d48c12e9SYatharth Kochar	 * primary cpu is running at the moment.
120d48c12e9SYatharth Kochar	 * --------------------------------------------
121d48c12e9SYatharth Kochar	 */
122d48c12e9SYatharth Kochar	bl	plat_set_my_stack
123d48c12e9SYatharth Kochar
124d48c12e9SYatharth Kochar	/* ---------------------------------------------
125d48c12e9SYatharth Kochar	 * Perform early platform setup & platform
126d48c12e9SYatharth Kochar	 * specific early arch. setup e.g. mmu setup
127d48c12e9SYatharth Kochar	 * ---------------------------------------------
128d48c12e9SYatharth Kochar	 */
129d48c12e9SYatharth Kochar	mov	r0, r11
130d48c12e9SYatharth Kochar	bl	bl2_early_platform_setup
131d48c12e9SYatharth Kochar	bl	bl2_plat_arch_setup
132d48c12e9SYatharth Kochar
133d48c12e9SYatharth Kochar	/* ---------------------------------------------
134d48c12e9SYatharth Kochar	 * Jump to main function.
135d48c12e9SYatharth Kochar	 * ---------------------------------------------
136d48c12e9SYatharth Kochar	 */
137d48c12e9SYatharth Kochar	bl	bl2_main
138d48c12e9SYatharth Kochar
139d48c12e9SYatharth Kochar	/* ---------------------------------------------
140d48c12e9SYatharth Kochar	 * Should never reach this point.
141d48c12e9SYatharth Kochar	 * ---------------------------------------------
142d48c12e9SYatharth Kochar	 */
143*a806dad5SJeenu Viswambharan	no_ret	plat_panic_handler
144d48c12e9SYatharth Kochar
145d48c12e9SYatharth Kocharendfunc bl2_entrypoint
146