mirror of https://github.com/acidanthera/audk.git
43 lines
1.4 KiB
ArmAsm
43 lines
1.4 KiB
ArmAsm
#========================================================================================
|
|
# Copyright (c) 2011-2017, ARM Limited. All rights reserved.
|
|
#
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
#
|
|
#=======================================================================================
|
|
|
|
#include <AsmMacroIoLibV8.h>
|
|
#include <Chipset/AArch64.h>
|
|
|
|
// 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
|