Re: [edk2] [PATCH v2 2/3] ArmPlatformPkg/LcdGraphicsOutputDxe: check PrimeCell ID before initializing

2015-08-27 Thread Ryan Harkin
On 18 August 2015 at 15:10, Ard Biesheuvel ard.biesheu...@linaro.org
wrote:

 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.biesheu...@linaro.org
 Reviewed-by: Leif Lindholm leif.lindh...@linaro.org
 ---
  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c |  5
 +
  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h |  2 +-
  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c | 22
 
  ArmPlatformPkg/Include/Drivers/PL111Lcd.h  |  9
 
  4 files changed, 37 insertions(+), 1 deletion(-)

 diff --git
 a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c
 b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c
 index cbc20343496b..b721061fc1df 100644
 --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c
 +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c
 @@ -156,6 +156,11 @@ LcdGraphicsOutputDxeInitialize (
EFI_STATUS  Status = EFI_SUCCESS;
LCD_INSTANCE* Instance;

 +  Status = LcdIdentify ();
 +  if (EFI_ERROR(Status)) {
 +goto EXIT;
 +  }
 +
Status = LcdInstanceContructor (Instance);
if (EFI_ERROR(Status)) {
  goto EXIT;
 diff --git
 a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
 b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
 index dfbf2ed67122..8856b79901b6 100644
 --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
 +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
 @@ -106,7 +106,7 @@ InitializeDisplay (
  );

  EFI_STATUS
 -LcdIndentify (
 +LcdIdentify (
VOID
  );

 diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
 b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
 index ad841cd8dcac..b5e113b844d4 100644
 --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
 +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
 @@ -27,6 +27,28 @@
   **/

  EFI_STATUS
 +LcdIdentify (
 +  VOID
 +  )
 +{
 +  DEBUG ((EFI_D_WARN, Probing ID registers at 0x%lx for a PL111\n,
 +PL111_REG_CLCD_PERIPH_ID_0));
 +
 +  // Check if this is a PL111
 +  if (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_0) == PL111_CLCD_PERIPH_ID_0 
 +  MmioRead8 (PL111_REG_CLCD_PERIPH_ID_1) == PL111_CLCD_PERIPH_ID_1 
 + (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_2)  0xf) ==
 PL111_CLCD_PERIPH_ID_2 


I'd prefer it if we #defined the mask, but I don't really mind as it's
clear enough if you look at this with the spec beside you.


 +  MmioRead8 (PL111_REG_CLCD_PERIPH_ID_3) == PL111_CLCD_PERIPH_ID_3 
 +  MmioRead8 (PL111_REG_CLCD_P_CELL_ID_0) == PL111_CLCD_P_CELL_ID_0 
 +  MmioRead8 (PL111_REG_CLCD_P_CELL_ID_1) == PL111_CLCD_P_CELL_ID_1 
 +  MmioRead8 (PL111_REG_CLCD_P_CELL_ID_2) == PL111_CLCD_P_CELL_ID_2 
 +  MmioRead8 (PL111_REG_CLCD_P_CELL_ID_3) == PL111_CLCD_P_CELL_ID_3) {
 +return EFI_SUCCESS;
 +  }
 +  return EFI_NOT_FOUND;
 +}
 +
 +EFI_STATUS
  LcdInitialize (
IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
)
 diff --git a/ArmPlatformPkg/Include/Drivers/PL111Lcd.h
 b/ArmPlatformPkg/Include/Drivers/PL111Lcd.h
 index 8c1c29de6cdd..18e28af805f6 100644
 --- a/ArmPlatformPkg/Include/Drivers/PL111Lcd.h
 +++ b/ArmPlatformPkg/Include/Drivers/PL111Lcd.h
 @@ -47,6 +47,15 @@
  #define PL111_REG_CLCD_P_CELL_ID_2((UINTN)PcdGet32
 (PcdPL111LcdBase) + 0xFF8)
  #define PL111_REG_CLCD_P_CELL_ID_3((UINTN)PcdGet32
 (PcdPL111LcdBase) + 0xFFC)

 +#define PL111_CLCD_PERIPH_ID_00x11
 +#define PL111_CLCD_PERIPH_ID_10x11
 +#define PL111_CLCD_PERIPH_ID_20x04
 +#define PL111_CLCD_PERIPH_ID_30x00
 +#define PL111_CLCD_P_CELL_ID_00x0D
 +#define PL111_CLCD_P_CELL_ID_10xF0
 +#define PL111_CLCD_P_CELL_ID_20x05
 +#define PL111_CLCD_P_CELL_ID_30xB1
 +
  /**/

  // Register components (register bits)
 --
 1.9.1


Reviewed-by: Ryan Harkin ryan.har...@linaro.org
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


[edk2] [PATCH v2 2/3] ArmPlatformPkg/LcdGraphicsOutputDxe: check PrimeCell ID before initializing

2015-08-18 Thread Ard Biesheuvel
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.biesheu...@linaro.org
Reviewed-by: Leif Lindholm leif.lindh...@linaro.org
---
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c |  5 +
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h |  2 +-
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c | 22 

 ArmPlatformPkg/Include/Drivers/PL111Lcd.h  |  9 

 4 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c 
b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c
index cbc20343496b..b721061fc1df 100644
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.c
@@ -156,6 +156,11 @@ LcdGraphicsOutputDxeInitialize (
   EFI_STATUS  Status = EFI_SUCCESS;
   LCD_INSTANCE* Instance;
 
+  Status = LcdIdentify ();
+  if (EFI_ERROR(Status)) {
+goto EXIT;
+  }
+
   Status = LcdInstanceContructor (Instance);
   if (EFI_ERROR(Status)) {
 goto EXIT;
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h 
b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
index dfbf2ed67122..8856b79901b6 100644
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/LcdGraphicsOutputDxe.h
@@ -106,7 +106,7 @@ InitializeDisplay (
 );
 
 EFI_STATUS
-LcdIndentify (
+LcdIdentify (
   VOID
 );
 
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c 
b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
index ad841cd8dcac..b5e113b844d4 100644
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
@@ -27,6 +27,28 @@
  **/
 
 EFI_STATUS
+LcdIdentify (
+  VOID
+  )
+{
+  DEBUG ((EFI_D_WARN, Probing ID registers at 0x%lx for a PL111\n,
+PL111_REG_CLCD_PERIPH_ID_0));
+
+  // Check if this is a PL111
+  if (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_0) == PL111_CLCD_PERIPH_ID_0 
+  MmioRead8 (PL111_REG_CLCD_PERIPH_ID_1) == PL111_CLCD_PERIPH_ID_1 
+ (MmioRead8 (PL111_REG_CLCD_PERIPH_ID_2)  0xf) == PL111_CLCD_PERIPH_ID_2 

+  MmioRead8 (PL111_REG_CLCD_PERIPH_ID_3) == PL111_CLCD_PERIPH_ID_3 
+  MmioRead8 (PL111_REG_CLCD_P_CELL_ID_0) == PL111_CLCD_P_CELL_ID_0 
+  MmioRead8 (PL111_REG_CLCD_P_CELL_ID_1) == PL111_CLCD_P_CELL_ID_1 
+  MmioRead8 (PL111_REG_CLCD_P_CELL_ID_2) == PL111_CLCD_P_CELL_ID_2 
+  MmioRead8 (PL111_REG_CLCD_P_CELL_ID_3) == PL111_CLCD_P_CELL_ID_3) {
+return EFI_SUCCESS;
+  }
+  return EFI_NOT_FOUND;
+}
+
+EFI_STATUS
 LcdInitialize (
   IN EFI_PHYSICAL_ADDRESS   VramBaseAddress
   )
diff --git a/ArmPlatformPkg/Include/Drivers/PL111Lcd.h 
b/ArmPlatformPkg/Include/Drivers/PL111Lcd.h
index 8c1c29de6cdd..18e28af805f6 100644
--- a/ArmPlatformPkg/Include/Drivers/PL111Lcd.h
+++ b/ArmPlatformPkg/Include/Drivers/PL111Lcd.h
@@ -47,6 +47,15 @@
 #define PL111_REG_CLCD_P_CELL_ID_2((UINTN)PcdGet32 (PcdPL111LcdBase) + 
0xFF8)
 #define PL111_REG_CLCD_P_CELL_ID_3((UINTN)PcdGet32 (PcdPL111LcdBase) + 
0xFFC)
 
+#define PL111_CLCD_PERIPH_ID_00x11
+#define PL111_CLCD_PERIPH_ID_10x11
+#define PL111_CLCD_PERIPH_ID_20x04
+#define PL111_CLCD_PERIPH_ID_30x00
+#define PL111_CLCD_P_CELL_ID_00x0D
+#define PL111_CLCD_P_CELL_ID_10xF0
+#define PL111_CLCD_P_CELL_ID_20x05
+#define PL111_CLCD_P_CELL_ID_30xB1
+
 /**/
 
 // Register components (register bits)
-- 
1.9.1

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