diff mbox

[edk2,2/4] ArmPlatformPkg: PL061 - only initialize on protocol load

Message ID 1456503415-17029-3-git-send-email-leif.lindholm@linaro.org
State Accepted
Commit 2a77a37ea43d8269a4320301e2f77b45f59a3ac1
Headers show

Commit Message

Leif Lindholm Feb. 26, 2016, 4:16 p.m. UTC
For whatever reason, every single operation on the PL061 looked for an
"Initialized" flag, and manually called the initialization function if
not set. Move this to a single call on protocol installation.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org>

---
 ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c | 40 +++++--------------------
 1 file changed, 7 insertions(+), 33 deletions(-)

-- 
2.1.4

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

Patch

diff --git a/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c b/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c
index 937b725..c8125fd 100644
--- a/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c
+++ b/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c
@@ -1,6 +1,7 @@ 
 /** @file
 *
 *  Copyright (c) 2011, ARM Limited. All rights reserved.
+*  Copyright (c) 2016, Linaro Limited. All rights reserved.
 *
 *  This program and the accompanying materials
 *  are licensed and made available under the terms and conditions of the BSD
@@ -27,7 +28,6 @@ 
 #include <Protocol/EmbeddedGpio.h>
 #include <Drivers/PL061Gpio.h>
 
-BOOLEAN     mPL061Initialized = FALSE;
 
 /**
   Function implementations
@@ -78,8 +78,6 @@  PL061Initialize (
   //   // Ensure interrupts are disabled
   //}
 
-  mPL061Initialized = TRUE;
-
   EXIT:
   return Status;
 }
@@ -109,30 +107,19 @@  Get (
   OUT UINTN             *Value
   )
 {
-  EFI_STATUS    Status = EFI_SUCCESS;
-
   if (    (Value == NULL)
       ||  (Gpio > LAST_GPIO_PIN))
   {
     return EFI_INVALID_PARAMETER;
   }
 
-  // Initialize the hardware if not already done
-  if (!mPL061Initialized) {
-    Status = PL061Initialize();
-    if (EFI_ERROR(Status)) {
-      goto EXIT;
-    }
-  }
-
   if (MmioRead8 (PL061_GPIO_DATA_REG) & GPIO_PIN_MASK_HIGH_8BIT(Gpio)) {
     *Value = 1;
   } else {
     *Value = 0;
   }
 
-  EXIT:
-  return Status;
+  return EFI_SUCCESS;
 }
 
 /**
@@ -169,14 +156,6 @@  Set (
     goto EXIT;
   }
 
-  // Initialize the hardware if not already done
-  if (!mPL061Initialized) {
-    Status = PL061Initialize();
-    if (EFI_ERROR(Status)) {
-      goto EXIT;
-    }
-  }
-
   switch (Mode)
   {
     case GPIO_MODE_INPUT:
@@ -233,22 +212,12 @@  GetMode (
   OUT EMBEDDED_GPIO_MODE  *Mode
   )
 {
-  EFI_STATUS Status;
-
   // Check for errors
   if (    (Mode == NULL)
       ||  (Gpio > LAST_GPIO_PIN)) {
     return EFI_INVALID_PARAMETER;
   }
 
-  // Initialize the hardware if not already done
-  if (!mPL061Initialized) {
-    Status = PL061Initialize();
-    if (EFI_ERROR(Status)) {
-      return Status;
-    }
-  }
-
   // Check if it is input or output
   if (MmioRead8 (PL061_GPIO_DIR_REG) & GPIO_PIN_MASK_HIGH_8BIT(Gpio)) {
     // Pin set to output
@@ -329,6 +298,11 @@  PL061InstallProtocol (
   //
   ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEmbeddedGpioProtocolGuid);
 
+  Status = PL061Initialize();
+  if (EFI_ERROR(Status)) {
+    return EFI_DEVICE_ERROR;
+  }
+
   // Install the Embedded GPIO Protocol onto a new handle
   Handle = NULL;
   Status = gBS->InstallMultipleProtocolInterfaces(