在 8/3/2018 6:31 PM, Ard Biesheuvel 写道:
> On 24 July 2018 at 09:08, Ming Huang <[email protected]> wrote:
>> From: Sun Yuanchen <[email protected]>
>>
>> according as watchdog design on D06, watchdog should be
>> stoped befor boot a option.
>>
> 
> Why? The DXE core already handles the watchdog, why do you need
> something special here?

This is an out of band watchdog timer in BMC; it is used to monitor
the whole BIOS boot process and reset the system in case BIOS hangs
somewhere, i.e. it is armed when system is power on, and disabled
before handling system control to OS, while UEFI boot services watchdog
is only armed before invoking a boot option. So they are two different
watchdogs.
Thanks.

> 
>> Contributed-under: TianoCore Contribution Agreement 1.1
>> Signed-off-by: Wang Yue <[email protected]>
>> Signed-off-by: Ming Huang <[email protected]>
>> Signed-off-by: Heyi Guo <[email protected]>
>> ---
>>  Silicon/Hisilicon/Include/Library/IpmiCmdLib.h                              
>> | 16 ++++++++++++++
>>  Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c               
>> | 22 ++++++++++++++++++++
>>  Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf 
>> |  2 ++
>>  3 files changed, 40 insertions(+)
>>
>> diff --git a/Silicon/Hisilicon/Include/Library/IpmiCmdLib.h 
>> b/Silicon/Hisilicon/Include/Library/IpmiCmdLib.h
>> index 8868b76135..b956ee6d07 100644
>> --- a/Silicon/Hisilicon/Include/Library/IpmiCmdLib.h
>> +++ b/Silicon/Hisilicon/Include/Library/IpmiCmdLib.h
>> @@ -19,6 +19,17 @@
>>  #define BOOT_OPTION_BOOT_FLAG_VALID         1
>>  #define BOOT_OPTION_BOOT_FLAG_INVALID       0
>>
>> +typedef enum {
>> +  EfiReserved,
>> +  EfiBiosFrb2,
>> +  EfiBiosPost,
>> +  EfiOsLoad,
>> +  EfiSmsOs,
>> +  EfiOem,
>> +  EfiFrbReserved1,
>> +  EfiFrbReserved2
>> +} EFI_WDT_USER_TYPE;
>> +
>>  typedef enum {
>>    NoOverride = 0x0,
>>    ForcePxe,
>> @@ -91,4 +102,9 @@ IpmiCmdGetSysBootOptions (
>>    IN IPMI_GET_BOOT_OPTION   *BootOption
>>    );
>>
>> +EFI_STATUS
>> +IpmiCmdStopWatchdogTimer (
>> +  IN EFI_WDT_USER_TYPE  UserType
>> +  );
>> +
>>  #endif
>> diff --git a/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c 
>> b/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c
>> index f7536bfea3..9636f29dce 100644
>> --- a/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c
>> +++ b/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBm.c
>> @@ -19,8 +19,10 @@
>>  #include <Library/BootLogoLib.h>
>>  #include <Library/BmcConfigBootLib.h>
>>  #include <Library/DevicePathLib.h>
>> +#include <Library/OemConfigData.h>
>>  #include <Library/PcdLib.h>
>>  #include <Library/TimerLib.h>
>> +#include <Library/IpmiCmdLib.h>
>>  #include <Library/UefiBootManagerLib.h>
>>  #include <Library/UefiLib.h>
>>  #include <Protocol/DevicePath.h>
>> @@ -615,6 +617,8 @@ PlatformBootManagerAfterConsole (
>>  {
>>    EFI_STATUS Status;
>>    ESRT_MANAGEMENT_PROTOCOL           *EsrtManagement = NULL;
>> +  OEM_CONFIG_DATA                    SetupData;
>> +  UINTN                              DataSize = sizeof (OEM_CONFIG_DATA);
>>
>>    //
>>    // Show the splash screen.
>> @@ -651,6 +655,24 @@ PlatformBootManagerAfterConsole (
>>      );
>>
>>    HandleBmcBootType ();
>> +
>> +  //Disable POST Watch Dog before enter setup
>> +  Status = gRT->GetVariable (
>> +                  OEM_CONFIG_NAME,
>> +                  &gOemConfigGuid,
>> +                  NULL,
>> +                  &DataSize,
>> +                  &SetupData
>> +                  );
>> +
>> +  if (!EFI_ERROR (Status)) {
>> +    if (SetupData.BmcWdtEnable) {
>> +      Status = IpmiCmdStopWatchdogTimer (EfiBiosPost);
>> +      if (EFI_ERROR (Status)) {
>> +        DEBUG ((DEBUG_ERROR, "%a:%r\n", __FUNCTION__, Status));
>> +      }
>> +    }
>> +  }
>>  }
>>
>>  /**
>> diff --git 
>> a/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
>>  
>> b/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
>> index a093f13fb0..21afb53fc5 100644
>> --- 
>> a/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
>> +++ 
>> b/Silicon/Hisilicon/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
>> @@ -47,6 +47,7 @@
>>    DevicePathLib
>>    DxeServicesLib
>>    MemoryAllocationLib
>> +  IpmiCmdLib
>>    PcdLib
>>    PrintLib
>>    TimerLib
>> @@ -69,6 +70,7 @@
>>    gEfiEndOfDxeEventGroupGuid
>>    gEfiTtyTermGuid
>>    gHisiOemVariableGuid
>> +  gOemConfigGuid
>>
>>  [Protocols]
>>    gEfiGenericMemTestProtocolGuid
>> --
>> 2.17.0
>>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to