Home | History | Annotate | Download | only in aarch64
      1 /*
      2  * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
      3  *
      4  * SPDX-License-Identifier: BSD-3-Clause
      5  */
      6 
      7 #include <arch.h>
      8 #include <asm_macros.S>
      9 #include <bl_common.h>
     10 
     11 
     12 	.globl	bl2_entrypoint
     13 
     14 
     15 
     16 func bl2_entrypoint
     17 	/*---------------------------------------------
     18 	 * Save from x1 the extents of the tzram
     19 	 * available to BL2 for future use.
     20 	 * x0 is not currently used.
     21 	 * ---------------------------------------------
     22 	 */
     23 	mov	x20, x1
     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 BL2
     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__
     73 	bl	zeromem
     74 
     75 #if USE_COHERENT_MEM
     76 	ldr	x0, =__COHERENT_RAM_START__
     77 	ldr	x1, =__COHERENT_RAM_UNALIGNED_SIZE__
     78 	bl	zeromem
     79 #endif
     80 
     81 	/* --------------------------------------------
     82 	 * Allocate a stack whose memory will be marked
     83 	 * as Normal-IS-WBWA when the MMU is enabled.
     84 	 * There is no risk of reading stale stack
     85 	 * memory after enabling the MMU as only the
     86 	 * primary cpu is running at the moment.
     87 	 * --------------------------------------------
     88 	 */
     89 	bl	plat_set_my_stack
     90 
     91 	/* ---------------------------------------------
     92 	 * Initialize the stack protector canary before
     93 	 * any C code is called.
     94 	 * ---------------------------------------------
     95 	 */
     96 #if STACK_PROTECTOR_ENABLED
     97 	bl	update_stack_protector_canary
     98 #endif
     99 
    100 	/* ---------------------------------------------
    101 	 * Perform early platform setup & platform
    102 	 * specific early arch. setup e.g. mmu setup
    103 	 * ---------------------------------------------
    104 	 */
    105 	mov	x0, x20
    106 	bl	bl2_early_platform_setup
    107 	bl	bl2_plat_arch_setup
    108 
    109 	/* ---------------------------------------------
    110 	 * Jump to main function.
    111 	 * ---------------------------------------------
    112 	 */
    113 	bl	bl2_main
    114 
    115 	/* ---------------------------------------------
    116 	 * Should never reach this point.
    117 	 * ---------------------------------------------
    118 	 */
    119 	no_ret	plat_panic_handler
    120 
    121 endfunc bl2_entrypoint
    122