From: Girish Pathak <girish.pat...@arm.com>

This change adds some debug assertions e.g to catch NULL pointer errors
missing in PL11Lcd and HdLcd modules.

This change also improves related error handling code.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Girish Pathak <girish.pat...@arm.com>
Signed-off-by: Evan Lloyd <evan.ll...@arm.com>
---
 ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c   
    | 44 ++++++++++++++++++--
 
ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
 | 43 ++++++++++++++++++-
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c                            
    |  8 ++--
 ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c                         
    |  8 ++--
 4 files changed, 90 insertions(+), 13 deletions(-)

diff --git 
a/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c 
b/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
index 
b9859a56988f7e5be0adbaa49048a683fe586bfe..58dd9f0c77e1bc9af559a71d0c7cce72d71c6da5
 100644
--- 
a/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
+++ 
b/ArmPlatformPkg/ArmVExpressPkg/Library/HdLcdArmVExpressLib/HdLcdArmVExpress.c
@@ -140,6 +140,7 @@ LcdPlatformInitializeDisplay (
   *                                 buffer in bytes
   *
   * @retval EFI_SUCCESS             Frame buffer memory allocation success.
+  * @retval EFI_INVALID_PARAMETER   VramBaseAddress or VramSize are NULL.
   * @retval !(EFI_SUCCESS)          Other errors.
 **/
 EFI_STATUS
@@ -151,6 +152,13 @@ LcdPlatformGetVram (
   EFI_STATUS              Status;
   EFI_ALLOCATE_TYPE       AllocationType;
 
+  // Check VramBaseAddress and VramSize are not NULL.
+  if (VramBaseAddress == NULL || VramSize == NULL) {
+    ASSERT (VramBaseAddress != NULL);
+    ASSERT (VramSize != NULL);
+    return EFI_INVALID_PARAMETER;
+  }
+
   // Set the vram size
   *VramSize = LCD_VRAM_SIZE;
 
@@ -169,6 +177,7 @@ LcdPlatformGetVram (
                   VramBaseAddress
                   );
   if (EFI_ERROR (Status)) {
+    ASSERT_EFI_ERROR (Status);
     return Status;
   }
 
@@ -179,8 +188,8 @@ LcdPlatformGetVram (
                   *VramSize,
                   EFI_MEMORY_WC
                   );
-  ASSERT_EFI_ERROR (Status);
   if (EFI_ERROR (Status)) {
+    ASSERT_EFI_ERROR (Status);
     gBS->FreePages (*VramBaseAddress, EFI_SIZE_TO_PAGES (*VramSize));
     return Status;
   }
@@ -215,6 +224,7 @@ LcdPlatformSetMode (
   EFI_STATUS            Status;
 
   if (ModeNumber >= LcdPlatformGetMaxMode ()) {
+    ASSERT (ModeNumber < LcdPlatformGetMaxMode ());
     return EFI_INVALID_PARAMETER;
   }
 
@@ -264,6 +274,7 @@ LcdPlatformSetMode (
   *
   * @retval EFI_SUCCESS             Success if the requested mode is found.
   * @retval EFI_INVALID_PARAMETER   Requested mode not found.
+  * @retval EFI_INVALID_PARAMETER   Info is NULL.
 **/
 EFI_STATUS
 LcdPlatformQueryMode (
@@ -271,7 +282,9 @@ LcdPlatformQueryMode (
   OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION * CONST  Info
   )
 {
-  if (ModeNumber >= LcdPlatformGetMaxMode ()) {
+  if (ModeNumber >= LcdPlatformGetMaxMode () || Info == NULL) {
+    ASSERT (ModeNumber < LcdPlatformGetMaxMode ());
+    ASSERT (Info != NULL);
     return EFI_INVALID_PARAMETER;
   }
 
@@ -334,6 +347,28 @@ LcdPlatformGetTimings (
   )
 {
   if (ModeNumber >= LcdPlatformGetMaxMode ()) {
+    ASSERT (ModeNumber < LcdPlatformGetMaxMode ());
+    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);
     return EFI_INVALID_PARAMETER;
   }
 
@@ -356,6 +391,7 @@ LcdPlatformGetTimings (
   *
   * @retval EFI_SUCCESS             The requested mode is found.
   * @retval EFI_INVALID_PARAMETER   Requested mode not found.
+  * @retval EFI_INVALID_PARAMETER   Bpp is NULL.
 **/
 EFI_STATUS
 LcdPlatformGetBpp (
@@ -363,7 +399,9 @@ LcdPlatformGetBpp (
   OUT LCD_BPP * CONST                    Bpp
   )
 {
-  if (ModeNumber >= LcdPlatformGetMaxMode ()) {
+  if (ModeNumber >= LcdPlatformGetMaxMode () || Bpp == NULL) {
+    ASSERT (ModeNumber < LcdPlatformGetMaxMode ());
+    ASSERT (Bpp != NULL);
     return EFI_INVALID_PARAMETER;
   }
 
diff --git 
a/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
 
b/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
index 
6ae13f06d8b396ea1c67f0bcd735a9d70f476400..5a4abd4c6f9e84d3d690af7233c1cebfe1ad339b
 100644
--- 
a/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
+++ 
b/ArmPlatformPkg/ArmVExpressPkg/Library/PL111LcdArmVExpressLib/PL111LcdArmVExpress.c
@@ -191,6 +191,7 @@ LcdPlatformInitializeDisplay (
   *                                 buffer in bytes
   *
   * @retval EFI_SUCCESS             Frame buffer memory allocation success.
+  * @retval EFI_INVALID_PARAMETER   VramBaseAddress or VramSize is NULL.
   * @retval !(EFI_SUCCESS)          Other errors.
 **/
 EFI_STATUS
@@ -203,6 +204,13 @@ LcdPlatformGetVram (
 
   Status = EFI_SUCCESS;
 
+  // Check VramBaseAddress and VramSize are not NULL.
+  if (VramBaseAddress == NULL || VramSize == NULL) {
+    ASSERT (VramBaseAddress != NULL);
+    ASSERT (VramSize != NULL);
+    return EFI_INVALID_PARAMETER;
+  }
+
   // Is it on the motherboard or on the daughterboard?
   switch (PL111_CLCD_SITE) {
 
@@ -223,6 +231,7 @@ LcdPlatformGetVram (
                     VramBaseAddress
                     );
     if (EFI_ERROR (Status)) {
+      ASSERT_EFI_ERROR (Status);
       return Status;
     }
 
@@ -233,8 +242,8 @@ LcdPlatformGetVram (
                     *VramSize,
                     EFI_MEMORY_WC
                     );
-    ASSERT_EFI_ERROR (Status);
     if (EFI_ERROR (Status)) {
+      ASSERT_EFI_ERROR (Status);
       gBS->FreePages (*VramBaseAddress, EFI_SIZE_TO_PAGES (*VramSize));
       return Status;
     }
@@ -293,6 +302,7 @@ LcdPlatformSetMode (
   UINT32                SysId;
 
   if (ModeNumber >= LcdPlatformGetMaxMode ()) {
+    ASSERT (ModeNumber < LcdPlatformGetMaxMode ());
     return EFI_INVALID_PARAMETER;
   }
 
@@ -359,6 +369,7 @@ LcdPlatformSetMode (
   *                                 (on success).
   *
   * @retval EFI_SUCCESS             Success if the requested mode is found.
+  * @retval EFI_INVALID_PARAMETER   Info is NULL.
   * @retval EFI_INVALID_PARAMETER   Requested mode not found.
 **/
 EFI_STATUS
@@ -367,7 +378,9 @@ LcdPlatformQueryMode (
   OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION * CONST Info
   )
 {
-  if (ModeNumber >= LcdPlatformGetMaxMode ()) {
+  if (ModeNumber >= LcdPlatformGetMaxMode () || Info == NULL) {
+    ASSERT (ModeNumber < LcdPlatformGetMaxMode ());
+    ASSERT (Info != NULL);
     return EFI_INVALID_PARAMETER;
   }
 
@@ -415,6 +428,7 @@ LcdPlatformQueryMode (
   *
   * @retval EFI_SUCCESS             Success if the requested mode is found.
   * @retval EFI_INVALID_PARAMETER   Requested mode not found.
+  * @retval EFI_INVALID_PARAMETER   One of the OUT parameters is NULL.
 **/
 EFI_STATUS
 LcdPlatformGetTimings (
@@ -430,6 +444,28 @@ LcdPlatformGetTimings (
   )
 {
   if (ModeNumber >= LcdPlatformGetMaxMode ()) {
+    ASSERT (ModeNumber < LcdPlatformGetMaxMode ());
+    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);
     return EFI_INVALID_PARAMETER;
   }
 
@@ -452,6 +488,7 @@ LcdPlatformGetTimings (
   *
   * @retval EFI_SUCCESS             The requested mode is found.
   * @retval EFI_INVALID_PARAMETER   Requested mode not found.
+  * @retval EFI_INVALID_PARAMETER   Bpp is NULL.
 **/
 EFI_STATUS
 LcdPlatformGetBpp (
@@ -460,6 +497,8 @@ LcdPlatformGetBpp (
   )
 {
   if (ModeNumber >= LcdPlatformGetMaxMode ()) {
+    ASSERT (ModeNumber < LcdPlatformGetMaxMode ());
+    ASSERT (Bpp != NULL);
     return EFI_INVALID_PARAMETER;
   }
 
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c 
b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
index 
5f950579720fb69e0a481f697a5cc4038158b409..a266671a26f01d31e8ddb0cf7cbfe59d2f4dc49c
 100644
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/HdLcd.c
@@ -109,15 +109,15 @@ LcdSetMode (
              &VBackPorch,
              &VFrontPorch
              );
-  ASSERT_EFI_ERROR (Status);
   if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
+    ASSERT_EFI_ERROR (Status);
+    return Status;
   }
 
   Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
-  ASSERT_EFI_ERROR (Status);
   if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
+    ASSERT_EFI_ERROR (Status);
+    return Status;
   }
 
   BytesPerPixel = GetBytesPerPixel (LcdBpp);
diff --git a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c 
b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
index 
386e6140a69b045f77ee7fa60c4587d8bf4e7d54..f432c8d802614e8a0e4ddab3898f6e0dbf9a1572
 100644
--- a/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
+++ b/ArmPlatformPkg/Drivers/LcdGraphicsOutputDxe/PL111Lcd.c
@@ -110,15 +110,15 @@ LcdSetMode (
              &VBackPorch,
              &VFrontPorch
              );
-  ASSERT_EFI_ERROR (Status);
   if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
+    ASSERT_EFI_ERROR (Status);
+    return Status;
   }
 
   Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
-  ASSERT_EFI_ERROR (Status);
   if (EFI_ERROR (Status)) {
-    return EFI_DEVICE_ERROR;
+    ASSERT_EFI_ERROR (Status);
+    return Status;
   }
 
   // Disable the CLCD_LcdEn bit
-- 
Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to