summaryrefslogtreecommitdiff
path: root/ArmPlatformPkg
diff options
context:
space:
mode:
authorLeif Lindholm <leif.lindholm@linaro.org>2015-10-28 18:08:53 +0000
committerLeif Lindholm <leif.lindholm@linaro.org>2016-02-26 16:50:17 +0000
commit2a77a37ea43d8269a4320301e2f77b45f59a3ac1 (patch)
treeb95a71012ca5f777e003ce83f25aa7ed415bd4f1 /ArmPlatformPkg
parentfe28290e97106424614b59be023819c757fd62c5 (diff)
downloadedk2-2a77a37ea43d8269a4320301e2f77b45f59a3ac1.tar.gz
ArmPlatformPkg: PL061 - only initialize on protocol load
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> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Ryan Harkin <ryan.harkin@linaro.org>
Diffstat (limited to 'ArmPlatformPkg')
-rw-r--r--ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c40
1 files changed, 7 insertions, 33 deletions
diff --git a/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c b/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c
index 937b72582..c8125fd0e 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(