]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/LcdGraphicsOutputDxe: check PrimeCell ID before initializing
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Tue, 25 Aug 2015 13:11:11 +0000 (13:11 +0000)
committerabiesheuvel <abiesheuvel@Edk2>
Tue, 25 Aug 2015 13:11:11 +0000 (13:11 +0000)
To deal gracefully with the absence of the PL111 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.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18308 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c
ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
ArmPlatformPkg/Include/Drivers/PL111Lcd.h

index cbc20343496be130cf2b07710bb3455d0720817a..b721061fc1df5695092e8c71da97ae0b9af46b3f 100644 (file)
@@ -156,6 +156,11 @@ LcdGraphicsOutputDxeInitialize (
   EFI_STATUS  Status = EFI_SUCCESS;\r
   LCD_INSTANCE* Instance;\r
 \r
   EFI_STATUS  Status = EFI_SUCCESS;\r
   LCD_INSTANCE* Instance;\r
 \r
+  Status = LcdIdentify ();\r
+  if (EFI_ERROR(Status)) {\r
+    goto EXIT;\r
+  }\r
+\r
   Status = LcdInstanceContructor (&Instance);\r
   if (EFI_ERROR(Status)) {\r
     goto EXIT;\r
   Status = LcdInstanceContructor (&Instance);\r
   if (EFI_ERROR(Status)) {\r
     goto EXIT;\r
index dfbf2ed67122cda97dd5e6c9a47fb355229ce93f..8856b79901b632071ae4c4081b69e5188daa23ed 100644 (file)
@@ -106,7 +106,7 @@ InitializeDisplay (
 );\r
 \r
 EFI_STATUS\r
 );\r
 \r
 EFI_STATUS\r
-LcdIndentify (\r
+LcdIdentify (\r
   VOID\r
 );\r
 \r
   VOID\r
 );\r
 \r
index ad841cd8dcac89fc5bb4079a9334a95e32102701..b5e113b844d4e4df2e35ccd880c01344b4b8b9d7 100644 (file)
  *\r
  **********************************************************************/\r
 \r
  *\r
  **********************************************************************/\r
 \r
+EFI_STATUS\r
+LcdIdentify (\r
+  VOID\r
+  )\r
+{\r
+  DEBUG ((EFI_D_WARN, "Probing ID registers at 0x%lx for a PL111\n",\r
+    PL111_REG_CLCD_PERIPH_ID_0));\r
+\r
+  // Check if this is a PL111\r
+  if (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_0) == PL111_CLCD_PERIPH_ID_0 &&\r
+      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_1) == PL111_CLCD_PERIPH_ID_1 &&\r
+     (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_2) & 0xf) == PL111_CLCD_PERIPH_ID_2 &&\r
+      MmioRead8 (PL111_REG_CLCD_PERIPH_ID_3) == PL111_CLCD_PERIPH_ID_3 &&\r
+      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_0) == PL111_CLCD_P_CELL_ID_0 &&\r
+      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_1) == PL111_CLCD_P_CELL_ID_1 &&\r
+      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_2) == PL111_CLCD_P_CELL_ID_2 &&\r
+      MmioRead8 (PL111_REG_CLCD_P_CELL_ID_3) == PL111_CLCD_P_CELL_ID_3) {\r
+    return EFI_SUCCESS;\r
+  }\r
+  return EFI_NOT_FOUND;\r
+}\r
+\r
 EFI_STATUS\r
 LcdInitialize (\r
   IN EFI_PHYSICAL_ADDRESS   VramBaseAddress\r
 EFI_STATUS\r
 LcdInitialize (\r
   IN EFI_PHYSICAL_ADDRESS   VramBaseAddress\r
index 8c1c29de6cdd39253e743c335f87aa50050450e0..18e28af805f6076a0a788c9b8fc5fa645a6f4738 100644 (file)
 #define PL111_REG_CLCD_P_CELL_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF8)\r
 #define PL111_REG_CLCD_P_CELL_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFFC)\r
 \r
 #define PL111_REG_CLCD_P_CELL_ID_2        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFF8)\r
 #define PL111_REG_CLCD_P_CELL_ID_3        ((UINTN)PcdGet32 (PcdPL111LcdBase) + 0xFFC)\r
 \r
+#define PL111_CLCD_PERIPH_ID_0            0x11\r
+#define PL111_CLCD_PERIPH_ID_1            0x11\r
+#define PL111_CLCD_PERIPH_ID_2            0x04\r
+#define PL111_CLCD_PERIPH_ID_3            0x00\r
+#define PL111_CLCD_P_CELL_ID_0            0x0D\r
+#define PL111_CLCD_P_CELL_ID_1            0xF0\r
+#define PL111_CLCD_P_CELL_ID_2            0x05\r
+#define PL111_CLCD_P_CELL_ID_3            0xB1\r
+\r
 /**********************************************************************/\r
 \r
 // Register components (register bits)\r
 /**********************************************************************/\r
 \r
 // Register components (register bits)\r