diff --git a/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c b/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c index d87ab3d3de..fc062204c0 100644 --- a/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c +++ b/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c @@ -177,13 +177,16 @@ Get ( EFI_STATUS Status; UINTN Index, Offset, RegisterBase; - Status = PL061Locate (Gpio, &Index, &Offset, &RegisterBase); - ASSERT_EFI_ERROR (Status); - if (Value == NULL) { return EFI_INVALID_PARAMETER; } + Status = PL061Locate (Gpio, &Index, &Offset, &RegisterBase); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + if (PL061GetPins (RegisterBase, GPIO_PIN_MASK (Offset)) != 0) { *Value = 1; } else { @@ -223,7 +226,10 @@ Set ( UINTN Index, Offset, RegisterBase; Status = PL061Locate (Gpio, &Index, &Offset, &RegisterBase); - ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } switch (Mode) { case GPIO_MODE_INPUT: @@ -285,14 +291,17 @@ GetMode ( EFI_STATUS Status; UINTN Index, Offset, RegisterBase; - Status = PL061Locate (Gpio, &Index, &Offset, &RegisterBase); - ASSERT_EFI_ERROR (Status); - // Check for errors if (Mode == NULL) { return EFI_INVALID_PARAMETER; } + Status = PL061Locate (Gpio, &Index, &Offset, &RegisterBase); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + // Check if it is input or output if (MmioRead8 (RegisterBase + PL061_GPIO_DIR_REG) & GPIO_PIN_MASK (Offset)) { // Pin set to output