diff --git a/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c b/ArmPlatformPkg/Drivers/PL061GpioDxe/PL061Gpio.c index 937b725821..c8125fd0e0 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 #include -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(