Revision: 19122
http://sourceforge.net/p/edk2/code/19122
Author: timhe
Date: 2015-12-04 08:00:53 +0000 (Fri, 04 Dec 2015)
Log Message:
-----------
Vlv2TbltDevicePkg/Vlv2DeviceRefCodePkg:
Reset BIOS Setup when the jumper is
present on Turbot board.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Shifei Lu <[email protected]>
Reviewed-by: Tim He <[email protected]>
Modified Paths:
--------------
branches/UDK2014.SP1/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/Library/PchPlatformLib.h
branches/UDK2014.SP1/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PchPlatformLib/PchPlatformLibrary.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformDxe/ExI.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInitPei/BootMode.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/Platform.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
Modified:
branches/UDK2014.SP1/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/Library/PchPlatformLib.h
===================================================================
---
branches/UDK2014.SP1/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/Library/PchPlatformLib.h
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2DeviceRefCodePkg/ValleyView2Soc/SouthCluster/Include/Library/PchPlatformLib.h
2015-12-04 08:00:53 UTC (rev 19122)
@@ -117,5 +117,14 @@
**/
;
+UINT32
+DetectTurbotBoard (
+VOID
+ );
+UINT32
+DetectGpioPinValue (
+VOID
+ );
+
#endif
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -648,6 +648,7 @@
EFI_PLATFORM_CPU_INFO *PlatformCpuInfoPtr = NULL;
EFI_PLATFORM_CPU_INFO PlatformCpuInfo;
EFI_PEI_HOB_POINTERS GuidHob;
+ UINT32 DxeGpioValue;
if (mFirstNotify) {
return;
@@ -686,6 +687,8 @@
CopyMem(&PlatformCpuInfo, PlatformCpuInfoPtr,
sizeof(EFI_PLATFORM_CPU_INFO));
}
+ DxeGpioValue = DetectGpioPinValue();
+
//
// Update the ACPI parameter blocks finally.
//
@@ -697,8 +700,8 @@
&VariableSize,
&SetupVarBuffer
);
- if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VariableSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
@@ -796,6 +799,7 @@
UINTN NumberOfEnabledCPUs;
UINT32 Data32;
PCH_STEPPING pchStepping;
+ UINT32 DxeGpioValue;
mFirstNotify = FALSE;
@@ -815,7 +819,8 @@
mPlatformInfo = GET_GUID_HOB_DATA (GuidHob.Guid);
}
}
-
+
+ DxeGpioValue = DetectGpioPinValue();
//
// Search for the Memory Configuration GUID HOB. If it is not present, then
// there's nothing we can do. It may not exist on the update path.
@@ -828,8 +833,8 @@
&VarSize,
&mSystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
@@ -864,8 +869,8 @@
&SysCfgSize,
&mSystemConfig
);
- if (EFI_ERROR (Status) || SysCfgSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || SysCfgSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
SysCfgSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -291,7 +291,9 @@
UINT8 ClockAddress = CLOCK_GENERATOR_ADDRESS;
UINTN VariableSize;
EFI_PEI_READ_ONLY_VARIABLE2_PPI *Variable;
+ UINT32 PeiGpioValue;
+ PeiGpioValue = DetectGpioPinValue();
//
// Obtain Platform Info from HOB.
//
@@ -355,8 +357,8 @@
NULL,
&VariableSize,
&SystemConfiguration);
- if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION) ||
PeiGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VariableSize = sizeof(SYSTEM_CONFIGURATION);
Status = Variable->GetVariable(Variable,
L"SetupRecovery",
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardClkGens/BoardClkGens.h
2015-12-04 08:00:53 UTC (rev 19122)
@@ -28,6 +28,7 @@
#define _BOARD_CLK_GEN_H_
#include <PiPei.h>
+#include "PchAccess.h"
#include <Library/HobLib.h>
#include <Library/IoLib.h>
#include <Library/DebugLib.h>
@@ -35,6 +36,7 @@
#include <Ppi/Smbus.h>
#include <IndustryStandard/SmBus.h>
#include <Guid/PlatformInfo.h>
+#include <Library/PchPlatformLib.h>
#define CLOCK_GENERATOR_ADDRESS 0xd2
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -150,7 +150,10 @@
EFI_PEI_READ_ONLY_VARIABLE2_PPI *PeiReadOnlyVarPpi;
UINTN VarSize;
SYSTEM_CONFIGURATION SystemConfiguration;
+ UINT32 PeiGpioValue;
+ PeiGpioValue = DetectGpioPinValue();
+
DEBUG ((EFI_D_INFO, "MultiPlatformGpioTableInit()...\n"));
//
@@ -178,6 +181,18 @@
&VarSize,
&SystemConfiguration
);
+ if (PeiGpioValue == 0) {
+ VarSize = sizeof(SYSTEM_CONFIGURATION);
+ Status = PeiReadOnlyVarPpi->GetVariable (
+ PeiReadOnlyVarPpi,
+ L"SetupRecovery",
+ &gEfiSetupVariableGuid,
+ NULL,
+ &VarSize,
+ &SystemConfiguration
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
if (SystemConfiguration.GpioWakeCapability == 1) {
PlatformInfoHob->PlatformCfioData = (EFI_PHYSICAL_ADDRESS)(UINTN)
&mMinnow2CfioInitData2;
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/BoardGpios/BoardGpios.h
2015-12-04 08:00:53 UTC (rev 19122)
@@ -37,6 +37,7 @@
#include <Ppi/Smbus.h>
#include <Ppi/ReadOnlyVariable2.h>
#include <Guid/SetupVariable.h>
+#include <Library/PchPlatformLib.h>
GPIO_CONF_PAD_INIT mNB_BB_FAB3_GpioInitData_SC_TRI[] =
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/MultiPlatformLib/MultiPlatformLib.inf
2015-12-04 08:00:53 UTC (rev 19122)
@@ -80,6 +80,7 @@
DebugLib
HobLib
IoLib
+ PchPlatformLib
# PeiKscLib
[Ppis]
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PchPlatformLib/PchPlatformLibrary.c
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PchPlatformLib/PchPlatformLibrary.c
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PchPlatformLib/PchPlatformLibrary.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -134,3 +134,111 @@
}
return TRUE;
}
+
+/**
+ Detect Turbot board
+
+ @param None
+
+ @retval 0 Not Turbot board
+ @retval 1 Turbot board
+
+**/
+UINT32
+DetectTurbotBoard (
+ void
+ )
+{
+ UINTN PciD31F0RegBase = 0;
+ UINT32 GpioValue = 0;
+ UINT32 TmpVal = 0;
+ UINT32 MmioConf0 = 0;
+ UINT32 MmioPadval = 0;
+ UINT32 PConf0Offset = 0x200; //GPIO_S5_4 pad_conf0 register offset
+ UINT32 PValueOffset = 0x208; //GPIO_S5_4 pad_value register offset
+ UINT32 SSUSOffset = 0x2000;
+ UINT32 IoBase = 0;
+
+ DEBUG ((EFI_D_ERROR, "DetermineTurbotBoard() Entry\n"));
+ PciD31F0RegBase = MmPciAddress (0,
+ 0,
+ PCI_DEVICE_NUMBER_PCH_LPC,
+ PCI_FUNCTION_NUMBER_PCH_LPC,
+ 0
+ );
+ IoBase = MmioRead32 (PciD31F0RegBase + R_PCH_LPC_IO_BASE) &
B_PCH_LPC_IO_BASE_BAR;
+
+ MmioConf0 = IoBase + SSUSOffset + PConf0Offset;
+ MmioPadval = IoBase + SSUSOffset + PValueOffset;
+ //0xFED0E200/0xFED0E208 is pad_Conf/pad_val register address of GPIO_S5_4
+ DEBUG ((EFI_D_ERROR, "MmioConf0[0x%x], MmioPadval[0x%x]\n", MmioConf0,
MmioPadval));
+
+ MmioWrite32 (MmioConf0, 0x2003CC00);
+
+ TmpVal = MmioRead32 (MmioPadval);
+ TmpVal &= ~0x6; //Clear bit 1:2
+ TmpVal |= 0x2; // Set the pin as GPI
+ MmioWrite32 (MmioPadval, TmpVal);
+
+ GpioValue = MmioRead32 (MmioPadval);
+
+ DEBUG ((EFI_D_ERROR, "Gpio_S5_4 value is 0x%x\n", GpioValue));
+ return (GpioValue & 0x1);
+}
+
+/**
+ Detect if "Reset BIOS Setup" jumper is plugged.
+ Only for MinnowBoard Turbot.
+
+ @param None
+
+ @retval 0 Jumper is present.
+ @retval 1 Jumper is not present.
+
+**/
+
+UINT32
+DetectGpioPinValue (
+VOID
+ )
+{
+ UINTN PciD31F0RegBase = 0;
+ UINT32 GpioValue;
+ UINT32 TmpVal = 0;
+ UINT32 SSUSOffset = 0x2000;
+ UINT32 IoBase = 0;
+ UINT32 MmioConf0 = 0;
+ UINT32 MmioPadval = 0;
+ UINT32 PConf0Offset = 0xA0; //GPIO_S5_17 pad_conf0
register offset
+ UINT32 PValueOffset = 0xA8; //GPIO_S5_17 pad_value
register offset
+
+ if (DetectTurbotBoard() == 0) {
+ return 1;
+ }
+
+ PciD31F0RegBase = MmPciAddress (0,
+ 0,
+ PCI_DEVICE_NUMBER_PCH_LPC,
+ PCI_FUNCTION_NUMBER_PCH_LPC,
+ 0
+ );
+ IoBase = MmioRead32 (PciD31F0RegBase + R_PCH_LPC_IO_BASE) &
B_PCH_LPC_IO_BASE_BAR;
+
+ //
+ // 0xFED0E0A0/0xFED0E0A8 is pad_Conf/pad_val register address of GPIO_S5_17
+ //
+ MmioConf0 = IoBase + SSUSOffset + PConf0Offset;
+ MmioPadval = IoBase + SSUSOffset + PValueOffset;
+
+ MmioWrite32 (MmioConf0, 0x2003CC01);
+
+ TmpVal = MmioRead32 (MmioPadval);
+ TmpVal &= ~0x6; //Clear bit 1:2
+ TmpVal |= 0x2; // Set the pin as GPI
+ MmioWrite32 (MmioPadval, TmpVal);
+
+ GpioValue = MmioRead32 (MmioPadval);
+ DEBUG ((EFI_D_INFO, "Gpio_S5_17 value is 0x%x\n", GpioValue));
+
+ return (GpioValue & 0x1);
+}
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PlatformBdsLib/BdsPlatform.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -53,6 +53,7 @@
#include <Library/GenericBdsLib/InternalBdsLib.h>
#include <Library/GenericBdsLib/String.h>
#include <Library/NetLib.h>
+#include <Library/PchPlatformLib.h>
EFI_GUID *ConnectDriverTable[] = {
&gEfiMmioDeviceProtocolGuid,
@@ -293,6 +294,7 @@
UINTN VarSize;
SYSTEM_CONFIGURATION mSystemConfiguration;
+ UINT32 DxeGpioValue;
if (PciDevicePath == NULL || GopDevicePath == NULL) {
return EFI_INVALID_PARAMETER;
@@ -313,6 +315,7 @@
return Status;
}
+ DxeGpioValue = DetectGpioPinValue();
//
// Try to connect this handle, so that GOP dirver could start on this
// device and create child handles with GraphicsOutput Protocol installed
@@ -331,8 +334,8 @@
&VarSize,
&mSystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
@@ -622,6 +625,7 @@
EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
UINTN VarSize;
SYSTEM_CONFIGURATION mSystemConfiguration;
+ UINT32 DxeGpioValue;
Status = EFI_SUCCESS;
PlugInPciVgaDevicePath = NULL;
@@ -636,6 +640,8 @@
return EFI_UNSUPPORTED;
}
+ DxeGpioValue = DetectGpioPinValue();
+
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"Setup",
@@ -644,8 +650,8 @@
&VarSize,
&mSystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
@@ -698,10 +704,12 @@
SYSTEM_CONFIGURATION SystemConfiguration;
UINTN VarSize;
EFI_STATUS Status;
+ UINT32 DxeGpioValue;
HorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);
VerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);
+ DxeGpioValue = DetectGpioPinValue();
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
@@ -711,8 +719,8 @@
&VarSize,
&SystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
@@ -1616,13 +1624,16 @@
BOOLEAN IsFirstBoot;
UINT16 *BootOrder;
UINTN BootOrderSize;
+ UINT32 DxeGpioValue;
Timeout = PcdGet16 (PcdPlatformBootTimeOut);
if (Timeout > 10 ) {
//we think the Timeout variable is corrupted
Timeout = 10;
}
-
+
+ DxeGpioValue = DetectGpioPinValue();
+
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
NORMAL_SETUP_NAME,
@@ -1632,8 +1643,8 @@
&SystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/Library/PlatformBdsLib/PlatformBdsLib.inf
2015-12-04 08:00:53 UTC (rev 19122)
@@ -81,6 +81,7 @@
FileHandleLib
S3BootScriptLib
SerialPortLib
+ PchPlatformLib
[Protocols]
gEfiFirmwareVolume2ProtocolGuid
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -48,6 +48,7 @@
#include <Protocol/FirmwareVolume.h>
#include <Library/HobLib.h>
#include <IndustryStandard/Pci22.h>
+#include <Library/PchPlatformLib.h>
extern PCI_OPTION_ROM_TABLE mPciOptionRomTable[];
extern UINTN mSizeOptionRomTable;
@@ -343,7 +344,10 @@
{
EFI_STATUS Status;
UINTN VarSize;
+ UINT32 DxeGpioValue;
+ DxeGpioValue = DetectGpioPinValue();
+
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"Setup",
@@ -352,8 +356,8 @@
&VarSize,
&mSystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PciPlatform/PciPlatform.inf
2015-12-04 08:00:53 UTC (rev 19122)
@@ -71,6 +71,7 @@
UefiBootServicesTableLib
UefiRuntimeServicesTableLib
DxeServicesTableLib
+ PchPlatformLib
[BuildOptions]
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformDxe/ExI.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformDxe/ExI.c 2015-12-04
03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformDxe/ExI.c 2015-12-04
08:00:53 UTC (rev 19122)
@@ -34,6 +34,7 @@
#include "PlatformDxe.h"
+#include <Library/PchPlatformLib.h>
#define PchLpcPciCfg32(Register) MmioRead32 (MmPciAddress (0,
DEFAULT_PCI_BUS_NUMBER_PCH, PCI_DEVICE_NUMBER_PCH_LPC, 0, Register))
@@ -71,7 +72,10 @@
SYSTEM_CONFIGURATION SystemConfiguration;
UINTN VarSize;
+ UINT32 DxeGpioValue;
+ DxeGpioValue = DetectGpioPinValue();
+
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
@@ -82,8 +86,8 @@
&SystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformDxe/Platform.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -50,6 +50,7 @@
#include <Protocol/IgdOpRegion.h>
#include <Library/PcdLib.h>
#include <Protocol/VariableLock.h>
+#include <Library/PchPlatformLib.h>
//
@@ -201,6 +202,10 @@
VOID
);
+EFI_STATUS
+DxeDetectGpioPinToResetSetup(
+ VOID
+ );
EFI_STATUS
EFIAPI
@@ -594,7 +599,41 @@
#endif
+EFI_STATUS
+DxeDetectGpioPinToResetSetup (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ UINTN VarSize;
+ UINT32 DxeGpioValue;
+ DxeGpioValue = DetectGpioPinValue();
+
+ if (DxeGpioValue == 0) {
+ VarSize = sizeof(SYSTEM_CONFIGURATION);
+
+ Status = gRT->GetVariable(
+ L"SetupRecovery",
+ &gEfiNormalSetupGuid,
+ NULL,
+ &VarSize,
+ &mSystemConfiguration
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = gRT->SetVariable (
+ NORMAL_SETUP_NAME,
+ &gEfiNormalSetupGuid,
+ EFI_VARIABLE_NON_VOLATILE |
EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ sizeof(SYSTEM_CONFIGURATION),
+ &mSystemConfiguration
+ );
+ }
+
+ return EFI_SUCCESS;
+}
+
EFI_STATUS
EFIAPI
TristateLpcGpioS0i3Config (
@@ -816,6 +855,11 @@
&mSystemConfiguration
);
}
+
+ //
+ // Detect GPIO_S5_17 Pin to reset setup to default in Dxe Phase.
+ //
+ DxeDetectGpioPinToResetSetup();
Status = EfiCreateEventReadyToBootEx (
TPL_CALLBACK,
@@ -1688,6 +1732,9 @@
SYSTEM_CONFIGURATION SystemConfiguration;
UINTN VarSize;
EFI_STATUS Status;
+ UINT32 DxeGpioValue;
+
+ DxeGpioValue = DetectGpioPinValue();
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
@@ -1698,8 +1745,8 @@
&SystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.c
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.c
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -33,6 +33,8 @@
#include <Guid/SetupVariable.h>
#include <SetupMode.h>
#include <Library/UefiRuntimeServicesTableLib.h>
+#include "PchAccess.h"
+#include <Library/PchPlatformLib.h>
EFI_BOOT_SERVICES *gBS;
@@ -165,6 +167,7 @@
EFI_STATUS Status = EFI_SUCCESS;
SYSTEM_CONFIGURATION SystemConfiguration;
UINTN VarSize;
+ UINT32 DxeGpioValue;
gBS = SystemTable->BootServices;
@@ -179,6 +182,8 @@
mPlatformGOPPolicy.GetPlatformLidStatus = GetPlatformLidStatus;
mPlatformGOPPolicy.GetVbtData = GetVbtData;
+ DxeGpioValue = DetectGpioPinValue();
+
//
// Install protocol to allow access to this Policy.
//
@@ -190,8 +195,8 @@
&VarSize,
&SystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformGopPolicy/PlatformGopPolicy.inf
2015-12-04 08:00:53 UTC (rev 19122)
@@ -45,11 +45,14 @@
MdePkg/MdePkg.dec
IntelFrameworkPkg/IntelFrameworkPkg.dec
Vlv2TbltDevicePkg/PlatformPkg.dec
+ Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
+
[LibraryClasses]
BaseLib
DebugLib
UefiDriverEntryPoint
UefiRuntimeServicesTableLib
+ PchPlatformLib
# DxeKscLib
[Guids]
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -30,6 +30,8 @@
--*/
#include "PlatformInfoDxe.h"
+#include "PchAccess.h"
+#include <Library/PchPlatformLib.h>
/**
Entry point for the driver.
@@ -62,6 +64,9 @@
UINT8 *LpssDataHobPtr;
UINT8 *LpssDataVarPtr;
UINTN i;
+ UINT32 DxeGpioValue;
+
+ DxeGpioValue = DetectGpioPinValue();
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
@@ -72,8 +77,8 @@
&SystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.inf
2015-12-04 08:00:53 UTC (rev 19122)
@@ -61,6 +61,7 @@
UefiRuntimeServicesTableLib
UefiDriverEntryPoint
BaseMemoryLib
+ PchPlatformLib
[Depex]
gEfiVariableArchProtocolGuid AND gEfiVariableWriteArchProtocolGuid
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInitPei/BootMode.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInitPei/BootMode.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInitPei/BootMode.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -157,6 +157,7 @@
volatile UINT32 GpioValue;
BOOLEAN IsFirstBoot;
UINT32 Data32;
+ UINT32 PeiGpioValue;
Status = (*PeiServices)->GetBootMode(
PeiServices,
@@ -177,6 +178,7 @@
// When this boot is WDT reset, the system needs booting with CrashDump
function eanbled.
//
Data32 = IoRead32 (ACPI_BASE_ADDRESS + R_PCH_TCO_STS);
+ PeiGpioValue = DetectGpioPinValue();
//
// Check Power Button, click the power button, the system will boot in fast
boot mode,
@@ -211,8 +213,8 @@
&VarSize,
&SystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
PeiGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = Variable->GetVariable(
Variable,
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformInitPei/PlatformEarlyInit.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -179,7 +179,10 @@
UINTN VariableSize;
EFI_STATUS Status;
EFI_PEI_READ_ONLY_VARIABLE2_PPI *Variable;
+ UINT32 PeiGpioValue;
+ PeiGpioValue = DetectGpioPinValue();
+
VariableSize = sizeof (SYSTEM_CONFIGURATION);
ZeroMem (SystemConfiguration, sizeof (SYSTEM_CONFIGURATION));
@@ -205,8 +208,8 @@
&VariableSize,
SystemConfiguration
);
- if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION) ||
PeiGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VariableSize = sizeof(SYSTEM_CONFIGURATION);
Status = Variable->GetVariable(
Variable,
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/BootMode.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -39,6 +39,7 @@
#include <Guid/SetupVariable.h>
#include <Guid/BootState.h>
+#include <Library/PchPlatformLib.h>
//
// Priority of our boot modes, highest priority first
@@ -327,7 +328,10 @@
UINTN VarSize;
SYSTEM_CONFIGURATION SystemConfiguration;
BOOLEAN FastBootEnabledStatus;
+ UINT32 PeiGpioValue;
+ PeiGpioValue = DetectGpioPinValue();
+
FastBootEnabledStatus = FALSE;
Status = (**PeiServices).LocatePpi (
PeiServices,
@@ -346,6 +350,18 @@
&VarSize,
&SystemConfiguration
);
+ if (PeiGpioValue == 0) {
+ VarSize = sizeof(SYSTEM_CONFIGURATION);
+ Status = PeiReadOnlyVarPpi->GetVariable (
+ PeiReadOnlyVarPpi,
+ L"SetupRecovery",
+ &gEfiSetupVariableGuid,
+ NULL,
+ &VarSize,
+ &SystemConfiguration
+ );
+ ASSERT_EFI_ERROR (Status);
+ }
if (Status == EFI_SUCCESS) {
if (SystemConfiguration.FastBoot != 0) {
FastBootEnabledStatus = TRUE;
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/Platform.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/Platform.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/Platform.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -38,6 +38,7 @@
#include <Guid/SetupVariable.h>
#include <Guid/Vlv2Variable.h>
#include <Ppi/fTPMPolicy.h>
+#include <Library/PchPlatformLib.h>
//
// Start::Alpine Valley platform
@@ -708,6 +709,7 @@
EFI_PEI_PPI_DESCRIPTOR *mVlvMmioPolicyPpiDesc;
VLV_MMIO_POLICY_PPI *mVlvMmioPolicyPpi;
+ UINT32 PeiGpioValue;
ZeroMem (&PlatformInfo, sizeof(PlatformInfo));
@@ -753,6 +755,7 @@
PchMmPci32( 0, 0, 2, 0, 0x50) = 0x210;
+ PeiGpioValue = DetectGpioPinValue();
VariableSize = sizeof (SYSTEM_CONFIGURATION);
ZeroMem (&SystemConfiguration, VariableSize);
@@ -776,8 +779,8 @@
&VariableSize,
&SystemConfiguration
);
- if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VariableSize != sizeof(SYSTEM_CONFIGURATION) ||
PeiGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VariableSize = sizeof(SYSTEM_CONFIGURATION);
Status = Variable->GetVariable(
Variable,
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformPei/PlatformPei.inf
2015-12-04 08:00:53 UTC (rev 19122)
@@ -96,6 +96,7 @@
MonoStatusCodeLib
BaseCryptLib
PciLib
+ PchPlatformLib
[Ppis]
gEfiPeiStallPpiGuid
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
===================================================================
---
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
2015-12-04 03:46:05 UTC (rev 19121)
+++
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSetupDxe/PlatformSetupDxe.inf
2015-12-04 08:00:53 UTC (rev 19122)
@@ -98,6 +98,7 @@
BiosIdLib
CpuIA32Lib
IoLib
+ PchPlatformLib
[Guids]
## This GUID C Name is not required for build since it is from UefiLib and
not directly used by this module source.
Modified:
branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSetupDxe/SetupInfoRecords.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -54,6 +54,7 @@
#include "SetupMode.h"
#include "PchCommonDefinitions.h"
#include <PlatformBaseAddresses.h>
+#include <Library/PchPlatformLib.h>
typedef struct {
@@ -1745,10 +1746,12 @@
EFI_STATUS Status;
UINTN VarSize;
EFI_PEI_HOB_POINTERS GuidHob;
+ UINT32 DxeGpioValue;
if (mSetupInfoDone) {
return;
}
+ DxeGpioValue = DetectGpioPinValue();
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
@@ -1759,8 +1762,8 @@
&mSystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)||
DxeGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = gRT->GetVariable(
L"SetupRecovery",
Modified: branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
===================================================================
--- branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
2015-12-04 03:46:05 UTC (rev 19121)
+++ branches/UDK2014.SP1/Vlv2TbltDevicePkg/PlatformSmm/Platform.c
2015-12-04 08:00:53 UTC (rev 19122)
@@ -33,8 +33,8 @@
#include "SmmPlatform.h"
#include <Protocol/CpuIo2.h>
+#include <Library/PchPlatformLib.h>
-
//
// Local variables
//
@@ -151,7 +151,10 @@
EFI_SMM_SW_DISPATCH_CONTEXT SwContext;
UINTN VarSize;
EFI_BOOT_MODE BootMode;
+ UINT32 SmmGpioValue;
+ SmmGpioValue = DetectGpioPinValue();
+
Handle = NULL;
//
@@ -179,8 +182,8 @@
&VarSize,
&mSystemConfiguration
);
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
SmmGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = SystemTable->RuntimeServices->GetVariable(
L"SetupRecovery",
@@ -849,6 +852,7 @@
UINTN i;
EFI_STATUS Status;
UINTN VarSize;
+ UINT32 SmmGpioValue;
//
// make sure EFI_SMM_VARIABLE_PROTOCOL is available
@@ -856,6 +860,7 @@
if (!mSmmVariable) {
return;
}
+ SmmGpioValue = DetectGpioPinValue();
VarSize = sizeof(SYSTEM_CONFIGURATION);
@@ -869,8 +874,8 @@
&VarSize,
&mSystemConfiguration
);
- if (EFI_ERROR(Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
- //The setup variable is corrupted
+ if (EFI_ERROR(Status) || VarSize != sizeof(SYSTEM_CONFIGURATION) ||
SmmGpioValue == 0) {
+ //The setup variable is corrupted or detect GPIO_S5_17 Pin is low
VarSize = sizeof(SYSTEM_CONFIGURATION);
Status = mSmmVariable->SmmGetVariable(
L"SetupRecovery",
------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741911&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits