diff --git a/ArmPkg/Include/Library/ArmLib.h b/ArmPkg/Include/Library/ArmLib.h
index 50cd50212f..f34ab42ced 100644
--- a/ArmPkg/Include/Library/ArmLib.h
+++ b/ArmPkg/Include/Library/ArmLib.h
@@ -443,6 +443,12 @@ ArmSetAuxCrBit (
IN UINT32 Bits
);
+VOID
+EFIAPI
+ArmUnsetAuxCrBit (
+ IN UINT32 Bits
+ );
+
VOID
EFIAPI
ArmCallSEV (
@@ -455,6 +461,8 @@ ArmCallWFE (
VOID
);
+VOID
+EFIAPI
ArmCallWFI (
VOID
);
@@ -465,9 +473,15 @@ ArmReadMpidr (
VOID
);
+UINT32
+EFIAPI
+ArmReadCpacr (
+ VOID
+ );
+
VOID
EFIAPI
-ArmWriteCPACR (
+ArmWriteCpacr (
IN UINT32 Access
);
@@ -477,22 +491,46 @@ ArmEnableVFP (
VOID
);
+UINT32
+EFIAPI
+ArmReadNsacr (
+ VOID
+ );
+
VOID
EFIAPI
ArmWriteNsacr (
IN UINT32 SetWayFormat
);
+UINT32
+EFIAPI
+ArmReadScr (
+ VOID
+ );
+
VOID
EFIAPI
ArmWriteScr (
IN UINT32 SetWayFormat
);
+UINT32
+EFIAPI
+ArmReadMVBar (
+ VOID
+ );
+
VOID
EFIAPI
-ArmWriteVMBar (
+ArmWriteMVBar (
IN UINT32 VectorMonitorBase
);
+UINT32
+EFIAPI
+ArmReadSctlr (
+ VOID
+ );
+
#endif // __ARM_LIB__
diff --git a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
index 5ac3552403..910e50e401 100644
--- a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
+++ b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.S
@@ -42,6 +42,7 @@ GCC_ASM_EXPORT (ArmV7PerformPoUDataCacheOperation)
GCC_ASM_EXPORT (ArmDataMemoryBarrier)
GCC_ASM_EXPORT (ArmDataSyncronizationBarrier)
GCC_ASM_EXPORT (ArmInstructionSynchronizationBarrier)
+GCC_ASM_EXPORT (ArmReadVBar)
GCC_ASM_EXPORT (ArmWriteVBar)
GCC_ASM_EXPORT (ArmEnableVFP)
GCC_ASM_EXPORT (ArmCallWFI)
@@ -330,6 +331,11 @@ ASM_PFX(ArmInstructionSynchronizationBarrier):
isb
bx LR
+ASM_PFX(ArmReadVBar):
+ # Set the Address of the Vector Table in the VBAR register
+ mrc p15, 0, r0, c12, c0, 0
+ bx lr
+
ASM_PFX(ArmWriteVBar):
# Set the Address of the Vector Table in the VBAR register
mcr p15, 0, r0, c12, c0, 0
diff --git a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
index 8fedcdba97..8035400599 100644
--- a/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
+++ b/ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
@@ -39,6 +39,7 @@
EXPORT ArmDataMemoryBarrier
EXPORT ArmDataSyncronizationBarrier
EXPORT ArmInstructionSynchronizationBarrier
+ EXPORT ArmReadVBar
EXPORT ArmWriteVBar
EXPORT ArmEnableVFP
EXPORT ArmCallWFI
@@ -324,6 +325,11 @@ ArmInstructionSynchronizationBarrier
isb
bx LR
+ArmReadVBar
+ // Set the Address of the Vector Table in the VBAR register
+ mrc p15, 0, r0, c12, c0, 0
+ bx lr
+
ArmWriteVBar
// Set the Address of the Vector Table in the VBAR register
mcr p15, 0, r0, c12, c0, 0
diff --git a/ArmPkg/Library/ArmLib/Common/ArmLib.c b/ArmPkg/Library/ArmLib/Common/ArmLib.c
index ae1b785608..a7b9551ba1 100644
--- a/ArmPkg/Library/ArmLib/Common/ArmLib.c
+++ b/ArmPkg/Library/ArmLib/Common/ArmLib.c
@@ -1,6 +1,7 @@
/** @file
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
+ Copyright (c) 2011 - 2012, ARM Ltd. All rights reserved.
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -70,3 +71,13 @@ ArmSetAuxCrBit (
ArmWriteAuxCr(val);
}
+VOID
+EFIAPI
+ArmUnsetAuxCrBit (
+ IN UINT32 Bits
+ )
+{
+ UINT32 val = ArmReadAuxCr();
+ val &= ~Bits;
+ ArmWriteAuxCr(val);
+}
diff --git a/ArmPkg/Library/ArmLib/Common/ArmLibSupport.S b/ArmPkg/Library/ArmLib/Common/ArmLibSupport.S
index da927b9d43..b19185412c 100644
--- a/ArmPkg/Library/ArmLib/Common/ArmLibSupport.S
+++ b/ArmPkg/Library/ArmLib/Common/ArmLibSupport.S
@@ -32,16 +32,21 @@ GCC_ASM_EXPORT(ArmSetTTBR0)
GCC_ASM_EXPORT(ArmSetDomainAccessControl)
GCC_ASM_EXPORT(CPSRMaskInsert)
GCC_ASM_EXPORT(CPSRRead)
-GCC_ASM_EXPORT(ArmWriteCPACR)
+GCC_ASM_EXPORT(ArmReadCpacr)
+GCC_ASM_EXPORT(ArmWriteCpacr)
GCC_ASM_EXPORT(ArmWriteAuxCr)
GCC_ASM_EXPORT(ArmReadAuxCr)
GCC_ASM_EXPORT(ArmInvalidateTlb)
GCC_ASM_EXPORT(ArmUpdateTranslationTableEntry)
+GCC_ASM_EXPORT(ArmReadNsacr)
GCC_ASM_EXPORT(ArmWriteNsacr)
+GCC_ASM_EXPORT(ArmReadScr)
GCC_ASM_EXPORT(ArmWriteScr)
-GCC_ASM_EXPORT(ArmWriteVMBar)
+GCC_ASM_EXPORT(ArmReadMVBar)
+GCC_ASM_EXPORT(ArmWriteMVBar)
GCC_ASM_EXPORT(ArmCallWFE)
GCC_ASM_EXPORT(ArmCallSEV)
+GCC_ASM_EXPORT(ArmReadSctlr)
#------------------------------------------------------------------------------
@@ -88,7 +93,11 @@ ASM_PFX(CPSRRead):
mrs r0, cpsr
bx lr
-ASM_PFX(ArmWriteCPACR):
+ASM_PFX(ArmReadCpacr):
+ mrc p15, 0, r0, c1, c0, 2
+ bx lr
+
+ASM_PFX(ArmWriteCpacr):
mcr p15, 0, r0, c1, c0, 2
isb
bx lr
@@ -136,15 +145,27 @@ ASM_PFX(ArmInvalidateTlb):
isb
bx lr
+ASM_PFX(ArmReadNsacr):
+ mrc p15, 0, r0, c1, c1, 2
+ bx lr
+
ASM_PFX(ArmWriteNsacr):
mcr p15, 0, r0, c1, c1, 2
bx lr
+ASM_PFX(ArmReadScr):
+ mrc p15, 0, r0, c1, c1, 0
+ bx lr
+
ASM_PFX(ArmWriteScr):
mcr p15, 0, r0, c1, c1, 0
bx lr
-ASM_PFX(ArmWriteVMBar):
+ASM_PFX(ArmReadMVBar):
+ mrc p15, 0, r0, c12, c0, 1
+ bx lr
+
+ASM_PFX(ArmWriteMVBar):
mcr p15, 0, r0, c12, c0, 1
bx lr
@@ -156,4 +177,8 @@ ASM_PFX(ArmCallSEV):
sev
bx lr
+ASM_PFX(ArmReadSctlr):
+ mrc p15, 0, R0, c1, c0, 0 @ Read SCTLR into R0 (Read control register configuration data)
+ bx lr
+
ASM_FUNCTION_REMOVE_IF_UNREFERENCED
diff --git a/ArmPkg/Library/ArmLib/Common/ArmLibSupport.asm b/ArmPkg/Library/ArmLib/Common/ArmLibSupport.asm
index 186ee33dfa..fd0f332bd6 100644
--- a/ArmPkg/Library/ArmLib/Common/ArmLibSupport.asm
+++ b/ArmPkg/Library/ArmLib/Common/ArmLibSupport.asm
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
-// Copyright (c) 2011, ARM Limited. All rights reserved.
+// Copyright (c) 2011-2012, 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
@@ -32,16 +32,21 @@
EXPORT ArmSetDomainAccessControl
EXPORT CPSRMaskInsert
EXPORT CPSRRead
- EXPORT ArmWriteCPACR
+ EXPORT ArmReadCpacr
+ EXPORT ArmWriteCpacr
EXPORT ArmWriteAuxCr
EXPORT ArmReadAuxCr
EXPORT ArmInvalidateTlb
EXPORT ArmUpdateTranslationTableEntry
+ EXPORT ArmReadNsacr
EXPORT ArmWriteNsacr
+ EXPORT ArmReadScr
EXPORT ArmWriteScr
- EXPORT ArmWriteVMBar
+ EXPORT ArmReadMVBar
+ EXPORT ArmWriteMVBar
EXPORT ArmCallWFE
EXPORT ArmCallSEV
+ EXPORT ArmReadSctlr
AREA ArmLibSupport, CODE, READONLY
@@ -88,7 +93,11 @@ CPSRRead
mrs r0, cpsr
bx lr
-ArmWriteCPACR
+ArmReadCpacr
+ mrc p15, 0, r0, c1, c0, 2
+ bx lr
+
+ArmWriteCpacr
mcr p15, 0, r0, c1, c0, 2
isb
bx lr
@@ -136,15 +145,27 @@ ArmInvalidateTlb
isb
bx lr
+ArmReadNsacr
+ mrc p15, 0, r0, c1, c1, 2
+ bx lr
+
ArmWriteNsacr
mcr p15, 0, r0, c1, c1, 2
bx lr
+ArmReadScr
+ mrc p15, 0, r0, c1, c1, 0
+ bx lr
+
ArmWriteScr
mcr p15, 0, r0, c1, c1, 0
bx lr
-ArmWriteVMBar
+ArmReadMVBar
+ mrc p15, 0, r0, c12, c0, 1
+ bx lr
+
+ArmWriteMVBar
mcr p15, 0, r0, c12, c0, 1
bx lr
@@ -156,4 +177,8 @@ ArmCallSEV
sev
blx lr
+ArmReadSctlr
+ mrc p15, 0, R0, c1, c0, 0 // Read SCTLR into R0 (Read control register configuration data)
+ bx lr
+
END
diff --git a/ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/ArmTrustedMonitorLibNull.c b/ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/ArmTrustedMonitorLibNull.c
index b6eff6ee9d..6d3250e3a5 100644
--- a/ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/ArmTrustedMonitorLibNull.c
+++ b/ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/ArmTrustedMonitorLibNull.c
@@ -1,7 +1,7 @@
/** @file
* Main file supporting the Monitor World on ARM PLatforms
*
-* Copyright (c) 2011, ARM Limited. All rights reserved.
+* Copyright (c) 2011-2012, 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
@@ -33,5 +33,5 @@ ArmSecureMonitorWorldInitialize (
ASSERT (IS_ALIGNED(MonitorVectorTable, BIT5));
// Write the Monitor Mode Vector Table Address
- ArmWriteVMBar ((UINT32) &MonitorVectorTable);
+ ArmWriteMVBar ((UINT32) &MonitorVectorTable);
}
diff --git a/ArmPlatformPkg/Sec/Sec.c b/ArmPlatformPkg/Sec/Sec.c
index a8de52fcc2..00293f0d00 100644
--- a/ArmPlatformPkg/Sec/Sec.c
+++ b/ArmPlatformPkg/Sec/Sec.c
@@ -91,7 +91,7 @@ CEntryPoint (
}
// Enable Full Access to CoProcessors
- ArmWriteCPACR (CPACR_CP_FULL_ACCESS);
+ ArmWriteCpacr (CPACR_CP_FULL_ACCESS);
if (IS_PRIMARY_CORE(MpId)) {
// Initialize peripherals that must be done at the early stage