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