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_0            0x11
> +#define PL111_CLCD_PERIPH_ID_1            0x11
> +#define PL111_CLCD_PERIPH_ID_2            0x04
> +#define PL111_CLCD_PERIPH_ID_3            0x00
> +#define PL111_CLCD_P_CELL_ID_0            0x0D
> +#define PL111_CLCD_P_CELL_ID_1            0xF0
> +#define PL111_CLCD_P_CELL_ID_2            0x05
> +#define PL111_CLCD_P_CELL_ID_3            0xB1
> +
>  /**********************************************************************/
>
>  // 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

Reply via email to