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 <[email protected]> --- ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c | 40 +++++-------------------- 1 file changed, 7 insertions(+), 33 deletions(-) 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( -- 2.1.4 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

