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

