To deal gracefully with the absence of the PL180 hardware on
the Foundation model, check the PrimeCell ID before proceeding
with the installation.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
---
 ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.c | 13 +++++++++++++
 ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.h | 17 +++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.c 
b/ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.c
index 411a61ed040f..84096c557c76 100644
--- a/ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.c
+++ b/ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.c
@@ -521,6 +521,19 @@ PL180MciDxeInitialize (
   EFI_STATUS    Status;
   EFI_HANDLE    Handle;
 
+  // Check if this is a PL180
+  if (MmioRead8 (MCI_PERIPH_ID_REG0) != MCI_PERIPH_ID0 ||
+      MmioRead8 (MCI_PERIPH_ID_REG1) != MCI_PERIPH_ID1 ||
+      MmioRead8 (MCI_PERIPH_ID_REG2) != MCI_PERIPH_ID2 ||
+      MmioRead8 (MCI_PERIPH_ID_REG3) != MCI_PERIPH_ID3 ||
+      MmioRead8 (MCI_PCELL_ID_REG0)  != MCI_PCELL_ID0  ||
+      MmioRead8 (MCI_PCELL_ID_REG1)  != MCI_PCELL_ID1  ||
+      MmioRead8 (MCI_PCELL_ID_REG2)  != MCI_PCELL_ID2  ||
+      MmioRead8 (MCI_PCELL_ID_REG3)  != MCI_PCELL_ID3) {
+
+    return EFI_NOT_FOUND;
+  }
+
   Handle = NULL;
 
   MCI_TRACE ("PL180MciDxeInitialize()");
diff --git a/ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.h 
b/ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.h
index 6dc155ee9a61..ce38a9e70619 100644
--- a/ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.h
+++ b/ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.h
@@ -51,6 +51,23 @@
 #define MCI_SELECT_REG                  (MCI_SYSCTL + 0x044)
 #define MCI_FIFOCOUNT_REG               (MCI_SYSCTL + 0x048)
 #define MCI_FIFO_REG                    (MCI_SYSCTL + 0x080)
+#define MCI_PERIPH_ID_REG0              (MCI_SYSCTL + 0xFE0)
+#define MCI_PERIPH_ID_REG1              (MCI_SYSCTL + 0xFE4)
+#define MCI_PERIPH_ID_REG2              (MCI_SYSCTL + 0xFE8)
+#define MCI_PERIPH_ID_REG3              (MCI_SYSCTL + 0xFEC)
+#define MCI_PCELL_ID_REG0               (MCI_SYSCTL + 0xFF0)
+#define MCI_PCELL_ID_REG1               (MCI_SYSCTL + 0xFF4)
+#define MCI_PCELL_ID_REG2               (MCI_SYSCTL + 0xFF8)
+#define MCI_PCELL_ID_REG3               (MCI_SYSCTL + 0xFFC)
+
+#define MCI_PERIPH_ID0                  0x80
+#define MCI_PERIPH_ID1                  0x11
+#define MCI_PERIPH_ID2                  0x04
+#define MCI_PERIPH_ID3                  0x00
+#define MCI_PCELL_ID0                   0x0D
+#define MCI_PCELL_ID1                   0xF0
+#define MCI_PCELL_ID2                   0x05
+#define MCI_PCELL_ID3                   0xB1
 
 #define MCI_POWER_OFF                   0
 #define MCI_POWER_UP                    BIT1
-- 
1.9.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to