From: "Rebecca Cran" <rebecca@nuviainc.com>
To: devel@edk2.groups.io
Cc: Rebecca Cran <rebecca@nuviainc.com>,
Leif Lindholm <leif@nuviainc.com>,
Ard Biesheuvel <ard.biesheuvel@arm.com>,
nd@arm.com, Sami Mujawar <Sami.Mujawar@arm.com>,
Liming Gao <gaoliming@byosoft.com.cn>,
Michael D Kinney <michael.d.kinney@intel.com>,
Zhiguang Liu <zhiguang.liu@intel.com>,
Sami Mujawar <sami.mujawar@arm.com>
Subject: [PATCH v6 08/22] ArmPkg: Update ArmLibPrivate.h with cache register definitions
Date: Thu, 14 Jan 2021 09:36:14 -0700 [thread overview]
Message-ID: <20210114163628.31952-9-rebecca@nuviainc.com> (raw)
In-Reply-To: <20210114163628.31952-1-rebecca@nuviainc.com>
Update the cache definitions in ArmLibPrivate.h based on current
ARMv8 documentation.
Signed-off-by: Rebecca Cran <rebecca@nuviainc.com>
Reviewed-by: Leif Lindholm <leif@nuviainc.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
---
ArmPkg/Library/ArmLib/ArmLibPrivate.h | 97 ++++++++++++++++++++
1 file changed, 97 insertions(+)
diff --git a/ArmPkg/Library/ArmLib/ArmLibPrivate.h b/ArmPkg/Library/ArmLib/ArmLibPrivate.h
index 8959bdd9d73c..77e592a99def 100644
--- a/ArmPkg/Library/ArmLib/ArmLibPrivate.h
+++ b/ArmPkg/Library/ArmLib/ArmLibPrivate.h
@@ -1,5 +1,7 @@
/** @file
+ ArmLibPrivate.h
+ Copyright (c) 2020, NUVIA Inc. All rights reserved.<BR>
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -50,6 +52,101 @@
#define CACHE_ARCHITECTURE_UNIFIED (0UL)
#define CACHE_ARCHITECTURE_SEPARATE (1UL)
+
+/// Defines the structure of the CSSELR (Cache Size Selection) register
+typedef union {
+ struct {
+ UINT32 InD :1; ///< Instruction not Data bit
+ UINT32 Level :3; ///< Cache level (zero based)
+ UINT32 TnD :1; ///< Allocation not Data bit
+ UINT32 Reserved :27; ///< Reserved, RES0
+ } Bits; ///< Bitfield definition of the register
+ UINT32 Data; ///< The entire 32-bit value
+} CSSELR_DATA;
+
+/// The cache type values for the InD field of the CSSELR register
+typedef enum
+{
+ /// Select the data or unified cache
+ CsselrCacheTypeDataOrUnified = 0,
+ /// Select the instruction cache
+ CsselrCacheTypeInstruction,
+ CsselrCacheTypeMax
+} CSSELR_CACHE_TYPE;
+
+/// Defines the structure of the CCSIDR (Current Cache Size ID) register
+typedef union {
+ struct {
+ UINT64 LineSize :3; ///< Line size (Log2(Num bytes in cache) - 4)
+ UINT64 Associativity :10; ///< Associativity - 1
+ UINT64 NumSets :15; ///< Number of sets in the cache -1
+ UINT64 Unknown :4; ///< Reserved, UNKNOWN
+ UINT64 Reserved :32; ///< Reserved, RES0
+ } BitsNonCcidx; ///< Bitfield definition of the register when FEAT_CCIDX is not supported.
+ struct {
+ UINT64 LineSize :3; ///< Line size (Log2(Num bytes in cache) - 4)
+ UINT64 Associativity :21; ///< Associativity - 1
+ UINT64 Reserved1 :8; ///< Reserved, RES0
+ UINT64 NumSets :24; ///< Number of sets in the cache -1
+ UINT64 Reserved2 :8; ///< Reserved, RES0
+ } BitsCcidxAA64; ///< Bitfield definition of the register when FEAT_IDX is supported.
+ struct {
+ UINT64 LineSize : 3;
+ UINT64 Associativity : 21;
+ UINT64 Reserved : 8;
+ UINT64 Unallocated : 32;
+ } BitsCcidxAA32;
+ UINT64 Data; ///< The entire 64-bit value
+} CCSIDR_DATA;
+
+/// Defines the structure of the AARCH32 CCSIDR2 register.
+typedef union {
+ struct {
+ UINT32 NumSets :24; ///< Number of sets in the cache - 1
+ UINT32 Reserved :8; ///< Reserved, RES0
+ } Bits; ///< Bitfield definition of the register
+ UINT32 Data; ///< The entire 32-bit value
+} CSSIDR2_DATA;
+
+/** Defines the structure of the CLIDR (Cache Level ID) register.
+ *
+ * The lower 32 bits are the same for both AARCH32 and AARCH64
+ * so we can use the same structure for both.
+**/
+typedef union {
+ struct {
+ UINT32 Ctype1 : 3; ///< Level 1 cache type
+ UINT32 Ctype2 : 3; ///< Level 2 cache type
+ UINT32 Ctype3 : 3; ///< Level 3 cache type
+ UINT32 Ctype4 : 3; ///< Level 4 cache type
+ UINT32 Ctype5 : 3; ///< Level 5 cache type
+ UINT32 Ctype6 : 3; ///< Level 6 cache type
+ UINT32 Ctype7 : 3; ///< Level 7 cache type
+ UINT32 LoUIS : 3; ///< Level of Unification Inner Shareable
+ UINT32 LoC : 3; ///< Level of Coherency
+ UINT32 LoUU : 3; ///< Level of Unification Uniprocessor
+ UINT32 Icb : 3; ///< Inner Cache Boundary
+ } Bits; ///< Bitfield definition of the register
+ UINT32 Data; ///< The entire 32-bit value
+} CLIDR_DATA;
+
+/// The cache types reported in the CLIDR register.
+typedef enum {
+ /// No cache is present
+ ClidrCacheTypeNone = 0,
+ /// There is only an instruction cache
+ ClidrCacheTypeInstructionOnly,
+ /// There is only a data cache
+ ClidrCacheTypeDataOnly,
+ /// There are separate data and instruction caches
+ ClidrCacheTypeSeparate,
+ /// There is a unified cache
+ ClidrCacheTypeUnified,
+ ClidrCacheTypeMax
+} CLIDR_CACHE_TYPE;
+
+#define CLIDR_GET_CACHE_TYPE(x, level) ((x >> (3 * level)) & 0b111)
+
VOID
CPSRMaskInsert (
IN UINT32 Mask,
--
2.26.2
next prev parent reply other threads:[~2021-01-14 16:36 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-14 16:36 [PATCH v6 00/22] ArmPkg,MdePkg: Add Universal/Smbios, and related changes Rebecca Cran
2021-01-14 16:36 ` [PATCH v6 01/22] BaseTools: Fix the build report crash issue Rebecca Cran
2021-01-14 16:36 ` [PATCH v6 02/22] ArmPkg: Add ARM SMC Architecture functions to ArmStdSmc.h Rebecca Cran
2021-01-15 20:55 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-14 16:36 ` [PATCH v6 03/22] MdePkg: Update IndustryStandard/SmBios.h with processor status data Rebecca Cran
2021-01-15 0:46 ` 回复: " gaoliming
2021-01-15 20:54 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-14 16:36 ` [PATCH v6 04/22] ArmPkg: Add register encoding definition for MMFR2 Rebecca Cran
2021-01-14 16:36 ` [PATCH v6 05/22] ArmPkg: Add helper to read the Memory Model Features Register 2 Rebecca Cran
2021-01-26 9:35 ` [edk2-devel] " Philippe Mathieu-Daudé
2021-01-14 16:36 ` [PATCH v6 06/22] ArmPkg: Add helper function to read the Memory Model Feature Register 4 Rebecca Cran
2021-01-14 16:36 ` [PATCH v6 07/22] ArmPkg: Fix the return type of the ReadCCSIDR function Rebecca Cran
2021-01-14 16:36 ` Rebecca Cran [this message]
2021-01-14 16:36 ` [PATCH v6 09/22] ArmPkg: Add definition of the maximum cache level in ARMv8-A Rebecca Cran
2021-01-14 16:36 ` [PATCH v6 10/22] ArmPkg: Add helper to read CCIDX status Rebecca Cran
2021-01-14 16:36 ` [PATCH v6 11/22] ArmPkg: Add helper to read the CCSIDR2 register Rebecca Cran
2021-01-18 8:51 ` Sami Mujawar
2021-01-14 16:36 ` [PATCH v6 12/22] ArmPkg: Add Library/OemMiscLib.h Rebecca Cran
2021-01-15 20:56 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-25 17:51 ` Leif Lindholm
2021-01-14 16:36 ` [PATCH v6 13/22] ArmPkg: Add Universal/Smbios/OemMiscLibNull Rebecca Cran
2021-01-15 20:57 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-25 17:51 ` Leif Lindholm
2021-01-14 16:36 ` [PATCH v6 14/22] ArmPkg: Add Universal/Smbios/ProcessorSubClassDxe Rebecca Cran
2021-01-25 19:04 ` Leif Lindholm
2021-01-28 4:53 ` Rebecca Cran
2021-01-28 11:32 ` Leif Lindholm
2021-01-28 11:45 ` [edk2-devel] " Laszlo Ersek
2021-01-14 16:36 ` [PATCH v6 15/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type00 Rebecca Cran
2021-01-15 21:09 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-25 19:08 ` Leif Lindholm
2021-01-14 16:36 ` [PATCH v6 16/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type01 Rebecca Cran
2021-01-15 21:09 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-25 19:09 ` Leif Lindholm
2021-01-14 16:36 ` [PATCH v6 17/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type02 Rebecca Cran
2021-01-25 19:10 ` Leif Lindholm
2021-01-25 19:23 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-14 16:36 ` [PATCH v6 18/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type03 Rebecca Cran
2021-01-25 19:11 ` Leif Lindholm
2021-01-25 19:23 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-14 16:36 ` [PATCH v6 19/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type13 Rebecca Cran
2021-01-25 19:11 ` Leif Lindholm
2021-01-14 16:36 ` [PATCH v6 20/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe/Type32 Rebecca Cran
2021-01-15 21:10 ` [edk2-devel] " Samer El-Haj-Mahmoud
2021-01-25 19:20 ` Rebecca Cran
2021-01-25 19:23 ` Samer El-Haj-Mahmoud
2021-01-25 19:12 ` Leif Lindholm
2021-01-14 16:36 ` [PATCH v6 21/22] ArmPkg: Add SMBIOS PCDs to ArmPkg.dec Rebecca Cran
2021-01-14 16:36 ` [PATCH v6 22/22] ArmPkg: Add Universal/Smbios/SmbiosMiscDxe Rebecca Cran
2021-01-25 19:15 ` Leif Lindholm
2021-01-25 19:23 ` [edk2-devel] " Samer El-Haj-Mahmoud
[not found] ` <165A268B3006F467.32022@groups.io>
2021-01-14 16:40 ` [edk2-devel] [PATCH v6 01/22] BaseTools: Fix the build report crash issue Rebecca Cran
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210114163628.31952-9-rebecca@nuviainc.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox