# - BIT9 : SIF - Secure Instruction Fetch\r
# 0x31 = NS | EA | FW\r
gArmTokenSpaceGuid.PcdArmScr|0x31|UINT32|0x00000038\r
- \r
- # Non Secure Access Control Register\r
- # - BIT15 : NSASEDIS - Disable Non-secure Advanced SIMD functionality\r
- # - BIT14 : NSD32DIS - Disable Non-secure use of D16-D31 \r
- # - BIT11 : cp11 - Non-secure access to coprocessor 11 enable\r
- # - BIT10 : cp10 - Non-secure access to coprocessor 10 enable\r
- # 0xC00 = cp10 | cp11\r
- gArmTokenSpaceGuid.PcdArmNsacr|0xC00|UINT32|0x00000039\r
- \r
+\r
# System Memory (DRAM): These PCDs define the region of in-built system memory\r
# Some platforms can get DRAM extensions, these additional regions will be declared\r
# to UEFI by ArmPLatformPlib \r
# The FDT blob must be loaded at a 64bit aligned address.\r
gArmTokenSpaceGuid.PcdArmLinuxFdtAlignment|0x8|UINT32|0x00000026\r
\r
+ # Non Secure Access Control Register\r
+ # - BIT15 : NSASEDIS - Disable Non-secure Advanced SIMD functionality\r
+ # - BIT14 : NSD32DIS - Disable Non-secure use of D16-D31\r
+ # - BIT11 : cp11 - Non-secure access to coprocessor 11 enable\r
+ # - BIT10 : cp10 - Non-secure access to coprocessor 10 enable\r
+ # 0xC00 = cp10 | cp11\r
+ gArmTokenSpaceGuid.PcdArmNsacr|0xC00|UINT32|0x00000039\r
+\r
[PcdsFixedAtBuild.AARCH64]\r
# By default we do transition to EL2 non-secure mode with Stack for EL2.\r
# Mode Description Bits\r
// ID_AA64PFR0 - AArch64 Processor Feature Register 0 definitions\r
#define AARCH64_PFR0_FP (0xF << 16)\r
\r
-// NSACR - Non-Secure Access Control Register definitions\r
-#define NSACR_CP(cp) ((1 << (cp)) & 0x3FFF)\r
-#define NSACR_NSD32DIS (1 << 14)\r
-#define NSACR_NSASEDIS (1 << 15)\r
-#define NSACR_PLE (1 << 16)\r
-#define NSACR_TL (1 << 17)\r
-#define NSACR_NS_SMP (1 << 18)\r
-#define NSACR_RFR (1 << 19)\r
-\r
// SCR - Secure Configuration Register definitions\r
#define SCR_NS (1 << 0)\r
#define SCR_IRQ (1 << 1)\r
IN UINT64 GcdAttributes\r
);\r
\r
+UINTN\r
+ArmWriteCptr (\r
+ IN UINT64 Cptr\r
+ );\r
+\r
#endif // __AARCH64_H__\r
ArmReadIdPfr1 (\r
VOID\r
);\r
- \r
+\r
+UINT32\r
+EFIAPI\r
+ArmReadNsacr (\r
+ VOID\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+ArmWriteNsacr (\r
+ IN UINT32 Nsacr\r
+ );\r
+\r
#endif // __ARM_V7_H__\r
VOID\r
);\r
\r
-UINT32\r
-EFIAPI\r
-ArmReadNsacr (\r
- VOID\r
- );\r
-\r
-VOID\r
-EFIAPI\r
-ArmWriteNsacr (\r
- IN UINT32 SetWayFormat\r
- );\r
-\r
UINT32\r
EFIAPI\r
ArmReadScr (\r
#------------------------------------------------------------------------------ \r
#\r
# Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-# Copyright (c) 2011, ARM Limited. All rights reserved.\r
+# Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
#\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
GCC_ASM_EXPORT(ArmDisableInterrupts)\r
GCC_ASM_EXPORT(ReadCCSIDR)\r
GCC_ASM_EXPORT(ReadCLIDR)\r
+GCC_ASM_EXPORT(ArmReadNsacr)\r
+GCC_ASM_EXPORT(ArmWriteNsacr)\r
\r
#------------------------------------------------------------------------------\r
\r
mrc p15,1,r0,c0,c0,1 @ Read CP15 Cache Level ID Register\r
bx lr\r
\r
+ASM_PFX(ArmReadNsacr):\r
+ mrc p15, 0, r0, c1, c1, 2\r
+ bx lr\r
+\r
+ASM_PFX(ArmWriteNsacr):\r
+ mcr p15, 0, r0, c1, c1, 2\r
+ bx lr\r
+\r
ASM_FUNCTION_REMOVE_IF_UNREFERENCED\r
//------------------------------------------------------------------------------ \r
//\r
// Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>\r
-// Copyright (c) 2011, ARM Limited. All rights reserved.\r
+// Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
//\r
// This program and the accompanying materials\r
// are licensed and made available under the terms and conditions of the BSD License\r
EXPORT ArmDisableInterrupts\r
EXPORT ReadCCSIDR\r
EXPORT ReadCLIDR\r
- \r
+ EXPORT ArmReadNsacr\r
+ EXPORT ArmWriteNsacr\r
+\r
AREA ArmLibSupportV7, CODE, READONLY\r
\r
\r
ReadCLIDR\r
mrc p15,1,r0,c0,c0,1 ; Read CP15 Cache Level ID Register\r
bx lr\r
- \r
+\r
+ArmReadNsacr\r
+ mrc p15, 0, r0, c1, c1, 2\r
+ bx lr\r
+\r
+ArmWriteNsacr\r
+ mcr p15, 0, r0, c1, c1, 2\r
+ bx lr\r
+\r
END\r
GCC_ASM_EXPORT (ArmReadAuxCr)\r
GCC_ASM_EXPORT (ArmInvalidateTlb)\r
GCC_ASM_EXPORT (ArmUpdateTranslationTableEntry)\r
-GCC_ASM_EXPORT (ArmWriteNsacr)\r
+GCC_ASM_EXPORT (ArmWriteCptr)\r
GCC_ASM_EXPORT (ArmWriteScr)\r
GCC_ASM_EXPORT (ArmWriteMVBar)\r
GCC_ASM_EXPORT (ArmCallWFE)\r
isb\r
ret\r
\r
-ASM_PFX(ArmWriteNsacr):\r
+ASM_PFX(ArmWriteCptr):\r
msr cptr_el3, x0 // EL3 Coprocessor Trap Reg (CPTR)\r
- ret // Non-Secure Access Control Reg (NSACR) in ARMv7\r
+ ret\r
\r
ASM_PFX(ArmWriteScr):\r
msr scr_el3, x0 // Secure configuration register EL3\r
GCC_ASM_EXPORT(ArmReadAuxCr)\r
GCC_ASM_EXPORT(ArmInvalidateTlb)\r
GCC_ASM_EXPORT(ArmUpdateTranslationTableEntry)\r
-GCC_ASM_EXPORT(ArmReadNsacr)\r
-GCC_ASM_EXPORT(ArmWriteNsacr)\r
GCC_ASM_EXPORT(ArmReadScr)\r
GCC_ASM_EXPORT(ArmWriteScr)\r
GCC_ASM_EXPORT(ArmReadMVBar)\r
isb\r
bx lr\r
\r
-ASM_PFX(ArmReadNsacr):\r
- mrc p15, 0, r0, c1, c1, 2\r
- bx lr\r
-\r
-ASM_PFX(ArmWriteNsacr):\r
- mcr p15, 0, r0, c1, c1, 2\r
- bx lr\r
-\r
ASM_PFX(ArmReadScr):\r
mrc p15, 0, r0, c1, c1, 0\r
bx lr\r
EXPORT ArmReadAuxCr\r
EXPORT ArmInvalidateTlb\r
EXPORT ArmUpdateTranslationTableEntry\r
- EXPORT ArmReadNsacr\r
- EXPORT ArmWriteNsacr\r
EXPORT ArmReadScr\r
EXPORT ArmWriteScr\r
EXPORT ArmReadMVBar\r
isb\r
bx lr\r
\r
-ArmReadNsacr\r
- mrc p15, 0, r0, c1, c1, 2\r
- bx lr\r
-\r
-ArmWriteNsacr\r
- mcr p15, 0, r0, c1, c1, 2\r
- bx lr\r
-\r
ArmReadScr\r
mrc p15, 0, r0, c1, c1, 0\r
bx lr\r
--- /dev/null
+/** @file\r
+*\r
+* Copyright (c) 2013, ARM Limited. All rights reserved.\r
+*\r
+* This program and the accompanying materials\r
+* are licensed and made available under the terms and conditions of the BSD License\r
+* which accompanies this distribution. The full text of the license may be found at\r
+* http://opensource.org/licenses/bsd-license.php\r
+*\r
+* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+*\r
+**/\r
+\r
+#include <Chipset/AArch64.h>\r
+\r
+VOID\r
+EFIAPI\r
+ArmSecArchTrustzoneInit (\r
+ VOID\r
+ )\r
+{\r
+ // Do not trap any access to Floating Point and Advanced SIMD in EL3.\r
+ ArmWriteCptr (0);\r
+}\r
--- /dev/null
+/** @file\r
+*\r
+* Copyright (c) 2013, ARM Limited. All rights reserved.\r
+*\r
+* This program and the accompanying materials\r
+* are licensed and made available under the terms and conditions of the BSD License\r
+* which accompanies this distribution. The full text of the license may be found at\r
+* http://opensource.org/licenses/bsd-license.php\r
+*\r
+* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+*\r
+**/\r
+\r
+#include <Chipset/ArmV7.h>\r
+\r
+VOID\r
+EFIAPI\r
+ArmSecArchTrustzoneInit (\r
+ VOID\r
+ )\r
+{\r
+ // Write to CP15 Non-secure Access Control Register\r
+ ArmWriteNsacr (PcdGet32 (PcdArmNsacr));\r
+}\r
JumpAddress = PcdGet32 (PcdFvBaseAddress);\r
ArmPlatformSecExtraAction (MpId, &JumpAddress);\r
\r
- // Write to CP15 Non-secure Access Control Register\r
- ArmWriteNsacr (PcdGet32 (PcdArmNsacr));\r
+ // Initialize architecture specific security policy\r
+ ArmSecArchTrustzoneInit ();\r
\r
// CP15 Secure Configuration Register\r
ArmWriteScr (PcdGet32 (PcdArmScr));\r
Sec.c\r
\r
[Sources.ARM]\r
+ Arm/Arch.c\r
Arm/Helper.asm | RVCT\r
Arm/Helper.S | GCC\r
Arm/SecEntryPoint.S | GCC\r
Arm/SecEntryPoint.asm | RVCT\r
\r
[Sources.AARCH64]\r
+ AArch64/Arch.c\r
AArch64/Helper.S | GCC\r
AArch64/SecEntryPoint.S | GCC\r
\r
[FeaturePcd]\r
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec\r
\r
-[FixedPcd]\r
+[FixedPcd.common]\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString\r
\r
gArmTokenSpaceGuid.PcdTrustzoneSupport\r
gArmTokenSpaceGuid.PcdVFPEnabled\r
\r
gArmTokenSpaceGuid.PcdArmScr\r
- gArmTokenSpaceGuid.PcdArmNsacr\r
gArmTokenSpaceGuid.PcdArmNonSecModeTransition\r
\r
gArmTokenSpaceGuid.PcdSecureFvBaseAddress\r
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase\r
\r
gArmPlatformTokenSpaceGuid.PcdSecGlobalVariableSize \r
+\r
+[FixedPcd.ARM]\r
+ gArmTokenSpaceGuid.PcdArmNsacr\r
IN UINTN LR\r
);\r
\r
+VOID\r
+EFIAPI\r
+ArmSecArchTrustzoneInit (\r
+ VOID\r
+ );\r
+\r
#endif\r