mirror of https://github.com/acidanthera/audk.git
49 lines
1.8 KiB
ArmAsm
49 lines
1.8 KiB
ArmAsm
#========================================================================================
|
|
# Copyright (c) 2011-2017, ARM Limited. All rights reserved.
|
|
#
|
|
# This program and the accompanying materials
|
|
# are licensed and made available under the terms and conditions of the BSD License
|
|
# which accompanies this distribution. The full text of the license may be found at
|
|
# http:#opensource.org/licenses/bsd-license.php
|
|
#
|
|
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
#
|
|
#=======================================================================================
|
|
|
|
#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
|