The code to detect what juno revision we are running on
is fairly small. Put it in a common header, where it may be
shared by a couple modules.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jeremy Linton <[email protected]>
---
 ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h | 41 +++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h 
b/ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h
index d01d136..0e72a5c 100644
--- a/ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h
+++ b/ArmPlatformPkg/ArmJunoPkg/Include/ArmPlatform.h
@@ -83,6 +83,47 @@
     EFI_ACPI_ARM_CREATOR_REVISION   /* UINT32  CreatorRevision */ \
   }
 
+//
+// Hardware platform identifiers
+//
+#define JUNO_REVISION_UNKNOWN 0
+#define JUNO_REVISION_R0      1
+#define JUNO_REVISION_R1      2
+
+//
+// We detect whether we are running on a Juno r0 or Juno r1
+// board at runtime by checking the value of the MIDR register.
+//
+#define GetJunoRevision(JunoRevision)                                  \
+{                                                                      \
+  UINT32                Midr;                                         \
+  UINT32                CpuType;                                       \
+  UINT32                CpuRev;                                        \
+                                                                       \
+  JunoRevision = JUNO_REVISION_UNKNOWN;                                \
+                                                                       \
+  Midr     = ArmReadMidr ();                                           \
+  CpuType  = (Midr >> ARM_CPU_TYPE_SHIFT) & ARM_CPU_TYPE_MASK;         \
+  CpuRev   = Midr & ARM_CPU_REV_MASK;                                  \
+                                                                       \
+  switch (CpuType) {                                                   \
+  case ARM_CPU_TYPE_A53:                                               \
+    if (CpuRev == ARM_CPU_REV (0, 0)) {                                \
+      JunoRevision = JUNO_REVISION_R0;                                 \
+    } else if (CpuRev == ARM_CPU_REV (0, 3)) {                         \
+      JunoRevision = JUNO_REVISION_R1;                                 \
+    }                                                                  \
+    break;                                                             \
+                                                                       \
+  case ARM_CPU_TYPE_A57:                                               \
+    if (CpuRev == ARM_CPU_REV (0, 0)) {                                \
+      JunoRevision = JUNO_REVISION_R0;                                 \
+    } else if (CpuRev == ARM_CPU_REV (1, 1)) {                         \
+      JunoRevision = JUNO_REVISION_R1;                                 \
+    }                                                                  \
+  }                                                                    \
+}
+
 #define JUNO_WATCHDOG_COUNT  2
 
 // Define if the exported ACPI Tables are based on ACPI 5.0 spec or latest
-- 
2.4.3


_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to