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
*\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
#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