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