mirror of
https://gitlab.com/qemu-project/edk2.git
synced 2025-10-30 07:56:39 +08:00
ArmPkg: Remove ARM32 Support from ArmLib
edk2 is dropping support for the ARM32 architecture. This commit removes ARM32 files from ArmLib. Signed-off-by: Oliver Smith-Denny <osde@microsoft.com>
This commit is contained in:
committed by
mergify[bot]
parent
4261eb1bef
commit
cdc8858e19
@ -1,153 +0,0 @@
|
|||||||
#------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
|
||||||
# Copyright (c) 2011 - 2016, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2016, Linaro Limited. All rights reserved.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <AsmMacroLib.h>
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadMidr)
|
|
||||||
mrc p15,0,R0,c0,c0,0
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmCacheInfo)
|
|
||||||
mrc p15,0,R0,c0,c0,1
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmGetInterruptState)
|
|
||||||
mrs R0,CPSR
|
|
||||||
tst R0,#0x80 @Check if IRQ is enabled.
|
|
||||||
moveq R0,#1
|
|
||||||
movne R0,#0
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmGetFiqState)
|
|
||||||
mrs R0,CPSR
|
|
||||||
tst R0,#0x40 @Check if FIQ is enabled.
|
|
||||||
moveq R0,#1
|
|
||||||
movne R0,#0
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmSetDomainAccessControl)
|
|
||||||
mcr p15,0,r0,c3,c0,0
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(CPSRMaskInsert) @ on entry, r0 is the mask and r1 is the field to insert
|
|
||||||
stmfd sp!, {r4-r12, lr} @ save all the banked registers
|
|
||||||
mov r3, sp @ copy the stack pointer into a non-banked register
|
|
||||||
mrs r2, cpsr @ read the cpsr
|
|
||||||
bic r2, r2, r0 @ clear mask in the cpsr
|
|
||||||
and r1, r1, r0 @ clear bits outside the mask in the input
|
|
||||||
orr r2, r2, r1 @ set field
|
|
||||||
msr cpsr_cxsf, r2 @ write back cpsr (may have caused a mode switch)
|
|
||||||
isb
|
|
||||||
mov sp, r3 @ restore stack pointer
|
|
||||||
ldmfd sp!, {r4-r12, lr} @ restore registers
|
|
||||||
bx lr @ return (hopefully thumb-safe!)
|
|
||||||
|
|
||||||
ASM_FUNC(CPSRRead)
|
|
||||||
mrs r0, cpsr
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCpacr)
|
|
||||||
mrc p15, 0, r0, c1, c0, 2
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCpacr)
|
|
||||||
mcr p15, 0, r0, c1, c0, 2
|
|
||||||
isb
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteAuxCr)
|
|
||||||
mcr p15, 0, r0, c1, c0, 1
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadAuxCr)
|
|
||||||
mrc p15, 0, r0, c1, c0, 1
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmSetTTBR0)
|
|
||||||
mcr p15,0,r0,c2,c0,0
|
|
||||||
isb
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmSetTTBCR)
|
|
||||||
mcr p15, 0, r0, c2, c0, 2
|
|
||||||
isb
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmGetTTBR0BaseAddress)
|
|
||||||
mrc p15,0,r0,c2,c0,0
|
|
||||||
MOV32 (r1, 0xFFFFC000)
|
|
||||||
and r0, r0, r1
|
|
||||||
isb
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
//
|
|
||||||
//VOID
|
|
||||||
//ArmUpdateTranslationTableEntry (
|
|
||||||
// IN VOID *TranslationTableEntry // R0
|
|
||||||
// IN VOID *MVA // R1
|
|
||||||
// );
|
|
||||||
ASM_FUNC(ArmUpdateTranslationTableEntry)
|
|
||||||
mcr p15,0,R1,c8,c7,1 @ TLBIMVA TLB Invalidate MVA
|
|
||||||
mcr p15,0,R9,c7,c5,6 @ BPIALL Invalidate Branch predictor array. R9 == NoOp
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmInvalidateTlb)
|
|
||||||
mov r0,#0
|
|
||||||
mcr p15,0,r0,c8,c7,0
|
|
||||||
mcr p15,0,R9,c7,c5,6 @ BPIALL Invalidate Branch predictor array. R9 == NoOp
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadHVBar)
|
|
||||||
mrc p15, 4, r0, c12, c0, 0
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteHVBar)
|
|
||||||
mcr p15, 4, r0, c12, c0, 0
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmCallWFE)
|
|
||||||
wfe
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmCallSEV)
|
|
||||||
sev
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadSctlr)
|
|
||||||
mrc p15, 0, r0, c1, c0, 0 @ Read SCTLR into R0 (Read control register configuration data)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteSctlr)
|
|
||||||
mcr p15, 0, r0, c1, c0, 0
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCpuActlr)
|
|
||||||
mrc p15, 0, r0, c1, c0, 1
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCpuActlr)
|
|
||||||
mcr p15, 0, r0, c1, c0, 1
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC (ArmGetPhysicalAddressBits)
|
|
||||||
mrc p15, 0, r0, c0, c1, 4 // MMFR0
|
|
||||||
and r0, r0, #0xf // VMSA [3:0]
|
|
||||||
cmp r0, #5 // >= 5 implies LPAE support
|
|
||||||
movlt r0, #32 // 32 bits if no LPAE
|
|
||||||
movge r0, #40 // 40 bits if LPAE
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
||||||
@ -1,103 +0,0 @@
|
|||||||
#------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
|
||||||
# Copyright (c) 2011-2013, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2016, Linaro Limited. All rights reserved.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <AsmMacroLib.h>
|
|
||||||
|
|
||||||
ASM_FUNC(ArmIsMpCore)
|
|
||||||
mrc p15,0,R0,c0,c0,5
|
|
||||||
// Get Multiprocessing extension (bit31) & U bit (bit30)
|
|
||||||
and R0, R0, #0xC0000000
|
|
||||||
// if (bit31 == 1) && (bit30 == 0) then the processor is part of a multiprocessor system
|
|
||||||
cmp R0, #0x80000000
|
|
||||||
moveq R0, #1
|
|
||||||
movne R0, #0
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableAsynchronousAbort)
|
|
||||||
cpsie a
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableAsynchronousAbort)
|
|
||||||
cpsid a
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableIrq)
|
|
||||||
cpsie i
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableIrq)
|
|
||||||
cpsid i
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableFiq)
|
|
||||||
cpsie f
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableFiq)
|
|
||||||
cpsid f
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableInterrupts)
|
|
||||||
cpsie if
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableInterrupts)
|
|
||||||
cpsid if
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadIdMmfr4)
|
|
||||||
mrc p15,0,r0,c0,c2,6 @ Read ID_MMFR4 Register
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
// UINTN
|
|
||||||
// ReadCCSIDR (
|
|
||||||
// IN UINT32 CSSELR
|
|
||||||
// )
|
|
||||||
ASM_FUNC(ReadCCSIDR)
|
|
||||||
mcr p15,2,r0,c0,c0,0 @ Write Cache Size Selection Register (CSSELR)
|
|
||||||
isb
|
|
||||||
mrc p15,1,r0,c0,c0,0 @ Read current CP15 Cache Size ID Register (CCSIDR)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
// UINT32
|
|
||||||
// ReadCCSIDR2 (
|
|
||||||
// IN UINT32 CSSELR
|
|
||||||
// )
|
|
||||||
ASM_FUNC(ReadCCSIDR2)
|
|
||||||
mcr p15,2,r0,c0,c0,0 @ Write Cache Size Selection Register (CSSELR)
|
|
||||||
isb
|
|
||||||
mrc p15,1,r0,c0,c0,2 @ Read current CP15 Cache Size ID Register (CCSIDR2)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
// UINT32
|
|
||||||
// ReadCLIDR (
|
|
||||||
// IN UINT32 CSSELR
|
|
||||||
// )
|
|
||||||
ASM_FUNC(ReadCLIDR)
|
|
||||||
mrc p15,1,r0,c0,c0,1 @ Read CP15 Cache Level ID Register
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadNsacr)
|
|
||||||
mrc p15, 0, r0, c1, c1, 2
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteNsacr)
|
|
||||||
mcr p15, 0, r0, c1, c1, 2
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
||||||
@ -1,92 +0,0 @@
|
|||||||
#------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2016, Linaro Limited. All rights reserved.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <AsmMacroLib.h>
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntFrq)
|
|
||||||
mrc p15, 0, r0, c14, c0, 0 @ Read CNTFRQ
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntFrq)
|
|
||||||
mcr p15, 0, r0, c14, c0, 0 @ Write to CNTFRQ
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntPct)
|
|
||||||
mrrc p15, 0, r0, r1, c14 @ Read CNTPT (Physical counter register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntkCtl)
|
|
||||||
mrc p15, 0, r0, c14, c1, 0 @ Read CNTK_CTL (Timer PL1 Control Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntkCtl)
|
|
||||||
mcr p15, 0, r0, c14, c1, 0 @ Write to CNTK_CTL (Timer PL1 Control Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntpTval)
|
|
||||||
mrc p15, 0, r0, c14, c2, 0 @ Read CNTP_TVAL (PL1 physical timer value register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntpTval)
|
|
||||||
mcr p15, 0, r0, c14, c2, 0 @ Write to CNTP_TVAL (PL1 physical timer value register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntpCtl)
|
|
||||||
mrc p15, 0, r0, c14, c2, 1 @ Read CNTP_CTL (PL1 Physical Timer Control Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntpCtl)
|
|
||||||
mcr p15, 0, r0, c14, c2, 1 @ Write to CNTP_CTL (PL1 Physical Timer Control Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntvTval)
|
|
||||||
mrc p15, 0, r0, c14, c3, 0 @ Read CNTV_TVAL (Virtual Timer Value register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntvTval)
|
|
||||||
mcr p15, 0, r0, c14, c3, 0 @ Write to CNTV_TVAL (Virtual Timer Value register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntvCtl)
|
|
||||||
mrc p15, 0, r0, c14, c3, 1 @ Read CNTV_CTL (Virtual Timer Control Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntvCtl)
|
|
||||||
mcr p15, 0, r0, c14, c3, 1 @ Write to CNTV_CTL (Virtual Timer Control Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntvCt)
|
|
||||||
mrrc p15, 1, r0, r1, c14 @ Read CNTVCT (Virtual Count Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntpCval)
|
|
||||||
mrrc p15, 2, r0, r1, c14 @ Read CNTP_CTVAL (Physical Timer Compare Value Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntpCval)
|
|
||||||
mcrr p15, 2, r0, r1, c14 @ Write to CNTP_CTVAL (Physical Timer Compare Value Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntvCval)
|
|
||||||
mrrc p15, 3, r0, r1, c14 @ Read CNTV_CTVAL (Virtual Timer Compare Value Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntvCval)
|
|
||||||
mcrr p15, 3, r0, r1, c14 @ write to CNTV_CTVAL (Virtual Timer Compare Value Register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadCntvOff)
|
|
||||||
mrrc p15, 4, r0, r1, c14 @ Read CNTVOFF (virtual Offset register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteCntvOff)
|
|
||||||
mcrr p15, 4, r0, r1, c14 @ Write to CNTVOFF (Virtual Offset register)
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
||||||
@ -1,81 +0,0 @@
|
|||||||
/** @file
|
|
||||||
|
|
||||||
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
|
||||||
Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
|
|
||||||
Copyright (c) 2021, NUVIA Inc. All rights reserved.<BR>
|
|
||||||
|
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include <Base.h>
|
|
||||||
|
|
||||||
#include <Library/ArmLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
|
|
||||||
#include <Arm/AArch32.h>
|
|
||||||
|
|
||||||
#include "ArmV7Lib.h"
|
|
||||||
#include "ArmLibPrivate.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Check whether the CPU supports the GIC system register interface (any version)
|
|
||||||
|
|
||||||
@return Whether GIC System Register Interface is supported
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
EFIAPI
|
|
||||||
ArmHasGicSystemRegisters (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return ((ArmReadIdPfr1 () & ARM_PFR1_GIC) != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Check whether the CPU supports the GICv5 system register interface
|
|
||||||
|
|
||||||
@return Whether GICv5 System Register Interface is supported
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
EFIAPI
|
|
||||||
ArmHasGicV5SystemRegisters (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// GICv5 not supported in AArch32.
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Check whether the CPU supports the Security extensions
|
|
||||||
|
|
||||||
@return Whether the Security extensions are implemented
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
EFIAPI
|
|
||||||
ArmHasSecurityExtensions (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return ((ArmReadIdPfr1 () & ARM_PFR1_SEC) != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Checks if CCIDX is implemented.
|
|
||||||
|
|
||||||
@retval TRUE CCIDX is implemented.
|
|
||||||
@retval FALSE CCIDX is not implemented.
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
EFIAPI
|
|
||||||
ArmHasCcidx (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINTN Mmfr4;
|
|
||||||
|
|
||||||
Mmfr4 = ArmReadIdMmfr4 ();
|
|
||||||
return (((Mmfr4 >> 24) & 0xF) == 1) ? TRUE : FALSE;
|
|
||||||
}
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
/** @file
|
|
||||||
|
|
||||||
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
|
||||||
|
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#ifndef ARM_V7_LIB_H_
|
|
||||||
#define ARM_V7_LIB_H_
|
|
||||||
|
|
||||||
#define ID_MMFR0_SHARELVL_SHIFT 12
|
|
||||||
#define ID_MMFR0_SHARELVL_MASK 0xf
|
|
||||||
#define ID_MMFR0_SHARELVL_ONE 0
|
|
||||||
#define ID_MMFR0_SHARELVL_TWO 1
|
|
||||||
|
|
||||||
#define ID_MMFR0_INNERSHR_SHIFT 28
|
|
||||||
#define ID_MMFR0_INNERSHR_MASK 0xf
|
|
||||||
#define ID_MMFR0_OUTERSHR_SHIFT 8
|
|
||||||
#define ID_MMFR0_OUTERSHR_MASK 0xf
|
|
||||||
|
|
||||||
#define ID_MMFR0_SHR_IMP_UNCACHED 0
|
|
||||||
#define ID_MMFR0_SHR_IMP_HW_COHERENT 1
|
|
||||||
#define ID_MMFR0_SHR_IGNORED 0xf
|
|
||||||
|
|
||||||
/** Reads the ID_MMFR4 register.
|
|
||||||
|
|
||||||
@return The contents of the ID_MMFR4 register.
|
|
||||||
**/
|
|
||||||
UINT32
|
|
||||||
EFIAPI
|
|
||||||
ArmReadIdMmfr4 (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
UINTN
|
|
||||||
EFIAPI
|
|
||||||
ArmReadIdPfr1 (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif // ARM_V7_LIB_H_
|
|
||||||
@ -1,236 +0,0 @@
|
|||||||
#------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
|
|
||||||
# Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
|
|
||||||
# Copyright (c) 2016, Linaro Limited. All rights reserved.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <AsmMacroLib.h>
|
|
||||||
|
|
||||||
.set DC_ON, (0x1<<2)
|
|
||||||
.set IC_ON, (0x1<<12)
|
|
||||||
.set CTRL_M_BIT, (1 << 0)
|
|
||||||
.set CTRL_C_BIT, (1 << 2)
|
|
||||||
.set CTRL_B_BIT, (1 << 7)
|
|
||||||
.set CTRL_I_BIT, (1 << 12)
|
|
||||||
.set CTRL_AFE_BIT,(1 << 29)
|
|
||||||
|
|
||||||
|
|
||||||
ASM_FUNC(ArmInvalidateDataCacheEntryByMVA)
|
|
||||||
mcr p15, 0, r0, c7, c6, 1 @invalidate single data cache line
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmCleanDataCacheEntryByMVA)
|
|
||||||
mcr p15, 0, r0, c7, c10, 1 @clean single data cache line
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
|
|
||||||
ASM_FUNC(ArmCleanDataCacheEntryToPoUByMVA)
|
|
||||||
mcr p15, 0, r0, c7, c11, 1 @clean single data cache line to PoU
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmInvalidateInstructionCacheEntryToPoUByMVA)
|
|
||||||
mcr p15, 0, r0, c7, c5, 1 @Invalidate single instruction cache line to PoU
|
|
||||||
mcr p15, 0, r0, c7, c5, 7 @Invalidate branch predictor
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmCleanInvalidateDataCacheEntryByMVA)
|
|
||||||
mcr p15, 0, r0, c7, c14, 1 @clean and invalidate single data cache line
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
|
|
||||||
ASM_FUNC(ArmInvalidateInstructionCache)
|
|
||||||
mcr p15,0,R0,c7,c5,0 @Invalidate entire instruction cache
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableMmu)
|
|
||||||
mrc p15,0,R0,c1,c0,0
|
|
||||||
orr R0,R0,#1
|
|
||||||
orr R0,R0,#CTRL_AFE_BIT
|
|
||||||
mcr p15,0,R0,c1,c0,0
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableMmu)
|
|
||||||
mrc p15,0,R0,c1,c0,0
|
|
||||||
bic R0,R0,#1
|
|
||||||
mcr p15,0,R0,c1,c0,0 @Disable MMU
|
|
||||||
|
|
||||||
mcr p15,0,R0,c8,c7,0 @Invalidate TLB
|
|
||||||
mcr p15,0,R0,c7,c5,6 @Invalidate Branch predictor array
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableCachesAndMmu)
|
|
||||||
mrc p15, 0, r0, c1, c0, 0 @ Get control register
|
|
||||||
bic r0, r0, #CTRL_M_BIT @ Disable MMU
|
|
||||||
bic r0, r0, #CTRL_C_BIT @ Disable D Cache
|
|
||||||
bic r0, r0, #CTRL_I_BIT @ Disable I Cache
|
|
||||||
mcr p15, 0, r0, c1, c0, 0 @ Write control register
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmMmuEnabled)
|
|
||||||
mrc p15,0,R0,c1,c0,0
|
|
||||||
and R0,R0,#1
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableDataCache)
|
|
||||||
ldr R1,=DC_ON
|
|
||||||
mrc p15,0,R0,c1,c0,0 @Read control register configuration data
|
|
||||||
orr R0,R0,R1 @Set C bit
|
|
||||||
mcr p15,0,r0,c1,c0,0 @Write control register configuration data
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableDataCache)
|
|
||||||
ldr R1,=DC_ON
|
|
||||||
mrc p15,0,R0,c1,c0,0 @Read control register configuration data
|
|
||||||
bic R0,R0,R1 @Clear C bit
|
|
||||||
mcr p15,0,r0,c1,c0,0 @Write control register configuration data
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableInstructionCache)
|
|
||||||
ldr R1,=IC_ON
|
|
||||||
mrc p15,0,R0,c1,c0,0 @Read control register configuration data
|
|
||||||
orr R0,R0,R1 @Set I bit
|
|
||||||
mcr p15,0,r0,c1,c0,0 @Write control register configuration data
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableInstructionCache)
|
|
||||||
ldr R1,=IC_ON
|
|
||||||
mrc p15,0,R0,c1,c0,0 @Read control register configuration data
|
|
||||||
bic R0,R0,R1 @Clear I bit.
|
|
||||||
mcr p15,0,r0,c1,c0,0 @Write control register configuration data
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableSWPInstruction)
|
|
||||||
mrc p15, 0, r0, c1, c0, 0
|
|
||||||
orr r0, r0, #0x00000400
|
|
||||||
mcr p15, 0, r0, c1, c0, 0
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableBranchPrediction)
|
|
||||||
mrc p15, 0, r0, c1, c0, 0
|
|
||||||
orr r0, r0, #0x00000800
|
|
||||||
mcr p15, 0, r0, c1, c0, 0
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDisableBranchPrediction)
|
|
||||||
mrc p15, 0, r0, c1, c0, 0
|
|
||||||
bic r0, r0, #0x00000800
|
|
||||||
mcr p15, 0, r0, c1, c0, 0
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmSetLowVectors)
|
|
||||||
mrc p15, 0, r0, c1, c0, 0 @ Read SCTLR into R0 (Read control register configuration data)
|
|
||||||
bic r0, r0, #0x00002000 @ clear V bit
|
|
||||||
mcr p15, 0, r0, c1, c0, 0 @ Write R0 into SCTLR (Write control register configuration data)
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmSetHighVectors)
|
|
||||||
mrc p15, 0, r0, c1, c0, 0 @ Read SCTLR into R0 (Read control register configuration data)
|
|
||||||
orr r0, r0, #0x00002000 @ Set V bit
|
|
||||||
mcr p15, 0, r0, c1, c0, 0 @ Write R0 into SCTLR (Write control register configuration data)
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDataMemoryBarrier)
|
|
||||||
dmb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmDataSynchronizationBarrier)
|
|
||||||
dsb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmInstructionSynchronizationBarrier)
|
|
||||||
isb
|
|
||||||
bx LR
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadVBar)
|
|
||||||
# Set the Address of the Vector Table in the VBAR register
|
|
||||||
mrc p15, 0, r0, c12, c0, 0
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteVBar)
|
|
||||||
# Set the Address of the Vector Table in the VBAR register
|
|
||||||
mcr p15, 0, r0, c12, c0, 0
|
|
||||||
# Ensure the SCTLR.V bit is clear
|
|
||||||
mrc p15, 0, r0, c1, c0, 0 @ Read SCTLR into R0 (Read control register configuration data)
|
|
||||||
bic r0, r0, #0x00002000 @ clear V bit
|
|
||||||
mcr p15, 0, r0, c1, c0, 0 @ Write R0 into SCTLR (Write control register configuration data)
|
|
||||||
isb
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmEnableVFP)
|
|
||||||
# Read CPACR (Coprocessor Access Control Register)
|
|
||||||
mrc p15, 0, r0, c1, c0, 2
|
|
||||||
# Enable VPF access (Full Access to CP10, CP11) (V* instructions)
|
|
||||||
orr r0, r0, #0x00f00000
|
|
||||||
# Write back CPACR (Coprocessor Access Control Register)
|
|
||||||
mcr p15, 0, r0, c1, c0, 2
|
|
||||||
isb
|
|
||||||
# Set EN bit in FPEXC. The Advanced SIMD and VFP extensions are enabled and operate normally.
|
|
||||||
mov r0, #0x40000000
|
|
||||||
#ifndef __clang__
|
|
||||||
mcr p10,#0x7,r0,c8,c0,#0
|
|
||||||
#else
|
|
||||||
# Set the FPU model so Clang does not choke on the next instruction
|
|
||||||
.fpu neon
|
|
||||||
vmsr fpexc, r0
|
|
||||||
#endif
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmCallWFI)
|
|
||||||
wfi
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
#Note: Return 0 in Uniprocessor implementation
|
|
||||||
ASM_FUNC(ArmReadCbar)
|
|
||||||
mrc p15, 4, r0, c15, c0, 0 @ Read Configuration Base Address Register
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadMpidr)
|
|
||||||
mrc p15, 0, r0, c0, c0, 5 @ read MPIDR
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadTpidrurw)
|
|
||||||
mrc p15, 0, r0, c13, c0, 2 @ read TPIDRURW
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmWriteTpidrurw)
|
|
||||||
mcr p15, 0, r0, c13, c0, 2 @ write TPIDRURW
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmIsArchTimerImplemented)
|
|
||||||
mrc p15, 0, r0, c0, c1, 1 @ Read ID_PFR1
|
|
||||||
and r0, r0, #0x000F0000
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNC(ArmReadIdPfr1)
|
|
||||||
mrc p15, 0, r0, c0, c1, 1 @ Read ID_PFR1 Register
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
|
|
||||||
@ -21,15 +21,6 @@
|
|||||||
ArmLibPrivate.h
|
ArmLibPrivate.h
|
||||||
ArmLib.c
|
ArmLib.c
|
||||||
|
|
||||||
[Sources.ARM]
|
|
||||||
Arm/ArmV7Lib.h
|
|
||||||
Arm/ArmV7Lib.c
|
|
||||||
|
|
||||||
Arm/ArmLibSupport.S | GCC
|
|
||||||
Arm/ArmLibSupportV7.S | GCC
|
|
||||||
Arm/ArmV7Support.S | GCC
|
|
||||||
Arm/ArmV7ArchTimerSupport.S | GCC
|
|
||||||
|
|
||||||
[Sources.AARCH64]
|
[Sources.AARCH64]
|
||||||
AArch64/AArch64Lib.h
|
AArch64/AArch64Lib.h
|
||||||
AArch64/AArch64Lib.c
|
AArch64/AArch64Lib.c
|
||||||
|
|||||||
Reference in New Issue
Block a user