[edk2] [PATCH 12/19] ArmPlatformPkg: Redefine LcdPlatformGetTimings function

evan.lloyd@arm.com posted 19 patches 7 years, 3 months ago
There is a newer version of this series
[edk2] [PATCH 12/19] ArmPlatformPkg: Redefine LcdPlatformGetTimings function
Posted by evan.lloyd@arm.com 7 years, 3 months ago
From: Girish Pathak <girish.pathak@arm.com>

The LcdPlatformGetTimings interface function takes similar sets of
multiple parameters for horizontal and vertical timings which can be
aggregated in a common data type. This change defines a structure
SCAN_TIMINGS for this which can be used to describe both horizontal and
vertical scan timings, and accordingly redefines the
LcdPlatformGetTiming interface, greatly reducing the amount of data
passed about.

Similarly the mode definition tables are also changed to use this data
type and thus enable pass through access.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Girish Pathak <girish.pathak@arm.com>
Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>
---
 ArmPlatformPkg/Include/Library/LcdPlatformLib.h                                    |  32 ++--
 ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c       | 122 +++++---------
 ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c | 177 ++++++++------------
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c                                |  55 +++---
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c                             |  48 +++---
 5 files changed, 180 insertions(+), 254 deletions(-)

diff --git a/ArmPlatformPkg/Include/Library/LcdPlatformLib.h b/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
index 48bdd8a51411137df040aa797fcff272785f7a35..f2f345b18fd15f2cde159fd42d3208a28f598a1f 100644
--- a/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
+++ b/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
@@ -152,6 +152,14 @@ typedef enum {
   LCD_BITS_PER_PIXEL_12_444
 } LCD_BPP;
 
+// Display timing settings.
+typedef struct {
+  UINT32                      Resolution;
+  UINT32                      Sync;
+  UINT32                      BackPorch;
+  UINT32                      FrontPorch;
+} SCAN_TIMINGS;
+
 /** Platform related initialization function.
   *
   * @param IN Handle               Handle to the LCD device instance.
@@ -219,29 +227,19 @@ LcdPlatformQueryMode (
 /** Returns the display timing information for the requested mode number.
   *
   * @param IN  ModeNumber           Mode Number.
-  * @param OUT HRes                 Pointer to horizontal resolution.
-  * @param OUT HSync                Pointer to horizontal sync width.
-  * @param OUT HBackPorch           Pointer to horizontal back porch.
-  * @param OUT HFrontPorch          Pointer to horizontal front porch.
-  * @param OUT VRes                 Pointer to vertical resolution.
-  * @param OUT VSync                Pointer to vertical sync width.
-  * @param OUT VBackPorch           Pointer to vertical back porch.
-  * @param OUT VFrontPorch          Pointer to vertical front porch.
-
+  * @param OUT Horizontal           Pointer to horizontal timing parameters.
+  *                                 (Resolution, Sync, Back porch, Front porch)
+  * @param OUT Vertical             Pointer to vertical timing parameters.
+  *                                 (Resolution, Sync, Back porch, Front porch)
+  *
   * @retval EFI_SUCCESS             Success if the requested mode is found.
   * @retval EFI_INVALID_PARAMETER   Requested mode not found.
 **/
 EFI_STATUS
 LcdPlatformGetTimings (
   IN  UINT32                              ModeNumber,
-  OUT UINT32*                             HRes,
-  OUT UINT32*                             HSync,
-  OUT UINT32*                             HBackPorch,
-  OUT UINT32*                             HFrontPorch,
-  OUT UINT32*                             VRes,
-  OUT UINT32*                             VSync,
-  OUT UINT32*                             VBackPorch,
-  OUT UINT32*                             VFrontPorch
+  OUT CONST SCAN_TIMINGS                  **Horizontal,
+  OUT CONST SCAN_TIMINGS                  **Vertical
   );
 
 /** Return bits per pixel information for a mode number.
diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c b/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
index a6c4f414685db907a3fbc9a009969be8a09f7415..dc2c5fb89923304c46d137ec8eaefc9418548d06 100644
--- a/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
+++ b/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
@@ -30,58 +30,52 @@
 
 typedef struct {
   UINT32                     Mode;
-  UINT32                     HorizontalResolution;
-  UINT32                     VerticalResolution;
   LCD_BPP                    Bpp;
   UINT32                     OscFreq;
 
   // These are used by HDLCD
-  UINT32                     HSync;
-  UINT32                     HBackPorch;
-  UINT32                     HFrontPorch;
-  UINT32                     VSync;
-  UINT32                     VBackPorch;
-  UINT32                     VFrontPorch;
-} LCD_RESOLUTION;
+  SCAN_TIMINGS               Horizontal;
+  SCAN_TIMINGS               Vertical;
+} DISPLAY_MODE;
 
 /** The display modes supported by the platform.
 **/
-STATIC CONST LCD_RESOLUTION mResolutions[] = {
+STATIC CONST DISPLAY_MODE mDisplayModes[] = {
   { // Mode 0 : VGA : 640 x 480 x 24 bpp
-    VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+    VGA, LCD_BITS_PER_PIXEL_24,
     VGA_OSC_FREQUENCY,
-    VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
-    VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
+    {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
+    {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
   },
   { // Mode 1 : SVGA : 800 x 600 x 24 bpp
-    SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+    SVGA, LCD_BITS_PER_PIXEL_24,
     SVGA_OSC_FREQUENCY,
-    SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
-    SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
+    {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
+    {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
   },
   { // Mode 2 : XGA : 1024 x 768 x 24 bpp
-    XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+    XGA, LCD_BITS_PER_PIXEL_24,
     XGA_OSC_FREQUENCY,
-    XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
-    XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
+    {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
+    {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
   },
   { // Mode 3 : SXGA : 1280 x 1024 x 24 bpp
-    SXGA, SXGA_H_RES_PIXELS, SXGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+    SXGA, LCD_BITS_PER_PIXEL_24,
     (SXGA_OSC_FREQUENCY/2),
-    SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH,
-    SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH
+    {SXGA_H_RES_PIXELS, SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH},
+    {SXGA_V_RES_PIXELS, SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH}
   },
   { // Mode 4 : UXGA : 1600 x 1200 x 24 bpp
-    UXGA, UXGA_H_RES_PIXELS, UXGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+    UXGA, LCD_BITS_PER_PIXEL_24,
     (UXGA_OSC_FREQUENCY/2),
-    UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH,
-    UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH
+    {UXGA_H_RES_PIXELS, UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH},
+    {UXGA_V_RES_PIXELS, UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH}
   },
   { // Mode 5 : HD : 1920 x 1080 x 24 bpp
-    HD, HD_H_RES_PIXELS, HD_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+    HD, LCD_BITS_PER_PIXEL_24,
     (HD_OSC_FREQUENCY/2),
-    HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH,
-    HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH
+    {HD_H_RES_PIXELS, HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH},
+    {HD_V_RES_PIXELS, HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH}
   }
 };
 
@@ -209,7 +203,7 @@ LcdPlatformGetMaxMode(VOID)
 {
   /* The following line will report correctly the total number of graphics modes
    * that could be supported by the graphics driver: */
-  return (sizeof (mResolutions) / sizeof (LCD_RESOLUTION));
+  return (sizeof (mDisplayModes) / sizeof (DISPLAY_MODE));
 }
 
 /** Set the requested display mode.
@@ -232,7 +226,7 @@ LcdPlatformSetMode (
   Status = ArmPlatformSysConfigSetDevice (
               SYS_CFG_OSC_SITE1,
               FixedPcdGet32 (PcdHdLcdVideoModeOscId),
-              mResolutions[ModeNumber].OscFreq
+              mDisplayModes[ModeNumber].OscFreq
               );
   if (EFI_ERROR (Status)) {
     ASSERT_EFI_ERROR (Status);
@@ -242,7 +236,7 @@ LcdPlatformSetMode (
   // Set the DVI into the new mode
   Status = ArmPlatformSysConfigSet (
               SYS_CFG_DVIMODE,
-              mResolutions[ModeNumber].Mode
+              mDisplayModes[ModeNumber].Mode
               );
   if (EFI_ERROR (Status)) {
     ASSERT_EFI_ERROR (Status);
@@ -285,11 +279,11 @@ LcdPlatformQueryMode (
   }
 
   Info->Version = 0;
-  Info->HorizontalResolution = mResolutions[ModeNumber].HorizontalResolution;
-  Info->VerticalResolution = mResolutions[ModeNumber].VerticalResolution;
-  Info->PixelsPerScanLine = mResolutions[ModeNumber].HorizontalResolution;
+  Info->HorizontalResolution = mDisplayModes[ModeNumber].Horizontal.Resolution;
+  Info->VerticalResolution = mDisplayModes[ModeNumber].Vertical.Resolution;
+  Info->PixelsPerScanLine = mDisplayModes[ModeNumber].Horizontal.Resolution;
 
-  switch (mResolutions[ModeNumber].Bpp) {
+  switch (mDisplayModes[ModeNumber].Bpp) {
     case LCD_BITS_PER_PIXEL_24:
       Info->PixelFormat                   = PixelRedGreenBlueReserved8BitPerColor;
       Info->PixelInformation.RedMask      = LCD_24BPP_RED_MASK;
@@ -317,29 +311,20 @@ LcdPlatformQueryMode (
 /** Returns the display timing information for the requested mode number.
   *
   * @param IN  ModeNumber           Mode Number.
-  * @param OUT HRes                 Pointer to horizontal resolution.
-  * @param OUT HSync                Pointer to horizontal sync width.
-  * @param OUT HBackPorch           Pointer to horizontal back porch.
-  * @param OUT HFrontPorch          Pointer to horizontal front porch.
-  * @param OUT VRes                 Pointer to vertical resolution.
-  * @param OUT VSync                Pointer to vertical sync width.
-  * @param OUT VBackPorch           Pointer to vertical back porch.
-  * @param OUT VFrontPorch          Pointer to vertical front porch.
+  * @param OUT Horizontal           Pointer to horizontal timing parameters.
+  *                                 (Resolution, Sync, Back porch, Front porch)
+  * @param OUT Vertical             Pointer to vertical timing parameters.
+  *                                 (Resolution, Sync, Back porch, Front porch)
+
   *
   * @retval EFI_SUCCESS             Success if the requested mode is found.
   * @retval EFI_INVALID_PARAMETER   Requested mode not found.
 **/
 EFI_STATUS
 LcdPlatformGetTimings (
-  IN  CONST UINT32                              ModeNumber,
-  OUT UINT32 * CONST                            HRes,
-  OUT UINT32 * CONST                            HSync,
-  OUT UINT32 * CONST                            HBackPorch,
-  OUT UINT32 * CONST                            HFrontPorch,
-  OUT UINT32 * CONST                            VRes,
-  OUT UINT32 * CONST                            VSync,
-  OUT UINT32 * CONST                            VBackPorch,
-  OUT UINT32 * CONST                            VFrontPorch
+  IN  CONST UINT32                  ModeNumber,
+  OUT CONST SCAN_TIMINGS         ** Horizontal,
+  OUT CONST SCAN_TIMINGS         ** Vertical
   )
 {
   if (ModeNumber >= LcdPlatformGetMaxMode ()) {
@@ -347,35 +332,14 @@ LcdPlatformGetTimings (
     return EFI_INVALID_PARAMETER;
   }
 
-  if (HRes == NULL
-    || HSync == NULL
-    || HBackPorch == NULL
-    || HFrontPorch == NULL
-    || VRes == NULL
-    || VSync == NULL
-    || VBackPorch == NULL
-    || VFrontPorch == NULL)
-  {
-    // One of the pointers is NULL
-    ASSERT (HRes != NULL);
-    ASSERT (HSync != NULL);
-    ASSERT (HBackPorch != NULL);
-    ASSERT (HFrontPorch != NULL);
-    ASSERT (VRes != NULL);
-    ASSERT (VSync != NULL);
-    ASSERT (VBackPorch != NULL);
-    ASSERT (VFrontPorch != NULL);
+  if (Horizontal == NULL || Vertical == NULL) {
+    ASSERT (Horizontal != NULL);
+    ASSERT (Vertical != NULL);
     return EFI_INVALID_PARAMETER;
   }
 
-  *HRes           = mResolutions[ModeNumber].HorizontalResolution;
-  *HSync          = mResolutions[ModeNumber].HSync;
-  *HBackPorch     = mResolutions[ModeNumber].HBackPorch;
-  *HFrontPorch    = mResolutions[ModeNumber].HFrontPorch;
-  *VRes           = mResolutions[ModeNumber].VerticalResolution;
-  *VSync          = mResolutions[ModeNumber].VSync;
-  *VBackPorch     = mResolutions[ModeNumber].VBackPorch;
-  *VFrontPorch    = mResolutions[ModeNumber].VFrontPorch;
+  *Horizontal = &mDisplayModes[ModeNumber].Horizontal;
+  *Vertical   = &mDisplayModes[ModeNumber].Vertical;
 
   return EFI_SUCCESS;
 }
@@ -401,7 +365,7 @@ LcdPlatformGetBpp (
     return EFI_INVALID_PARAMETER;
   }
 
-  *Bpp = mResolutions[ModeNumber].Bpp;
+  *Bpp = mDisplayModes[ModeNumber].Bpp;
 
   return EFI_SUCCESS;
 }
diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c b/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
index aa5a1ff9c1c25c51796b75230ca149ae3a92db4a..753c5b615361f83625cdd4f0506909721da014b6 100644
--- a/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
+++ b/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
@@ -28,117 +28,111 @@
 
 typedef struct {
   UINT32                     Mode;
-  UINT32                     HorizontalResolution;
-  UINT32                     VerticalResolution;
   LCD_BPP                    Bpp;
   UINT32                     OscFreq;
 
-  UINT32                     HSync;
-  UINT32                     HBackPorch;
-  UINT32                     HFrontPorch;
-  UINT32                     VSync;
-  UINT32                     VBackPorch;
-  UINT32                     VFrontPorch;
-} LCD_RESOLUTION;
+  SCAN_TIMINGS               Horizontal;
+  SCAN_TIMINGS               Vertical;
+} DISPLAY_MODE;
 
 /** The display modes supported by the platform.
 **/
-STATIC CONST LCD_RESOLUTION mResolutions[] = {
+STATIC CONST DISPLAY_MODE mDisplayModes[] = {
   {   // Mode 0 : VGA : 640 x 480 x 24 bpp
-      VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+      VGA, LCD_BITS_PER_PIXEL_24,
       VGA_OSC_FREQUENCY,
-      VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
-      VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
+      {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
+      {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
   },
   {   // Mode 1 : SVGA : 800 x 600 x 24 bpp
-      SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+      SVGA, LCD_BITS_PER_PIXEL_24,
       SVGA_OSC_FREQUENCY,
-      SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
-      SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
+      {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
+      {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
   },
   {   // Mode 2 : XGA : 1024 x 768 x 24 bpp
-      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+      XGA, LCD_BITS_PER_PIXEL_24,
       XGA_OSC_FREQUENCY,
-      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
-      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
+      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
+      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
   },
   {   // Mode 3 : SXGA : 1280 x 1024 x 24 bpp
-      SXGA, SXGA_H_RES_PIXELS, SXGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+      SXGA, LCD_BITS_PER_PIXEL_24,
       (SXGA_OSC_FREQUENCY/2),
-      SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH,
-      SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH
+      {SXGA_H_RES_PIXELS, SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH},
+      {SXGA_V_RES_PIXELS, SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH}
   },
   {   // Mode 4 : UXGA : 1600 x 1200 x 24 bpp
-      UXGA, UXGA_H_RES_PIXELS, UXGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+      UXGA, LCD_BITS_PER_PIXEL_24,
       (UXGA_OSC_FREQUENCY/2),
-      UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH,
-      UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH
+      {UXGA_H_RES_PIXELS, UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH},
+      {UXGA_V_RES_PIXELS, UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH}
   },
   {   // Mode 5 : HD : 1920 x 1080 x 24 bpp
-      HD, HD_H_RES_PIXELS, HD_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
+      HD, LCD_BITS_PER_PIXEL_24,
       (HD_OSC_FREQUENCY/2),
-      HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH,
-      HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH
+      {HD_H_RES_PIXELS, HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH},
+      {HD_V_RES_PIXELS, HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH}
   },
   {   // Mode 6 : VGA : 640 x 480 x 16 bpp (565 Mode)
-      VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_565,
+      VGA, LCD_BITS_PER_PIXEL_16_565,
       VGA_OSC_FREQUENCY,
-      VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
-      VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
+      {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
+      {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
   },
   {   // Mode 7 : SVGA : 800 x 600 x 16 bpp (565 Mode)
-      SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_565,
+      SVGA, LCD_BITS_PER_PIXEL_16_565,
       SVGA_OSC_FREQUENCY,
-      SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
-      SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
+      {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
+      {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
   },
   {   // Mode 8 : XGA : 1024 x 768 x 16 bpp (565 Mode)
-      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_565,
+      XGA, LCD_BITS_PER_PIXEL_16_565,
       XGA_OSC_FREQUENCY,
-      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
-      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
+      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
+      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
   },
   {   // Mode 9 : VGA : 640 x 480 x 15 bpp
-      VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_555,
+      VGA, LCD_BITS_PER_PIXEL_16_555,
       VGA_OSC_FREQUENCY,
-      VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
-      VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
+      {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
+      {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
   },
   {   // Mode 10 : SVGA : 800 x 600 x 15 bpp
-      SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_555,
+      SVGA, LCD_BITS_PER_PIXEL_16_555,
       SVGA_OSC_FREQUENCY,
-      SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
-      SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
+      {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
+      {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
   },
   {   // Mode 11 : XGA : 1024 x 768 x 15 bpp
-      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_555,
+      XGA, LCD_BITS_PER_PIXEL_16_555,
       XGA_OSC_FREQUENCY,
-      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
-      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
+      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
+      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
   },
   {   // Mode 12 : XGA : 1024 x 768 x 15 bpp - All the timing info is derived from Linux Kernel Driver Settings
-      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_555,
+      XGA, LCD_BITS_PER_PIXEL_16_555,
       63500000,
-      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
-      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
+      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
+      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
   },
   {   // Mode 13 : VGA : 640 x 480 x 12 bpp (444 Mode)
-      VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_12_444,
+      VGA, LCD_BITS_PER_PIXEL_12_444,
       VGA_OSC_FREQUENCY,
-      VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
-      VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
+      {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
+      {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
   },
   {   // Mode 14 : SVGA : 800 x 600 x 12 bpp (444 Mode)
-      SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_12_444,
+      SVGA, LCD_BITS_PER_PIXEL_12_444,
       SVGA_OSC_FREQUENCY,
-      SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
-      SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
+      {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
+      {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
   },
   {   // Mode 15 : XGA : 1024 x 768 x 12 bpp (444 Mode)
-      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_12_444,
+      XGA, LCD_BITS_PER_PIXEL_12_444,
       XGA_OSC_FREQUENCY,
-      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
-      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
+      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
+      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
   }
 };
 
@@ -308,7 +302,7 @@ LcdPlatformSetMode (
   Status = ArmPlatformSysConfigSetDevice (
              Function,
              OscillatorId,
-             mResolutions[ModeNumber].OscFreq
+             mDisplayModes[ModeNumber].OscFreq
              );
   if (EFI_ERROR (Status)) {
     ASSERT_EFI_ERROR (Status);
@@ -326,7 +320,7 @@ LcdPlatformSetMode (
       // Set the DVI into the new mode
       Status = ArmPlatformSysConfigSet (
                  SYS_CFG_DVIMODE,
-                 mResolutions[ModeNumber].Mode
+                 mDisplayModes[ModeNumber].Mode
                  );
       if (EFI_ERROR (Status)) {
         ASSERT_EFI_ERROR (Status);
@@ -368,11 +362,11 @@ LcdPlatformQueryMode (
   }
 
   Info->Version = 0;
-  Info->HorizontalResolution = mResolutions[ModeNumber].HorizontalResolution;
-  Info->VerticalResolution = mResolutions[ModeNumber].VerticalResolution;
-  Info->PixelsPerScanLine = mResolutions[ModeNumber].HorizontalResolution;
+  Info->HorizontalResolution = mDisplayModes[ModeNumber].Horizontal.Resolution;
+  Info->VerticalResolution = mDisplayModes[ModeNumber].Vertical.Resolution;
+  Info->PixelsPerScanLine = mDisplayModes[ModeNumber].Horizontal.Resolution;
 
-  switch (mResolutions[ModeNumber].Bpp) {
+  switch (mDisplayModes[ModeNumber].Bpp) {
     case LCD_BITS_PER_PIXEL_24:
       Info->PixelFormat                   = PixelRedGreenBlueReserved8BitPerColor;
       Info->PixelInformation.RedMask      = LCD_24BPP_RED_MASK;
@@ -400,14 +394,10 @@ LcdPlatformQueryMode (
 /** Returns the display timing information for the requested mode number.
   *
   * @param IN  ModeNumber           Mode Number.
-  * @param OUT HRes                 Pointer to horizontal resolution.
-  * @param OUT HSync                Pointer to horizontal sync width.
-  * @param OUT HBackPorch           Pointer to horizontal back porch.
-  * @param OUT HFrontPorch          Pointer to horizontal front porch.
-  * @param OUT VRes                 Pointer to vertical resolution.
-  * @param OUT VSync                Pointer to vertical sync width.
-  * @param OUT VBackPorch           Pointer to vertical back porch.
-  * @param OUT VFrontPorch          Pointer to vertical front porch.
+  * @param OUT Horizontal           Pointer to horizontal timing parameters.
+  *                                 (Resolution, Sync, Back porch, Front porch)
+  * @param OUT Vertical             Pointer to vertical timing parameters.
+  *                                 (Resolution, Sync, Back porch, Front porch)
   *
   * @retval EFI_SUCCESS             Success if the requested mode is found.
   * @retval EFI_INVALID_PARAMETER   Requested mode not found.
@@ -415,15 +405,9 @@ LcdPlatformQueryMode (
 **/
 EFI_STATUS
 LcdPlatformGetTimings (
-  IN  CONST UINT32                        ModeNumber,
-  OUT UINT32 * CONST                      HRes,
-  OUT UINT32 * CONST                      HSync,
-  OUT UINT32 * CONST                      HBackPorch,
-  OUT UINT32 * CONST                      HFrontPorch,
-  OUT UINT32 * CONST                      VRes,
-  OUT UINT32 * CONST                      VSync,
-  OUT UINT32 * CONST                      VBackPorch,
-  OUT UINT32 * CONST                      VFrontPorch
+  IN  CONST UINT32                  ModeNumber,
+  OUT CONST SCAN_TIMINGS         ** Horizontal,
+  OUT CONST SCAN_TIMINGS         ** Vertical
   )
 {
   if (ModeNumber >= LcdPlatformGetMaxMode ()) {
@@ -431,35 +415,16 @@ LcdPlatformGetTimings (
     return EFI_INVALID_PARAMETER;
   }
 
-  if (HRes == NULL
-    || HSync == NULL
-    || HBackPorch == NULL
-    || HFrontPorch == NULL
-    || VRes == NULL
-    || VSync == NULL
-    || VBackPorch == NULL
-    || VFrontPorch == NULL)
+  if (Horizontal == NULL || Vertical == NULL)
   {
     // One of the pointers is NULL
-    ASSERT (HRes != NULL);
-    ASSERT (HSync != NULL);
-    ASSERT (HBackPorch != NULL);
-    ASSERT (HFrontPorch != NULL);
-    ASSERT (VRes != NULL);
-    ASSERT (VSync != NULL);
-    ASSERT (VBackPorch != NULL);
-    ASSERT (VFrontPorch != NULL);
+    ASSERT (Horizontal != NULL);
+    ASSERT (Vertical != NULL);
     return EFI_INVALID_PARAMETER;
   }
 
-  *HRes           = mResolutions[ModeNumber].HorizontalResolution;
-  *HSync          = mResolutions[ModeNumber].HSync;
-  *HBackPorch     = mResolutions[ModeNumber].HBackPorch;
-  *HFrontPorch    = mResolutions[ModeNumber].HFrontPorch;
-  *VRes           = mResolutions[ModeNumber].VerticalResolution;
-  *VSync          = mResolutions[ModeNumber].VSync;
-  *VBackPorch     = mResolutions[ModeNumber].VBackPorch;
-  *VFrontPorch    = mResolutions[ModeNumber].VFrontPorch;
+  *Horizontal = &mDisplayModes[ModeNumber].Horizontal;
+  *Vertical   = &mDisplayModes[ModeNumber].Vertical;
 
   return EFI_SUCCESS;
 }
@@ -485,7 +450,7 @@ LcdPlatformGetBpp (
     return EFI_INVALID_PARAMETER;
   }
 
-  *Bpp = mResolutions[ModeNumber].Bpp;
+  *Bpp = mDisplayModes[ModeNumber].Bpp;
 
   return EFI_SUCCESS;
 }
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
index 33c555e75cafaf9affddd0992c4bd9f9289f6703..03153c06d314cb497c91889386ca6075c0c9f718 100644
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
@@ -84,35 +84,25 @@ LcdSetMode (
   IN CONST UINT32  ModeNumber
   )
 {
-  EFI_STATUS        Status;
-  UINT32            HRes;
-  UINT32            HSync;
-  UINT32            HBackPorch;
-  UINT32            HFrontPorch;
-  UINT32            VRes;
-  UINT32            VSync;
-  UINT32            VBackPorch;
-  UINT32            VFrontPorch;
-  UINT32            BytesPerPixel;
-  LCD_BPP           LcdBpp;
+  EFI_STATUS          Status;
+  CONST SCAN_TIMINGS *Horizontal;
+  CONST SCAN_TIMINGS *Vertical;
+  UINT32              BytesPerPixel;
+  LCD_BPP             LcdBpp;
 
 
   // Set the video mode timings and other relevant information
   Status = LcdPlatformGetTimings (
              ModeNumber,
-             &HRes,
-             &HSync,
-             &HBackPorch,
-             &HFrontPorch,
-             &VRes,
-             &VSync,
-             &VBackPorch,
-             &VFrontPorch
+             &Horizontal,
+             &Vertical
              );
   if (EFI_ERROR (Status)) {
     ASSERT_EFI_ERROR (Status);
     return Status;
   }
+  ASSERT (Horizontal != NULL);
+  ASSERT (Vertical != NULL);
 
   Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
   if (EFI_ERROR (Status)) {
@@ -126,21 +116,26 @@ LcdSetMode (
   MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_DISABLE);
 
   // Update the frame buffer information with the new settings
-  MmioWrite32 (HDLCD_REG_FB_LINE_LENGTH, HRes * BytesPerPixel);
-  MmioWrite32 (HDLCD_REG_FB_LINE_PITCH,  HRes * BytesPerPixel);
-  MmioWrite32 (HDLCD_REG_FB_LINE_COUNT,  VRes - 1);
+  MmioWrite32 (
+    HDLCD_REG_FB_LINE_LENGTH,
+    Horizontal->Resolution * BytesPerPixel
+    );
+
+  MmioWrite32 (HDLCD_REG_FB_LINE_PITCH, Horizontal->Resolution * BytesPerPixel);
+
+  MmioWrite32 (HDLCD_REG_FB_LINE_COUNT, Vertical->Resolution - 1);
 
   // Set the vertical timing information
-  MmioWrite32 (HDLCD_REG_V_SYNC,         VSync);
-  MmioWrite32 (HDLCD_REG_V_BACK_PORCH,   VBackPorch);
-  MmioWrite32 (HDLCD_REG_V_DATA,         VRes - 1);
-  MmioWrite32 (HDLCD_REG_V_FRONT_PORCH,  VFrontPorch);
+  MmioWrite32 (HDLCD_REG_V_SYNC,        Vertical->Sync);
+  MmioWrite32 (HDLCD_REG_V_BACK_PORCH,  Vertical->BackPorch);
+  MmioWrite32 (HDLCD_REG_V_DATA,        Vertical->Resolution - 1);
+  MmioWrite32 (HDLCD_REG_V_FRONT_PORCH, Vertical->FrontPorch);
 
   // Set the horizontal timing information
-  MmioWrite32 (HDLCD_REG_H_SYNC,         HSync);
-  MmioWrite32 (HDLCD_REG_H_BACK_PORCH,   HBackPorch);
-  MmioWrite32 (HDLCD_REG_H_DATA,         HRes - 1);
-  MmioWrite32 (HDLCD_REG_H_FRONT_PORCH,  HFrontPorch);
+  MmioWrite32 (HDLCD_REG_H_SYNC,        Horizontal->Sync);
+  MmioWrite32 (HDLCD_REG_H_BACK_PORCH,  Horizontal->BackPorch);
+  MmioWrite32 (HDLCD_REG_H_DATA,        Horizontal->Resolution - 1);
+  MmioWrite32 (HDLCD_REG_H_FRONT_PORCH, Horizontal->FrontPorch);
 
   // Enable the controller
   MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_ENABLE);
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
index 12db9d910ed1d7874095a5f79fe588491811f75a..6de60491e9fd0c5bca71e743aac2862ff85f6e7e 100644
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
@@ -86,34 +86,24 @@ LcdSetMode (
   IN CONST UINT32  ModeNumber
   )
 {
-  EFI_STATUS        Status;
-  UINT32            HRes;
-  UINT32            HSync;
-  UINT32            HBackPorch;
-  UINT32            HFrontPorch;
-  UINT32            VRes;
-  UINT32            VSync;
-  UINT32            VBackPorch;
-  UINT32            VFrontPorch;
-  UINT32            LcdControl;
-  LCD_BPP           LcdBpp;
+  EFI_STATUS          Status;
+  CONST SCAN_TIMINGS *Horizontal;
+  CONST SCAN_TIMINGS *Vertical;
+  UINT32              LcdControl;
+  LCD_BPP             LcdBpp;
 
   // Set the video mode timings and other relevant information
   Status = LcdPlatformGetTimings (
              ModeNumber,
-             &HRes,
-             &HSync,
-             &HBackPorch,
-             &HFrontPorch,
-             &VRes,
-             &VSync,
-             &VBackPorch,
-             &VFrontPorch
+             &Horizontal,
+             &Vertical
              );
   if (EFI_ERROR (Status)) {
     ASSERT_EFI_ERROR (Status);
     return Status;
   }
+  ASSERT (Horizontal != NULL);
+  ASSERT (Vertical != NULL);
 
   Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
   if (EFI_ERROR (Status)) {
@@ -127,15 +117,29 @@ LcdSetMode (
   // Set Timings
   MmioWrite32 (
     PL111_REG_LCD_TIMING_0,
-    HOR_AXIS_PANEL (HBackPorch, HFrontPorch, HSync, HRes)
+    HOR_AXIS_PANEL (
+      Horizontal->BackPorch,
+      Horizontal->FrontPorch,
+      Horizontal->Sync,
+      Horizontal->Resolution
+      )
     );
 
   MmioWrite32 (
     PL111_REG_LCD_TIMING_1,
-    VER_AXIS_PANEL (VBackPorch, VFrontPorch, VSync, VRes)
+    VER_AXIS_PANEL (
+      Vertical->BackPorch,
+      Vertical->FrontPorch,
+      Vertical->Sync,
+      Vertical->Resolution
+      )
+    );
+
+  MmioWrite32 (
+    PL111_REG_LCD_TIMING_2,
+    CLK_SIG_POLARITY (Horizontal->Resolution)
     );
 
-  MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY (HRes));
   MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
 
   // PL111_REG_LCD_CONTROL
-- 
Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH 12/19] ArmPlatformPkg: Redefine LcdPlatformGetTimings function
Posted by Leif Lindholm 7 years, 2 months ago
On Tue, Sep 26, 2017 at 09:15:22PM +0100, evan.lloyd@arm.com wrote:
> From: Girish Pathak <girish.pathak@arm.com>
> 
> The LcdPlatformGetTimings interface function takes similar sets of
> multiple parameters for horizontal and vertical timings which can be
> aggregated in a common data type. This change defines a structure
> SCAN_TIMINGS for this which can be used to describe both horizontal and
> vertical scan timings, and accordingly redefines the
> LcdPlatformGetTiming interface, greatly reducing the amount of data
> passed about.
> 
> Similarly the mode definition tables are also changed to use this data
> type and thus enable pass through access.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Girish Pathak <girish.pathak@arm.com>
> Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>
> ---
>  ArmPlatformPkg/Include/Library/LcdPlatformLib.h                                    |  32 ++--
>  ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c       | 122 +++++---------
>  ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c | 177 ++++++++------------
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c                                |  55 +++---
>  ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c                             |  48 +++---
>  5 files changed, 180 insertions(+), 254 deletions(-)
> 
> diff --git a/ArmPlatformPkg/Include/Library/LcdPlatformLib.h b/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
> index 48bdd8a51411137df040aa797fcff272785f7a35..f2f345b18fd15f2cde159fd42d3208a28f598a1f 100644
> --- a/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
> +++ b/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
> @@ -152,6 +152,14 @@ typedef enum {
>    LCD_BITS_PER_PIXEL_12_444
>  } LCD_BPP;
>  
> +// Display timing settings.
> +typedef struct {
> +  UINT32                      Resolution;
> +  UINT32                      Sync;
> +  UINT32                      BackPorch;
> +  UINT32                      FrontPorch;
> +} SCAN_TIMINGS;
> +
>  /** Platform related initialization function.
>    *
>    * @param IN Handle               Handle to the LCD device instance.
> @@ -219,29 +227,19 @@ LcdPlatformQueryMode (
>  /** Returns the display timing information for the requested mode number.
>    *
>    * @param IN  ModeNumber           Mode Number.
> -  * @param OUT HRes                 Pointer to horizontal resolution.
> -  * @param OUT HSync                Pointer to horizontal sync width.
> -  * @param OUT HBackPorch           Pointer to horizontal back porch.
> -  * @param OUT HFrontPorch          Pointer to horizontal front porch.
> -  * @param OUT VRes                 Pointer to vertical resolution.
> -  * @param OUT VSync                Pointer to vertical sync width.
> -  * @param OUT VBackPorch           Pointer to vertical back porch.
> -  * @param OUT VFrontPorch          Pointer to vertical front porch.
> -
> +  * @param OUT Horizontal           Pointer to horizontal timing parameters.
> +  *                                 (Resolution, Sync, Back porch, Front porch)
> +  * @param OUT Vertical             Pointer to vertical timing parameters.
> +  *                                 (Resolution, Sync, Back porch, Front porch)
> +  *
>    * @retval EFI_SUCCESS             Success if the requested mode is found.
>    * @retval EFI_INVALID_PARAMETER   Requested mode not found.
>  **/
>  EFI_STATUS
>  LcdPlatformGetTimings (
>    IN  UINT32                              ModeNumber,
> -  OUT UINT32*                             HRes,
> -  OUT UINT32*                             HSync,
> -  OUT UINT32*                             HBackPorch,
> -  OUT UINT32*                             HFrontPorch,
> -  OUT UINT32*                             VRes,
> -  OUT UINT32*                             VSync,
> -  OUT UINT32*                             VBackPorch,
> -  OUT UINT32*                             VFrontPorch
> +  OUT CONST SCAN_TIMINGS                  **Horizontal,
> +  OUT CONST SCAN_TIMINGS                  **Vertical
>    );
>  
>  /** Return bits per pixel information for a mode number.
> diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c b/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
> index a6c4f414685db907a3fbc9a009969be8a09f7415..dc2c5fb89923304c46d137ec8eaefc9418548d06 100644
> --- a/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
> +++ b/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
> @@ -30,58 +30,52 @@
>  
>  typedef struct {
>    UINT32                     Mode;
> -  UINT32                     HorizontalResolution;
> -  UINT32                     VerticalResolution;
>    LCD_BPP                    Bpp;
>    UINT32                     OscFreq;
>  
>    // These are used by HDLCD
> -  UINT32                     HSync;
> -  UINT32                     HBackPorch;
> -  UINT32                     HFrontPorch;
> -  UINT32                     VSync;
> -  UINT32                     VBackPorch;
> -  UINT32                     VFrontPorch;
> -} LCD_RESOLUTION;
> +  SCAN_TIMINGS               Horizontal;
> +  SCAN_TIMINGS               Vertical;
> +} DISPLAY_MODE;
>  
>  /** The display modes supported by the platform.
>  **/
> -STATIC CONST LCD_RESOLUTION mResolutions[] = {
> +STATIC CONST DISPLAY_MODE mDisplayModes[] = {
>    { // Mode 0 : VGA : 640 x 480 x 24 bpp
> -    VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +    VGA, LCD_BITS_PER_PIXEL_24,
>      VGA_OSC_FREQUENCY,
> -    VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
> -    VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
> +    {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
> +    {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
>    },
>    { // Mode 1 : SVGA : 800 x 600 x 24 bpp
> -    SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +    SVGA, LCD_BITS_PER_PIXEL_24,
>      SVGA_OSC_FREQUENCY,
> -    SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
> -    SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
> +    {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
> +    {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
>    },
>    { // Mode 2 : XGA : 1024 x 768 x 24 bpp
> -    XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +    XGA, LCD_BITS_PER_PIXEL_24,
>      XGA_OSC_FREQUENCY,
> -    XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
> -    XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
> +    {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
> +    {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
>    },
>    { // Mode 3 : SXGA : 1280 x 1024 x 24 bpp
> -    SXGA, SXGA_H_RES_PIXELS, SXGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +    SXGA, LCD_BITS_PER_PIXEL_24,
>      (SXGA_OSC_FREQUENCY/2),
> -    SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH,
> -    SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH
> +    {SXGA_H_RES_PIXELS, SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH},
> +    {SXGA_V_RES_PIXELS, SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH}
>    },
>    { // Mode 4 : UXGA : 1600 x 1200 x 24 bpp
> -    UXGA, UXGA_H_RES_PIXELS, UXGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +    UXGA, LCD_BITS_PER_PIXEL_24,
>      (UXGA_OSC_FREQUENCY/2),
> -    UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH,
> -    UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH
> +    {UXGA_H_RES_PIXELS, UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH},
> +    {UXGA_V_RES_PIXELS, UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH}
>    },
>    { // Mode 5 : HD : 1920 x 1080 x 24 bpp
> -    HD, HD_H_RES_PIXELS, HD_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +    HD, LCD_BITS_PER_PIXEL_24,
>      (HD_OSC_FREQUENCY/2),
> -    HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH,
> -    HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH
> +    {HD_H_RES_PIXELS, HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH},
> +    {HD_V_RES_PIXELS, HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH}
>    }
>  };
>  
> @@ -209,7 +203,7 @@ LcdPlatformGetMaxMode(VOID)
>  {
>    /* The following line will report correctly the total number of graphics modes
>     * that could be supported by the graphics driver: */
> -  return (sizeof (mResolutions) / sizeof (LCD_RESOLUTION));
> +  return (sizeof (mDisplayModes) / sizeof (DISPLAY_MODE));
>  }
>  
>  /** Set the requested display mode.
> @@ -232,7 +226,7 @@ LcdPlatformSetMode (
>    Status = ArmPlatformSysConfigSetDevice (
>                SYS_CFG_OSC_SITE1,
>                FixedPcdGet32 (PcdHdLcdVideoModeOscId),
> -              mResolutions[ModeNumber].OscFreq
> +              mDisplayModes[ModeNumber].OscFreq

This and the case below will need to be rebased onto something
that fixes the indentation from 3-space to 2-space, and updated.

>                );
>    if (EFI_ERROR (Status)) {
>      ASSERT_EFI_ERROR (Status);
> @@ -242,7 +236,7 @@ LcdPlatformSetMode (
>    // Set the DVI into the new mode
>    Status = ArmPlatformSysConfigSet (
>                SYS_CFG_DVIMODE,
> -              mResolutions[ModeNumber].Mode
> +              mDisplayModes[ModeNumber].Mode
>                );
>    if (EFI_ERROR (Status)) {
>      ASSERT_EFI_ERROR (Status);
> @@ -285,11 +279,11 @@ LcdPlatformQueryMode (
>    }
>  
>    Info->Version = 0;
> -  Info->HorizontalResolution = mResolutions[ModeNumber].HorizontalResolution;
> -  Info->VerticalResolution = mResolutions[ModeNumber].VerticalResolution;
> -  Info->PixelsPerScanLine = mResolutions[ModeNumber].HorizontalResolution;
> +  Info->HorizontalResolution = mDisplayModes[ModeNumber].Horizontal.Resolution;
> +  Info->VerticalResolution = mDisplayModes[ModeNumber].Vertical.Resolution;
> +  Info->PixelsPerScanLine = mDisplayModes[ModeNumber].Horizontal.Resolution;
>  
> -  switch (mResolutions[ModeNumber].Bpp) {
> +  switch (mDisplayModes[ModeNumber].Bpp) {
>      case LCD_BITS_PER_PIXEL_24:
>        Info->PixelFormat                   = PixelRedGreenBlueReserved8BitPerColor;
>        Info->PixelInformation.RedMask      = LCD_24BPP_RED_MASK;
> @@ -317,29 +311,20 @@ LcdPlatformQueryMode (
>  /** Returns the display timing information for the requested mode number.
>    *
>    * @param IN  ModeNumber           Mode Number.
> -  * @param OUT HRes                 Pointer to horizontal resolution.
> -  * @param OUT HSync                Pointer to horizontal sync width.
> -  * @param OUT HBackPorch           Pointer to horizontal back porch.
> -  * @param OUT HFrontPorch          Pointer to horizontal front porch.
> -  * @param OUT VRes                 Pointer to vertical resolution.
> -  * @param OUT VSync                Pointer to vertical sync width.
> -  * @param OUT VBackPorch           Pointer to vertical back porch.
> -  * @param OUT VFrontPorch          Pointer to vertical front porch.
> +  * @param OUT Horizontal           Pointer to horizontal timing parameters.
> +  *                                 (Resolution, Sync, Back porch, Front porch)
> +  * @param OUT Vertical             Pointer to vertical timing parameters.
> +  *                                 (Resolution, Sync, Back porch, Front porch)
> +
>    *
>    * @retval EFI_SUCCESS             Success if the requested mode is found.
>    * @retval EFI_INVALID_PARAMETER   Requested mode not found.
>  **/
>  EFI_STATUS
>  LcdPlatformGetTimings (
> -  IN  CONST UINT32                              ModeNumber,
> -  OUT UINT32 * CONST                            HRes,
> -  OUT UINT32 * CONST                            HSync,
> -  OUT UINT32 * CONST                            HBackPorch,
> -  OUT UINT32 * CONST                            HFrontPorch,
> -  OUT UINT32 * CONST                            VRes,
> -  OUT UINT32 * CONST                            VSync,
> -  OUT UINT32 * CONST                            VBackPorch,
> -  OUT UINT32 * CONST                            VFrontPorch
> +  IN  CONST UINT32                  ModeNumber,
> +  OUT CONST SCAN_TIMINGS         ** Horizontal,
> +  OUT CONST SCAN_TIMINGS         ** Vertical
>    )
>  {
>    if (ModeNumber >= LcdPlatformGetMaxMode ()) {
> @@ -347,35 +332,14 @@ LcdPlatformGetTimings (
>      return EFI_INVALID_PARAMETER;
>    }
>  
> -  if (HRes == NULL
> -    || HSync == NULL
> -    || HBackPorch == NULL
> -    || HFrontPorch == NULL
> -    || VRes == NULL
> -    || VSync == NULL
> -    || VBackPorch == NULL
> -    || VFrontPorch == NULL)
> -  {
> -    // One of the pointers is NULL
> -    ASSERT (HRes != NULL);
> -    ASSERT (HSync != NULL);
> -    ASSERT (HBackPorch != NULL);
> -    ASSERT (HFrontPorch != NULL);
> -    ASSERT (VRes != NULL);
> -    ASSERT (VSync != NULL);
> -    ASSERT (VBackPorch != NULL);
> -    ASSERT (VFrontPorch != NULL);
> +  if (Horizontal == NULL || Vertical == NULL) {
> +    ASSERT (Horizontal != NULL);
> +    ASSERT (Vertical != NULL);
>      return EFI_INVALID_PARAMETER;
>    }
>  
> -  *HRes           = mResolutions[ModeNumber].HorizontalResolution;
> -  *HSync          = mResolutions[ModeNumber].HSync;
> -  *HBackPorch     = mResolutions[ModeNumber].HBackPorch;
> -  *HFrontPorch    = mResolutions[ModeNumber].HFrontPorch;
> -  *VRes           = mResolutions[ModeNumber].VerticalResolution;
> -  *VSync          = mResolutions[ModeNumber].VSync;
> -  *VBackPorch     = mResolutions[ModeNumber].VBackPorch;
> -  *VFrontPorch    = mResolutions[ModeNumber].VFrontPorch;
> +  *Horizontal = &mDisplayModes[ModeNumber].Horizontal;
> +  *Vertical   = &mDisplayModes[ModeNumber].Vertical;
>  
>    return EFI_SUCCESS;
>  }
> @@ -401,7 +365,7 @@ LcdPlatformGetBpp (
>      return EFI_INVALID_PARAMETER;
>    }
>  
> -  *Bpp = mResolutions[ModeNumber].Bpp;
> +  *Bpp = mDisplayModes[ModeNumber].Bpp;
>  
>    return EFI_SUCCESS;
>  }
> diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c b/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
> index aa5a1ff9c1c25c51796b75230ca149ae3a92db4a..753c5b615361f83625cdd4f0506909721da014b6 100644
> --- a/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
> +++ b/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
> @@ -28,117 +28,111 @@
>  
>  typedef struct {
>    UINT32                     Mode;
> -  UINT32                     HorizontalResolution;
> -  UINT32                     VerticalResolution;
>    LCD_BPP                    Bpp;
>    UINT32                     OscFreq;
>  
> -  UINT32                     HSync;
> -  UINT32                     HBackPorch;
> -  UINT32                     HFrontPorch;
> -  UINT32                     VSync;
> -  UINT32                     VBackPorch;
> -  UINT32                     VFrontPorch;
> -} LCD_RESOLUTION;
> +  SCAN_TIMINGS               Horizontal;
> +  SCAN_TIMINGS               Vertical;
> +} DISPLAY_MODE;
>  
>  /** The display modes supported by the platform.
>  **/
> -STATIC CONST LCD_RESOLUTION mResolutions[] = {
> +STATIC CONST DISPLAY_MODE mDisplayModes[] = {
>    {   // Mode 0 : VGA : 640 x 480 x 24 bpp

Again, indentation needs fixing in earlier patch and this one
regenerated on top.

No further comments on this patch, other than : nice bit of cleanup.

/
    Leif

> -      VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +      VGA, LCD_BITS_PER_PIXEL_24,
>        VGA_OSC_FREQUENCY,
> -      VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
> -      VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
> +      {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
> +      {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
>    },
>    {   // Mode 1 : SVGA : 800 x 600 x 24 bpp
> -      SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +      SVGA, LCD_BITS_PER_PIXEL_24,
>        SVGA_OSC_FREQUENCY,
> -      SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
> -      SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
> +      {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
> +      {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
>    },
>    {   // Mode 2 : XGA : 1024 x 768 x 24 bpp
> -      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +      XGA, LCD_BITS_PER_PIXEL_24,
>        XGA_OSC_FREQUENCY,
> -      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
> -      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
> +      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
> +      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
>    },
>    {   // Mode 3 : SXGA : 1280 x 1024 x 24 bpp
> -      SXGA, SXGA_H_RES_PIXELS, SXGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +      SXGA, LCD_BITS_PER_PIXEL_24,
>        (SXGA_OSC_FREQUENCY/2),
> -      SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH,
> -      SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH
> +      {SXGA_H_RES_PIXELS, SXGA_H_SYNC, SXGA_H_BACK_PORCH, SXGA_H_FRONT_PORCH},
> +      {SXGA_V_RES_PIXELS, SXGA_V_SYNC, SXGA_V_BACK_PORCH, SXGA_V_FRONT_PORCH}
>    },
>    {   // Mode 4 : UXGA : 1600 x 1200 x 24 bpp
> -      UXGA, UXGA_H_RES_PIXELS, UXGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +      UXGA, LCD_BITS_PER_PIXEL_24,
>        (UXGA_OSC_FREQUENCY/2),
> -      UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH,
> -      UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH
> +      {UXGA_H_RES_PIXELS, UXGA_H_SYNC, UXGA_H_BACK_PORCH, UXGA_H_FRONT_PORCH},
> +      {UXGA_V_RES_PIXELS, UXGA_V_SYNC, UXGA_V_BACK_PORCH, UXGA_V_FRONT_PORCH}
>    },
>    {   // Mode 5 : HD : 1920 x 1080 x 24 bpp
> -      HD, HD_H_RES_PIXELS, HD_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24,
> +      HD, LCD_BITS_PER_PIXEL_24,
>        (HD_OSC_FREQUENCY/2),
> -      HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH,
> -      HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH
> +      {HD_H_RES_PIXELS, HD_H_SYNC, HD_H_BACK_PORCH, HD_H_FRONT_PORCH},
> +      {HD_V_RES_PIXELS, HD_V_SYNC, HD_V_BACK_PORCH, HD_V_FRONT_PORCH}
>    },
>    {   // Mode 6 : VGA : 640 x 480 x 16 bpp (565 Mode)
> -      VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_565,
> +      VGA, LCD_BITS_PER_PIXEL_16_565,
>        VGA_OSC_FREQUENCY,
> -      VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
> -      VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
> +      {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
> +      {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
>    },
>    {   // Mode 7 : SVGA : 800 x 600 x 16 bpp (565 Mode)
> -      SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_565,
> +      SVGA, LCD_BITS_PER_PIXEL_16_565,
>        SVGA_OSC_FREQUENCY,
> -      SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
> -      SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
> +      {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
> +      {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
>    },
>    {   // Mode 8 : XGA : 1024 x 768 x 16 bpp (565 Mode)
> -      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_565,
> +      XGA, LCD_BITS_PER_PIXEL_16_565,
>        XGA_OSC_FREQUENCY,
> -      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
> -      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
> +      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
> +      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
>    },
>    {   // Mode 9 : VGA : 640 x 480 x 15 bpp
> -      VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_555,
> +      VGA, LCD_BITS_PER_PIXEL_16_555,
>        VGA_OSC_FREQUENCY,
> -      VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
> -      VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
> +      {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
> +      {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
>    },
>    {   // Mode 10 : SVGA : 800 x 600 x 15 bpp
> -      SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_555,
> +      SVGA, LCD_BITS_PER_PIXEL_16_555,
>        SVGA_OSC_FREQUENCY,
> -      SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
> -      SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
> +      {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
> +      {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
>    },
>    {   // Mode 11 : XGA : 1024 x 768 x 15 bpp
> -      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_555,
> +      XGA, LCD_BITS_PER_PIXEL_16_555,
>        XGA_OSC_FREQUENCY,
> -      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
> -      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
> +      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
> +      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
>    },
>    {   // Mode 12 : XGA : 1024 x 768 x 15 bpp - All the timing info is derived from Linux Kernel Driver Settings
> -      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_16_555,
> +      XGA, LCD_BITS_PER_PIXEL_16_555,
>        63500000,
> -      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
> -      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
> +      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
> +      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
>    },
>    {   // Mode 13 : VGA : 640 x 480 x 12 bpp (444 Mode)
> -      VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_12_444,
> +      VGA, LCD_BITS_PER_PIXEL_12_444,
>        VGA_OSC_FREQUENCY,
> -      VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,
> -      VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH
> +      {VGA_H_RES_PIXELS, VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH},
> +      {VGA_V_RES_PIXELS, VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH}
>    },
>    {   // Mode 14 : SVGA : 800 x 600 x 12 bpp (444 Mode)
> -      SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_12_444,
> +      SVGA, LCD_BITS_PER_PIXEL_12_444,
>        SVGA_OSC_FREQUENCY,
> -      SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,
> -      SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH
> +      {SVGA_H_RES_PIXELS, SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH},
> +      {SVGA_V_RES_PIXELS, SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH}
>    },
>    {   // Mode 15 : XGA : 1024 x 768 x 12 bpp (444 Mode)
> -      XGA, XGA_H_RES_PIXELS, XGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_12_444,
> +      XGA, LCD_BITS_PER_PIXEL_12_444,
>        XGA_OSC_FREQUENCY,
> -      XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH,
> -      XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH
> +      {XGA_H_RES_PIXELS, XGA_H_SYNC, XGA_H_BACK_PORCH, XGA_H_FRONT_PORCH},
> +      {XGA_V_RES_PIXELS, XGA_V_SYNC, XGA_V_BACK_PORCH, XGA_V_FRONT_PORCH}
>    }
>  };
>  
> @@ -308,7 +302,7 @@ LcdPlatformSetMode (
>    Status = ArmPlatformSysConfigSetDevice (
>               Function,
>               OscillatorId,
> -             mResolutions[ModeNumber].OscFreq
> +             mDisplayModes[ModeNumber].OscFreq
>               );
>    if (EFI_ERROR (Status)) {
>      ASSERT_EFI_ERROR (Status);
> @@ -326,7 +320,7 @@ LcdPlatformSetMode (
>        // Set the DVI into the new mode
>        Status = ArmPlatformSysConfigSet (
>                   SYS_CFG_DVIMODE,
> -                 mResolutions[ModeNumber].Mode
> +                 mDisplayModes[ModeNumber].Mode
>                   );
>        if (EFI_ERROR (Status)) {
>          ASSERT_EFI_ERROR (Status);
> @@ -368,11 +362,11 @@ LcdPlatformQueryMode (
>    }
>  
>    Info->Version = 0;
> -  Info->HorizontalResolution = mResolutions[ModeNumber].HorizontalResolution;
> -  Info->VerticalResolution = mResolutions[ModeNumber].VerticalResolution;
> -  Info->PixelsPerScanLine = mResolutions[ModeNumber].HorizontalResolution;
> +  Info->HorizontalResolution = mDisplayModes[ModeNumber].Horizontal.Resolution;
> +  Info->VerticalResolution = mDisplayModes[ModeNumber].Vertical.Resolution;
> +  Info->PixelsPerScanLine = mDisplayModes[ModeNumber].Horizontal.Resolution;
>  
> -  switch (mResolutions[ModeNumber].Bpp) {
> +  switch (mDisplayModes[ModeNumber].Bpp) {
>      case LCD_BITS_PER_PIXEL_24:
>        Info->PixelFormat                   = PixelRedGreenBlueReserved8BitPerColor;
>        Info->PixelInformation.RedMask      = LCD_24BPP_RED_MASK;
> @@ -400,14 +394,10 @@ LcdPlatformQueryMode (
>  /** Returns the display timing information for the requested mode number.
>    *
>    * @param IN  ModeNumber           Mode Number.
> -  * @param OUT HRes                 Pointer to horizontal resolution.
> -  * @param OUT HSync                Pointer to horizontal sync width.
> -  * @param OUT HBackPorch           Pointer to horizontal back porch.
> -  * @param OUT HFrontPorch          Pointer to horizontal front porch.
> -  * @param OUT VRes                 Pointer to vertical resolution.
> -  * @param OUT VSync                Pointer to vertical sync width.
> -  * @param OUT VBackPorch           Pointer to vertical back porch.
> -  * @param OUT VFrontPorch          Pointer to vertical front porch.
> +  * @param OUT Horizontal           Pointer to horizontal timing parameters.
> +  *                                 (Resolution, Sync, Back porch, Front porch)
> +  * @param OUT Vertical             Pointer to vertical timing parameters.
> +  *                                 (Resolution, Sync, Back porch, Front porch)
>    *
>    * @retval EFI_SUCCESS             Success if the requested mode is found.
>    * @retval EFI_INVALID_PARAMETER   Requested mode not found.
> @@ -415,15 +405,9 @@ LcdPlatformQueryMode (
>  **/
>  EFI_STATUS
>  LcdPlatformGetTimings (
> -  IN  CONST UINT32                        ModeNumber,
> -  OUT UINT32 * CONST                      HRes,
> -  OUT UINT32 * CONST                      HSync,
> -  OUT UINT32 * CONST                      HBackPorch,
> -  OUT UINT32 * CONST                      HFrontPorch,
> -  OUT UINT32 * CONST                      VRes,
> -  OUT UINT32 * CONST                      VSync,
> -  OUT UINT32 * CONST                      VBackPorch,
> -  OUT UINT32 * CONST                      VFrontPorch
> +  IN  CONST UINT32                  ModeNumber,
> +  OUT CONST SCAN_TIMINGS         ** Horizontal,
> +  OUT CONST SCAN_TIMINGS         ** Vertical
>    )
>  {
>    if (ModeNumber >= LcdPlatformGetMaxMode ()) {
> @@ -431,35 +415,16 @@ LcdPlatformGetTimings (
>      return EFI_INVALID_PARAMETER;
>    }
>  
> -  if (HRes == NULL
> -    || HSync == NULL
> -    || HBackPorch == NULL
> -    || HFrontPorch == NULL
> -    || VRes == NULL
> -    || VSync == NULL
> -    || VBackPorch == NULL
> -    || VFrontPorch == NULL)
> +  if (Horizontal == NULL || Vertical == NULL)
>    {
>      // One of the pointers is NULL
> -    ASSERT (HRes != NULL);
> -    ASSERT (HSync != NULL);
> -    ASSERT (HBackPorch != NULL);
> -    ASSERT (HFrontPorch != NULL);
> -    ASSERT (VRes != NULL);
> -    ASSERT (VSync != NULL);
> -    ASSERT (VBackPorch != NULL);
> -    ASSERT (VFrontPorch != NULL);
> +    ASSERT (Horizontal != NULL);
> +    ASSERT (Vertical != NULL);
>      return EFI_INVALID_PARAMETER;
>    }
>  
> -  *HRes           = mResolutions[ModeNumber].HorizontalResolution;
> -  *HSync          = mResolutions[ModeNumber].HSync;
> -  *HBackPorch     = mResolutions[ModeNumber].HBackPorch;
> -  *HFrontPorch    = mResolutions[ModeNumber].HFrontPorch;
> -  *VRes           = mResolutions[ModeNumber].VerticalResolution;
> -  *VSync          = mResolutions[ModeNumber].VSync;
> -  *VBackPorch     = mResolutions[ModeNumber].VBackPorch;
> -  *VFrontPorch    = mResolutions[ModeNumber].VFrontPorch;
> +  *Horizontal = &mDisplayModes[ModeNumber].Horizontal;
> +  *Vertical   = &mDisplayModes[ModeNumber].Vertical;
>  
>    return EFI_SUCCESS;
>  }
> @@ -485,7 +450,7 @@ LcdPlatformGetBpp (
>      return EFI_INVALID_PARAMETER;
>    }
>  
> -  *Bpp = mResolutions[ModeNumber].Bpp;
> +  *Bpp = mDisplayModes[ModeNumber].Bpp;
>  
>    return EFI_SUCCESS;
>  }
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
> index 33c555e75cafaf9affddd0992c4bd9f9289f6703..03153c06d314cb497c91889386ca6075c0c9f718 100644
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
> +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
> @@ -84,35 +84,25 @@ LcdSetMode (
>    IN CONST UINT32  ModeNumber
>    )
>  {
> -  EFI_STATUS        Status;
> -  UINT32            HRes;
> -  UINT32            HSync;
> -  UINT32            HBackPorch;
> -  UINT32            HFrontPorch;
> -  UINT32            VRes;
> -  UINT32            VSync;
> -  UINT32            VBackPorch;
> -  UINT32            VFrontPorch;
> -  UINT32            BytesPerPixel;
> -  LCD_BPP           LcdBpp;
> +  EFI_STATUS          Status;
> +  CONST SCAN_TIMINGS *Horizontal;
> +  CONST SCAN_TIMINGS *Vertical;
> +  UINT32              BytesPerPixel;
> +  LCD_BPP             LcdBpp;
>  
>  
>    // Set the video mode timings and other relevant information
>    Status = LcdPlatformGetTimings (
>               ModeNumber,
> -             &HRes,
> -             &HSync,
> -             &HBackPorch,
> -             &HFrontPorch,
> -             &VRes,
> -             &VSync,
> -             &VBackPorch,
> -             &VFrontPorch
> +             &Horizontal,
> +             &Vertical
>               );
>    if (EFI_ERROR (Status)) {
>      ASSERT_EFI_ERROR (Status);
>      return Status;
>    }
> +  ASSERT (Horizontal != NULL);
> +  ASSERT (Vertical != NULL);
>  
>    Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
>    if (EFI_ERROR (Status)) {
> @@ -126,21 +116,26 @@ LcdSetMode (
>    MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_DISABLE);
>  
>    // Update the frame buffer information with the new settings
> -  MmioWrite32 (HDLCD_REG_FB_LINE_LENGTH, HRes * BytesPerPixel);
> -  MmioWrite32 (HDLCD_REG_FB_LINE_PITCH,  HRes * BytesPerPixel);
> -  MmioWrite32 (HDLCD_REG_FB_LINE_COUNT,  VRes - 1);
> +  MmioWrite32 (
> +    HDLCD_REG_FB_LINE_LENGTH,
> +    Horizontal->Resolution * BytesPerPixel
> +    );
> +
> +  MmioWrite32 (HDLCD_REG_FB_LINE_PITCH, Horizontal->Resolution * BytesPerPixel);
> +
> +  MmioWrite32 (HDLCD_REG_FB_LINE_COUNT, Vertical->Resolution - 1);
>  
>    // Set the vertical timing information
> -  MmioWrite32 (HDLCD_REG_V_SYNC,         VSync);
> -  MmioWrite32 (HDLCD_REG_V_BACK_PORCH,   VBackPorch);
> -  MmioWrite32 (HDLCD_REG_V_DATA,         VRes - 1);
> -  MmioWrite32 (HDLCD_REG_V_FRONT_PORCH,  VFrontPorch);
> +  MmioWrite32 (HDLCD_REG_V_SYNC,        Vertical->Sync);
> +  MmioWrite32 (HDLCD_REG_V_BACK_PORCH,  Vertical->BackPorch);
> +  MmioWrite32 (HDLCD_REG_V_DATA,        Vertical->Resolution - 1);
> +  MmioWrite32 (HDLCD_REG_V_FRONT_PORCH, Vertical->FrontPorch);
>  
>    // Set the horizontal timing information
> -  MmioWrite32 (HDLCD_REG_H_SYNC,         HSync);
> -  MmioWrite32 (HDLCD_REG_H_BACK_PORCH,   HBackPorch);
> -  MmioWrite32 (HDLCD_REG_H_DATA,         HRes - 1);
> -  MmioWrite32 (HDLCD_REG_H_FRONT_PORCH,  HFrontPorch);
> +  MmioWrite32 (HDLCD_REG_H_SYNC,        Horizontal->Sync);
> +  MmioWrite32 (HDLCD_REG_H_BACK_PORCH,  Horizontal->BackPorch);
> +  MmioWrite32 (HDLCD_REG_H_DATA,        Horizontal->Resolution - 1);
> +  MmioWrite32 (HDLCD_REG_H_FRONT_PORCH, Horizontal->FrontPorch);
>  
>    // Enable the controller
>    MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_ENABLE);
> diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
> index 12db9d910ed1d7874095a5f79fe588491811f75a..6de60491e9fd0c5bca71e743aac2862ff85f6e7e 100644
> --- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
> +++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
> @@ -86,34 +86,24 @@ LcdSetMode (
>    IN CONST UINT32  ModeNumber
>    )
>  {
> -  EFI_STATUS        Status;
> -  UINT32            HRes;
> -  UINT32            HSync;
> -  UINT32            HBackPorch;
> -  UINT32            HFrontPorch;
> -  UINT32            VRes;
> -  UINT32            VSync;
> -  UINT32            VBackPorch;
> -  UINT32            VFrontPorch;
> -  UINT32            LcdControl;
> -  LCD_BPP           LcdBpp;
> +  EFI_STATUS          Status;
> +  CONST SCAN_TIMINGS *Horizontal;
> +  CONST SCAN_TIMINGS *Vertical;
> +  UINT32              LcdControl;
> +  LCD_BPP             LcdBpp;
>  
>    // Set the video mode timings and other relevant information
>    Status = LcdPlatformGetTimings (
>               ModeNumber,
> -             &HRes,
> -             &HSync,
> -             &HBackPorch,
> -             &HFrontPorch,
> -             &VRes,
> -             &VSync,
> -             &VBackPorch,
> -             &VFrontPorch
> +             &Horizontal,
> +             &Vertical
>               );
>    if (EFI_ERROR (Status)) {
>      ASSERT_EFI_ERROR (Status);
>      return Status;
>    }
> +  ASSERT (Horizontal != NULL);
> +  ASSERT (Vertical != NULL);
>  
>    Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
>    if (EFI_ERROR (Status)) {
> @@ -127,15 +117,29 @@ LcdSetMode (
>    // Set Timings
>    MmioWrite32 (
>      PL111_REG_LCD_TIMING_0,
> -    HOR_AXIS_PANEL (HBackPorch, HFrontPorch, HSync, HRes)
> +    HOR_AXIS_PANEL (
> +      Horizontal->BackPorch,
> +      Horizontal->FrontPorch,
> +      Horizontal->Sync,
> +      Horizontal->Resolution
> +      )
>      );
>  
>    MmioWrite32 (
>      PL111_REG_LCD_TIMING_1,
> -    VER_AXIS_PANEL (VBackPorch, VFrontPorch, VSync, VRes)
> +    VER_AXIS_PANEL (
> +      Vertical->BackPorch,
> +      Vertical->FrontPorch,
> +      Vertical->Sync,
> +      Vertical->Resolution
> +      )
> +    );
> +
> +  MmioWrite32 (
> +    PL111_REG_LCD_TIMING_2,
> +    CLK_SIG_POLARITY (Horizontal->Resolution)
>      );
>  
> -  MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY (HRes));
>    MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
>  
>    // PL111_REG_LCD_CONTROL
> -- 
> Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")
> 
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel