From 7bd38cbf34df5a2690c79007e2c1579cdba8c788 Mon Sep 17 00:00:00 2001 From: raywu Date: Wed, 11 Sep 2019 10:46:58 +0800 Subject: [DW01] Fixed System Reboot by WDT if There's no Boot Devices --- Core/EM/AMITSE/bootflow.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/Core/EM/AMITSE/bootflow.c b/Core/EM/AMITSE/bootflow.c index 6d1b548..a192bf6 100644 --- a/Core/EM/AMITSE/bootflow.c +++ b/Core/EM/AMITSE/bootflow.c @@ -218,6 +218,10 @@ #include "commonoem.h" #include "HookAnchor.h" +//ray_override / Fixed System Reboot by WDT if There's no Boot Devices / Added >> +#include +//ray_override / Fixed System Reboot by WDT if There's no Boot Devices / Added << + #ifndef MAIN_FORM_SET_CLASS #define MAIN_FORM_SET_CLASS 1 #endif @@ -279,6 +283,45 @@ BOOT_FLOW *gBootFlowTable = _gBootFlowTable; EFI_STATUS LaunchSecondaryBootPath (CHAR16 *); //EIP 88447 EFI_STATUS EfiLibNamedEventSignal (IN EFI_GUID *Name ); //EIP125219 +//ray_override / Fixed System Reboot by WDT if There's no Boot Devices / Added >> +VOID F81866ConfigRegisterWrite(UINT8 Index, UINT8 Data) +{ + IoWrite8(F81866_CONFIG_INDEX, Index); + IoWrite8(F81866_CONFIG_DATA, Data); +} +UINT8 F81866ConfigRegisterRead(UINT8 Index) +{ + UINT8 Data8; + IoWrite8(F81866_CONFIG_INDEX, Index); + Data8 = IoRead8(F81866_CONFIG_DATA); + return Data8; +} +VOID F81866LDNSelect(UINT8 Ldn) +{ + IoWrite8(F81866_CONFIG_INDEX, F81866_LDN_SEL_REGISTER); + IoWrite8(F81866_CONFIG_DATA, Ldn); +} +VOID F81866EnterConfigMode() +{ + IoWrite8(F81866_CONFIG_INDEX, F81866_CONFIG_MODE_ENTER_VALUE); + IoWrite8(F81866_CONFIG_INDEX, F81866_CONFIG_MODE_ENTER_VALUE); +} +VOID F81866ExitConfigMode() +{ + // Exit config mode + IoWrite8(F81866_CONFIG_INDEX, F81866_CONFIG_MODE_EXIT_VALUE); +} + +VOID F81866WDTDisable() +{ + F81866EnterConfigMode() ; + F81866LDNSelect(F81866_LDN_WDT) ; + // WDT Disabled + F81866ConfigRegisterWrite( 0xF5 , F81866ConfigRegisterRead(0xF5) & ~BIT5 ) ; + F81866ExitConfigMode() ; +} +//ray_override / Fixed System Reboot by WDT if There's no Boot Devices / Added << + // //---------------------------------------------------------------------------- // Procedure: BootFlowManageEntry @@ -395,6 +438,9 @@ EFI_STATUS BootFlowManageExit (VOID) MemFreePointer( (VOID **)&conditionPtr ); +//ray_override / Fixed System Reboot by WDT if There's no Boot Devices / Added >> + F81866WDTDisable(); +//ray_override / Fixed System Reboot by WDT if There's no Boot Devices / Added << bootFlowPtr = gBootFlowTable; for ( bootFlowPtr = gBootFlowTable; bootFlowPtr->Condition != BOOT_FLOW_CONDITION_NULL; bootFlowPtr++ ) -- cgit v1.2.3