/** @file
IPMI FRB PEIM.
Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
VOID
SetWatchDogTimer (
IN BOOLEAN Frb2Enabled
)
{
EFI_STATUS Status;
IPMI_SET_WATCHDOG_TIMER_REQUEST FrbTimer;
IPMI_GET_WATCHDOG_TIMER_RESPONSE GetWatchdogTimer;
UINT8 CompletionCode;
Status = IpmiGetWatchdogTimer (&GetWatchdogTimer);
if (EFI_ERROR(Status)) {
return ;
}
if (Frb2Enabled) {
ZeroMem (&FrbTimer, sizeof(FrbTimer));
//Byte 1
FrbTimer.TimerUse.Bits.TimerUse = IPMI_WATCHDOG_TIMER_BIOS_FRB2;
//Byte 2
FrbTimer.TimerActions.Uint8 = 0; //NormalBoot, NoTimeOutInterrupt. i.e no action when BMC watchdog timeout
//Byte 3
FrbTimer.PretimeoutInterval = 0;
//Byte 4
FrbTimer.TimerUseExpirationFlagsClear |= BIT1; //set Frb2ExpirationFlag
//Data Byte 5/6
FrbTimer.InitialCountdownValue = PcdGet16(PcdFRBTimeoutValue) * 10;
//Set BMC watchdog timer
Status = IpmiSetWatchdogTimer (&FrbTimer, &CompletionCode);
Status = IpmiResetWatchdogTimer (&CompletionCode);
}
}
EFI_STATUS
EFIAPI
InitializeFrbPei (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices
)
/*++
Routine Description:
Arguments:
FfsHeader
PeiServices
Returns:
EFI_SUCCESS
--*/
{
BOOLEAN Frb2Enabled;
//
// If we are booting with defaults, then make sure FRB2 is enabled.
//
Frb2Enabled = PcdGetBool (PcdFRB2EnabledFlag);
SetWatchDogTimer (Frb2Enabled);
return EFI_SUCCESS;
}