• David Cunado's avatar
    Fully initialise essential control registers · 18f2efd6
    David Cunado authored
    
    This patch updates the el3_arch_init_common macro so that it fully
    initialises essential control registers rather then relying on hardware
    to set the reset values.
    
    The context management functions are also updated to fully initialise
    the appropriate control registers when initialising the non-secure and
    secure context structures and when preparing to leave EL3 for a lower
    EL.
    
    This gives better alignement with the ARM ARM which states that software
    must initialise RES0 and RES1 fields with 0 / 1.
    
    This patch also corrects the following typos:
    
    "NASCR definitions" -> "NSACR definitions"
    
    Change-Id: Ia8940b8351dc27bc09e2138b011e249655041cfc
    Signed-off-by: default avatarDavid Cunado <david.cunado@arm.com>
    18f2efd6
bl1_entrypoint.S 1.77 KB
/*
 * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <arch.h>
#include <el3_common_macros.S>

	.globl	bl1_entrypoint


	/* -----------------------------------------------------
	 * bl1_entrypoint() is the entry point into the trusted
	 * firmware code when a cpu is released from warm or
	 * cold reset.
	 * -----------------------------------------------------
	 */

func bl1_entrypoint
	/* ---------------------------------------------------------------------
	 * If the reset address is programmable then bl1_entrypoint() is
	 * executed only on the cold boot path. Therefore, we can skip the warm
	 * boot mailbox mechanism.
	 * ---------------------------------------------------------------------
	 */
	el3_entrypoint_common					\
		_init_sctlr=1					\
		_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS	\
		_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU	\
		_init_memory=1					\
		_init_c_runtime=1				\
		_exception_vectors=bl1_exceptions

	/* ---------------------------------------------
	 * Architectural init. can be generic e.g.
	 * enabling stack alignment and platform spec-
	 * ific e.g. MMU & page table setup as per the
	 * platform memory map. Perform the latter here
	 * and the former in bl1_main.
	 * ---------------------------------------------
	 */
	bl	bl1_early_platform_setup
	bl	bl1_plat_arch_setup

	/* --------------------------------------------------
	 * Initialize platform and jump to our c-entry point
	 * for this type of reset.
	 * --------------------------------------------------
	 */
	bl	bl1_main

	/* --------------------------------------------------
	 * Do the transition to next boot image.
	 * --------------------------------------------------
	 */
	b	el3_exit
endfunc bl1_entrypoint