#======================================================================================== # Copyright (c) 2011-2017, ARM Limited. All rights reserved. # # SPDX-License-Identifier: BSD-2-Clause-Patent # #======================================================================================= #include #include // Setup EL1 while in EL1 ASM_FUNC(SetupExceptionLevel1) mov x5, x30 // Save LR mov x0, #CPACR_CP_FULL_ACCESS bl ASM_PFX(ArmWriteCpacr) // Disable copro traps to EL1 ret x5 // Setup EL2 while in EL2 ASM_FUNC(SetupExceptionLevel2) msr sctlr_el2, xzr mrs x0, hcr_el2 // Read EL2 Hypervisor configuration Register // Send all interrupts to their respective Exception levels for EL2 orr x0, x0, #(1 << 3) // Enable EL2 FIQ orr x0, x0, #(1 << 4) // Enable EL2 IRQ orr x0, x0, #(1 << 5) // Enable EL2 SError and Abort msr hcr_el2, x0 // Write back our settings msr cptr_el2, xzr // Disable copro traps to EL2 // Enable Timer access for non-secure EL1 and EL0 // The cnthctl_el2 register bits are architecturally // UNKNOWN on reset. // Disable event stream as it is not in use at this stage mov x0, #(CNTHCTL_EL2_EL1PCTEN | CNTHCTL_EL2_EL1PCEN) msr cnthctl_el2, x0 ret ASM_FUNCTION_REMOVE_IF_UNREFERENCED