On 18 August 2015 at 15:10, Ard Biesheuvel
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
> Reviewed-by: Leif Lindholm
> ---
> 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
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel