--- /dev/null
+/** @file\r
+\r
+ Copyright (c) 2020 - 2021, NUVIA Inc. All rights reserved.<BR>\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef ARM_CACHE_H_\r
+#define ARM_CACHE_H_\r
+\r
+#include <Uefi/UefiBaseType.h>\r
+\r
+// The ARM Architecture Reference Manual for ARMv8-A defines up\r
+// to 7 levels of cache, L1 through L7.\r
+#define MAX_ARM_CACHE_LEVEL 7\r
+\r
+/// Defines the structure of the CSSELR (Cache Size Selection) register\r
+typedef union {\r
+ struct {\r
+ UINT32 InD :1; ///< Instruction not Data bit\r
+ UINT32 Level :3; ///< Cache level (zero based)\r
+ UINT32 TnD :1; ///< Allocation not Data bit\r
+ UINT32 Reserved :27; ///< Reserved, RES0\r
+ } Bits; ///< Bitfield definition of the register\r
+ UINT32 Data; ///< The entire 32-bit value\r
+} CSSELR_DATA;\r
+\r
+/// The cache type values for the InD field of the CSSELR register\r
+typedef enum\r
+{\r
+ /// Select the data or unified cache\r
+ CsselrCacheTypeDataOrUnified = 0,\r
+ /// Select the instruction cache\r
+ CsselrCacheTypeInstruction,\r
+ CsselrCacheTypeMax\r
+} CSSELR_CACHE_TYPE;\r
+\r
+/// Defines the structure of the CCSIDR (Current Cache Size ID) register\r
+typedef union {\r
+ struct {\r
+ UINT64 LineSize :3; ///< Line size (Log2(Num bytes in cache) - 4)\r
+ UINT64 Associativity :10; ///< Associativity - 1\r
+ UINT64 NumSets :15; ///< Number of sets in the cache -1\r
+ UINT64 Unknown :4; ///< Reserved, UNKNOWN\r
+ UINT64 Reserved :32; ///< Reserved, RES0\r
+ } BitsNonCcidx; ///< Bitfield definition of the register when FEAT_CCIDX is not supported.\r
+ struct {\r
+ UINT64 LineSize :3; ///< Line size (Log2(Num bytes in cache) - 4)\r
+ UINT64 Associativity :21; ///< Associativity - 1\r
+ UINT64 Reserved1 :8; ///< Reserved, RES0\r
+ UINT64 NumSets :24; ///< Number of sets in the cache -1\r
+ UINT64 Reserved2 :8; ///< Reserved, RES0\r
+ } BitsCcidxAA64; ///< Bitfield definition of the register when FEAT_IDX is supported.\r
+ struct {\r
+ UINT64 LineSize : 3;\r
+ UINT64 Associativity : 21;\r
+ UINT64 Reserved : 8;\r
+ UINT64 Unallocated : 32;\r
+ } BitsCcidxAA32;\r
+ UINT64 Data; ///< The entire 64-bit value\r
+} CCSIDR_DATA;\r
+\r
+/// Defines the structure of the AARCH32 CCSIDR2 register.\r
+typedef union {\r
+ struct {\r
+ UINT32 NumSets :24; ///< Number of sets in the cache - 1\r
+ UINT32 Reserved :8; ///< Reserved, RES0\r
+ } Bits; ///< Bitfield definition of the register\r
+ UINT32 Data; ///< The entire 32-bit value\r
+} CCSIDR2_DATA;\r
+\r
+/** Defines the structure of the CLIDR (Cache Level ID) register.\r
+ *\r
+ * The lower 32 bits are the same for both AARCH32 and AARCH64\r
+ * so we can use the same structure for both.\r
+**/\r
+typedef union {\r
+ struct {\r
+ UINT32 Ctype1 : 3; ///< Level 1 cache type\r
+ UINT32 Ctype2 : 3; ///< Level 2 cache type\r
+ UINT32 Ctype3 : 3; ///< Level 3 cache type\r
+ UINT32 Ctype4 : 3; ///< Level 4 cache type\r
+ UINT32 Ctype5 : 3; ///< Level 5 cache type\r
+ UINT32 Ctype6 : 3; ///< Level 6 cache type\r
+ UINT32 Ctype7 : 3; ///< Level 7 cache type\r
+ UINT32 LoUIS : 3; ///< Level of Unification Inner Shareable\r
+ UINT32 LoC : 3; ///< Level of Coherency\r
+ UINT32 LoUU : 3; ///< Level of Unification Uniprocessor\r
+ UINT32 Icb : 3; ///< Inner Cache Boundary\r
+ } Bits; ///< Bitfield definition of the register\r
+ UINT32 Data; ///< The entire 32-bit value\r
+} CLIDR_DATA;\r
+\r
+/// The cache types reported in the CLIDR register.\r
+typedef enum {\r
+ /// No cache is present\r
+ ClidrCacheTypeNone = 0,\r
+ /// There is only an instruction cache\r
+ ClidrCacheTypeInstructionOnly,\r
+ /// There is only a data cache\r
+ ClidrCacheTypeDataOnly,\r
+ /// There are separate data and instruction caches\r
+ ClidrCacheTypeSeparate,\r
+ /// There is a unified cache\r
+ ClidrCacheTypeUnified,\r
+ ClidrCacheTypeMax\r
+} CLIDR_CACHE_TYPE;\r
+\r
+#define CLIDR_GET_CACHE_TYPE(x, level) ((x >> (3 * (level))) & 0b111)\r
+\r
+#endif /* ARM_CACHE_H_ */\r
\r
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
Copyright (c) 2011 - 2016, ARM Ltd. All rights reserved.<BR>\r
- Copyright (c) 2020, NUVIA Inc. All rights reserved.<BR>\r
+ Copyright (c) 2020 - 2021, NUVIA Inc. All rights reserved.<BR>\r
\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
#define GET_MPID(ClusterId, CoreId) (((ClusterId) << 8) | (CoreId))\r
#define PRIMARY_CORE_ID (PcdGet32(PcdArmPrimaryCore) & ARM_CORE_MASK)\r
\r
-// The ARM Architecture Reference Manual for ARMv8-A defines up\r
-// to 7 levels of cache, L1 through L7.\r
-#define MAX_ARM_CACHE_LEVEL 7\r
+/** Reads the CCSIDR register for the specified cache.\r
+\r
+ @param CSSELR The CSSELR cache selection register value.\r
+\r
+ @return The contents of the CCSIDR_EL1 register for the specified cache, when in AARCH64 mode.\r
+ Returns the contents of the CCSIDR register in AARCH32 mode.\r
+**/\r
+UINTN\r
+ReadCCSIDR (\r
+ IN UINT32 CSSELR\r
+ );\r
+\r
+/** Reads the CCSIDR2 for the specified cache.\r
+\r
+ @param CSSELR The CSSELR cache selection register value\r
+\r
+ @return The contents of the CCSIDR2 register for the specified cache.\r
+**/\r
+UINT32\r
+ReadCCSIDR2 (\r
+ IN UINT32 CSSELR\r
+ );\r
+\r
+/** Reads the Cache Level ID (CLIDR) register.\r
+\r
+ @return The contents of the CLIDR_EL1 register.\r
+**/\r
+UINT32\r
+ReadCLIDR (\r
+ VOID\r
+ );\r
\r
UINTN\r
EFIAPI\r
#define CACHE_ARCHITECTURE_UNIFIED (0UL)\r
#define CACHE_ARCHITECTURE_SEPARATE (1UL)\r
\r
-\r
-/// Defines the structure of the CSSELR (Cache Size Selection) register\r
-typedef union {\r
- struct {\r
- UINT32 InD :1; ///< Instruction not Data bit\r
- UINT32 Level :3; ///< Cache level (zero based)\r
- UINT32 TnD :1; ///< Allocation not Data bit\r
- UINT32 Reserved :27; ///< Reserved, RES0\r
- } Bits; ///< Bitfield definition of the register\r
- UINT32 Data; ///< The entire 32-bit value\r
-} CSSELR_DATA;\r
-\r
-/// The cache type values for the InD field of the CSSELR register\r
-typedef enum\r
-{\r
- /// Select the data or unified cache\r
- CsselrCacheTypeDataOrUnified = 0,\r
- /// Select the instruction cache\r
- CsselrCacheTypeInstruction,\r
- CsselrCacheTypeMax\r
-} CSSELR_CACHE_TYPE;\r
-\r
-/// Defines the structure of the CCSIDR (Current Cache Size ID) register\r
-typedef union {\r
- struct {\r
- UINT64 LineSize :3; ///< Line size (Log2(Num bytes in cache) - 4)\r
- UINT64 Associativity :10; ///< Associativity - 1\r
- UINT64 NumSets :15; ///< Number of sets in the cache -1\r
- UINT64 Unknown :4; ///< Reserved, UNKNOWN\r
- UINT64 Reserved :32; ///< Reserved, RES0\r
- } BitsNonCcidx; ///< Bitfield definition of the register when FEAT_CCIDX is not supported.\r
- struct {\r
- UINT64 LineSize :3; ///< Line size (Log2(Num bytes in cache) - 4)\r
- UINT64 Associativity :21; ///< Associativity - 1\r
- UINT64 Reserved1 :8; ///< Reserved, RES0\r
- UINT64 NumSets :24; ///< Number of sets in the cache -1\r
- UINT64 Reserved2 :8; ///< Reserved, RES0\r
- } BitsCcidxAA64; ///< Bitfield definition of the register when FEAT_IDX is supported.\r
- struct {\r
- UINT64 LineSize : 3;\r
- UINT64 Associativity : 21;\r
- UINT64 Reserved : 8;\r
- UINT64 Unallocated : 32;\r
- } BitsCcidxAA32;\r
- UINT64 Data; ///< The entire 64-bit value\r
-} CCSIDR_DATA;\r
-\r
-/// Defines the structure of the AARCH32 CCSIDR2 register.\r
-typedef union {\r
- struct {\r
- UINT32 NumSets :24; ///< Number of sets in the cache - 1\r
- UINT32 Reserved :8; ///< Reserved, RES0\r
- } Bits; ///< Bitfield definition of the register\r
- UINT32 Data; ///< The entire 32-bit value\r
-} CCSIDR2_DATA;\r
-\r
-/** Defines the structure of the CLIDR (Cache Level ID) register.\r
- *\r
- * The lower 32 bits are the same for both AARCH32 and AARCH64\r
- * so we can use the same structure for both.\r
-**/\r
-typedef union {\r
- struct {\r
- UINT32 Ctype1 : 3; ///< Level 1 cache type\r
- UINT32 Ctype2 : 3; ///< Level 2 cache type\r
- UINT32 Ctype3 : 3; ///< Level 3 cache type\r
- UINT32 Ctype4 : 3; ///< Level 4 cache type\r
- UINT32 Ctype5 : 3; ///< Level 5 cache type\r
- UINT32 Ctype6 : 3; ///< Level 6 cache type\r
- UINT32 Ctype7 : 3; ///< Level 7 cache type\r
- UINT32 LoUIS : 3; ///< Level of Unification Inner Shareable\r
- UINT32 LoC : 3; ///< Level of Coherency\r
- UINT32 LoUU : 3; ///< Level of Unification Uniprocessor\r
- UINT32 Icb : 3; ///< Inner Cache Boundary\r
- } Bits; ///< Bitfield definition of the register\r
- UINT32 Data; ///< The entire 32-bit value\r
-} CLIDR_DATA;\r
-\r
-/// The cache types reported in the CLIDR register.\r
-typedef enum {\r
- /// No cache is present\r
- ClidrCacheTypeNone = 0,\r
- /// There is only an instruction cache\r
- ClidrCacheTypeInstructionOnly,\r
- /// There is only a data cache\r
- ClidrCacheTypeDataOnly,\r
- /// There are separate data and instruction caches\r
- ClidrCacheTypeSeparate,\r
- /// There is a unified cache\r
- ClidrCacheTypeUnified,\r
- ClidrCacheTypeMax\r
-} CLIDR_CACHE_TYPE;\r
-\r
-#define CLIDR_GET_CACHE_TYPE(x, level) ((x >> (3 * (level))) & 0b111)\r
-\r
VOID\r
CPSRMaskInsert (\r
IN UINT32 Mask,\r
VOID\r
);\r
\r
-/** Reads the CCSIDR register for the specified cache.\r
-\r
- @param CSSELR The CSSELR cache selection register value.\r
-\r
- @return The contents of the CCSIDR_EL1 register for the specified cache, when in AARCH64 mode.\r
- Returns the contents of the CCSIDR register in AARCH32 mode.\r
-**/\r
-UINTN\r
-ReadCCSIDR (\r
- IN UINT32 CSSELR\r
- );\r
-\r
-/** Reads the CCSIDR2 for the specified cache.\r
-\r
- @param CSSELR The CSSELR cache selection register value\r
-\r
- @return The contents of the CCSIDR2 register for the specified cache.\r
-**/\r
-UINT32\r
-ReadCCSIDR2 (\r
- IN UINT32 CSSELR\r
- );\r
-\r
-UINT32\r
-ReadCLIDR (\r
- VOID\r
- );\r
-\r
#endif // ARM_LIB_PRIVATE_H_\r
\r
#include <Uefi.h>\r
#include <Protocol/Smbios.h>\r
+#include <IndustryStandard/ArmCache.h>\r
#include <IndustryStandard/ArmStdSmc.h>\r
#include <IndustryStandard/SmBios.h>\r
#include <Library/ArmLib.h>\r
#include <Library/ArmSmcLib.h>\r
-#include <Library/ArmLib/ArmLibPrivate.h>\r
#include <Library/BaseLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/DebugLib.h>\r
**/\r
\r
#include <Uefi.h>\r
+#include <IndustryStandard/ArmCache.h>\r
#include <Library/ArmLib.h>\r
-#include <Library/ArmLib/ArmLibPrivate.h>\r
\r
#include "SmbiosProcessor.h"\r
\r
**/\r
\r
#include <Uefi.h>\r
+#include <IndustryStandard/ArmCache.h>\r
#include <Library/ArmLib.h>\r
-#include <Library/ArmLib/ArmLibPrivate.h>\r
\r
#include "SmbiosProcessor.h"\r
\r
**/\r
\r
#include <Uefi.h>\r
+#include <IndustryStandard/ArmCache.h>\r
#include <IndustryStandard/ArmStdSmc.h>\r
#include <IndustryStandard/SmBios.h>\r
#include <Library/ArmLib.h>\r
-#include <Library/ArmLib/ArmLibPrivate.h>\r
#include <Library/ArmSmcLib.h>\r
#include <Library/BaseMemoryLib.h>\r
\r