在 8/3/2018 6:31 PM, Ard Biesheuvel 写道:
> On 24 July 2018 at 09:08, Ming Huang <ming.huang@linaro.org> wrote:
>> From: Sun Yuanchen <sunyuanchen@huawei.com>
>>
>> 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 <wangyue41@huawei.com>
>> Signed-off-by: Ming Huang <ming.huang@linaro.org>
>> Signed-off-by: Heyi Guo <heyi.guo@linaro.org>
>> ---
>> 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
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel