[TGL] Enabling WDT for TCC DSO
When some settings from DSO caused system hang, the WDT would cause the system reboot. And in the next boot, SBL would use the default setting by not apply the DSO values. Signed-off-by: Guo Dong <guo.dong@intel.com>
This commit is contained in:
parent
93d4460686
commit
2064c1f003
|
@ -287,6 +287,7 @@ class Board(BaseBoard):
|
|||
'BasePchPciBdfLib|Silicon/$(PCH_PKG_NAME)/Library/BasePchPciBdfLib/BasePchPciBdfLib.inf',
|
||||
'GpioLib|Silicon/CommonSocPkg/Library/GpioLib/GpioLib.inf',
|
||||
'GpioSiLib|Silicon/$(PCH_PKG_NAME)/Library/GpioSiLib/GpioSiLib.inf',
|
||||
'WatchDogTimerLib|Silicon/CommonSocPkg/Library/WatchDogTimerLib/WatchDogTimerLib.inf',
|
||||
]
|
||||
|
||||
if self.BUILD_CSME_UPDATE_DRIVER:
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include <PlatformBoardId.h>
|
||||
#include <TccConfigSubRegions.h>
|
||||
#include <Library/ResetSystemLib.h>
|
||||
#include <Library/WatchDogTimerLib.h>
|
||||
|
||||
CONST PLT_DEVICE mPlatformDevices[]= {
|
||||
{{0x00001700}, OsBootDeviceSata , 0 },
|
||||
|
@ -103,19 +104,26 @@ TccModePreMemConfig (
|
|||
DEBUG ((DEBUG_INFO, "S0ix is turned off when TCC is enabled\n"));
|
||||
}
|
||||
|
||||
// Load TCC stream config from container
|
||||
TccStreamBase = NULL;
|
||||
TccStreamSize = 0;
|
||||
Status = LoadComponent (SIGNATURE_32 ('I', 'P', 'F', 'W'), SIGNATURE_32 ('T', 'C', 'C', 'T'),
|
||||
(VOID **)&TccStreamBase, &TccStreamSize);
|
||||
if (EFI_ERROR (Status) || (TccStreamSize < sizeof(TCC_STREAM_CONFIGURATION))) {
|
||||
DEBUG ((DEBUG_INFO, "Load TCC Stream %r, size = 0x%x\n", Status, TccStreamSize));
|
||||
} else {
|
||||
FspmUpd->FspmConfig.TccStreamCfgBasePreMem = (UINT32)(UINTN)TccStreamBase;
|
||||
FspmUpd->FspmConfig.TccStreamCfgSizePreMem = TccStreamSize;
|
||||
DEBUG ((DEBUG_INFO, "Load TCC stream @0x%p, size = 0x%x\n", TccStreamBase, TccStreamSize));
|
||||
if (IsWdtFlagsSet(WDT_FLAG_TCC_DSO) && IsWdtTimeout()) {
|
||||
DEBUG ((DEBUG_INFO, "Incorrect TCC tuning parameters. Platform rebooted with default values.\n"));
|
||||
WdtClearFlags (WDT_FLAG_TCC_DSO);
|
||||
FspmUpd->FspmConfig.TccStreamCfgStatusPreMem = 1;
|
||||
} else if (TccCfgData->TccTuning != 0) {
|
||||
// Setup Watch dog timer
|
||||
WdtReloadAndStart (WDT_TIMEOUT_TCC_DSO, WDT_FLAG_TCC_DSO);
|
||||
|
||||
// Load TCC stream config from container
|
||||
TccStreamBase = NULL;
|
||||
TccStreamSize = 0;
|
||||
Status = LoadComponent (SIGNATURE_32 ('I', 'P', 'F', 'W'), SIGNATURE_32 ('T', 'C', 'C', 'T'),
|
||||
(VOID **)&TccStreamBase, &TccStreamSize);
|
||||
if (EFI_ERROR (Status) || (TccStreamSize < sizeof(TCC_STREAM_CONFIGURATION))) {
|
||||
DEBUG ((DEBUG_INFO, "Load TCC Stream %r, size = 0x%x\n", Status, TccStreamSize));
|
||||
} else {
|
||||
FspmUpd->FspmConfig.TccStreamCfgBasePreMem = (UINT32)(UINTN)TccStreamBase;
|
||||
FspmUpd->FspmConfig.TccStreamCfgSizePreMem = TccStreamSize;
|
||||
DEBUG ((DEBUG_INFO, "Load TCC stream @0x%p, size = 0x%x\n", TccStreamBase, TccStreamSize));
|
||||
|
||||
if (TccCfgData->TccTuning != 0) {
|
||||
StreamConfig = (TCC_STREAM_CONFIGURATION *) TccStreamBase;
|
||||
PolicyConfig = (BIOS_SETTINGS *) &StreamConfig->BiosSettings;
|
||||
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
TpmLib
|
||||
BootGuardLib
|
||||
BoardSupportLib
|
||||
WatchDogTimerLib
|
||||
|
||||
[Guids]
|
||||
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
#include <TccConfigSubRegions.h>
|
||||
#include <Library/LocalApicLib.h>
|
||||
#include <Library/TccLib.h>
|
||||
#include <Library/WatchDogTimerLib.h>
|
||||
#include "Dts.h"
|
||||
#include <Library/PlatformHookLib.h>
|
||||
|
||||
|
@ -953,6 +954,9 @@ BoardInit (
|
|||
Status = PcdSet32S (PcdAcpiTableTemplatePtr, (UINT32)(UINTN)mPlatformAcpiTables);
|
||||
break;
|
||||
case PostSiliconInit:
|
||||
if (IsWdtFlagsSet(WDT_FLAG_TCC_DSO)) {
|
||||
WdtDisable (WDT_FLAG_TCC_DSO);
|
||||
}
|
||||
// Set TSEG base/size PCD
|
||||
TsegBase = MmioRead32 (TO_MM_PCI_ADDRESS (0x00000000) + R_SA_TSEGMB) & ~0xF;
|
||||
TsegSize = MmioRead32 (TO_MM_PCI_ADDRESS (0x00000000) + R_SA_BGSM) & ~0xF;
|
||||
|
@ -1234,20 +1238,29 @@ TccModePostMemConfig (
|
|||
FspsUpd->FspsConfig.TccErrorLogEn = TccCfgData->TccErrorLog;
|
||||
FspsUpd->FspsConfig.IfuEnable = 0;
|
||||
|
||||
// Load TCC stream config from container
|
||||
TccStreamBase = NULL;
|
||||
TccStreamSize = 0;
|
||||
Status = LoadComponent (SIGNATURE_32 ('I', 'P', 'F', 'W'), SIGNATURE_32 ('T', 'C', 'C', 'T'),
|
||||
(VOID **)&TccStreamBase, &TccStreamSize);
|
||||
if (EFI_ERROR (Status) || (TccStreamSize < sizeof (TCC_STREAM_CONFIGURATION))) {
|
||||
DEBUG ((DEBUG_INFO, "Load TCC Stream %r, size = 0x%x\n", Status, TccStreamSize));
|
||||
} else {
|
||||
FspsUpd->FspsConfig.TccStreamCfgBase = (UINT32)(UINTN)TccStreamBase;
|
||||
FspsUpd->FspsConfig.TccStreamCfgSize = TccStreamSize;
|
||||
DEBUG ((DEBUG_INFO, "Load tcc stream @0x%p, size = 0x%x\n", TccStreamBase, TccStreamSize));
|
||||
if (!IsWdtFlagsSet(WDT_FLAG_TCC_DSO)) {
|
||||
//
|
||||
// If FSPM doesn't enable TCC DSO timer, FSPS should also skip TCC DSO.
|
||||
//
|
||||
DEBUG ((DEBUG_INFO, "DSO Tuning skipped.\n"));
|
||||
FspsUpd->FspsConfig.TccStreamCfgStatus = 1;
|
||||
} else if (TccCfgData->TccTuning != 0) {
|
||||
// Reload Watch dog timer
|
||||
WdtReloadAndStart (WDT_TIMEOUT_TCC_DSO, WDT_FLAG_TCC_DSO);
|
||||
|
||||
// Update UPD from stream
|
||||
if (TccCfgData->TccTuning != 0) {
|
||||
// Load TCC stream config from container
|
||||
TccStreamBase = NULL;
|
||||
TccStreamSize = 0;
|
||||
Status = LoadComponent (SIGNATURE_32 ('I', 'P', 'F', 'W'), SIGNATURE_32 ('T', 'C', 'C', 'T'),
|
||||
(VOID **)&TccStreamBase, &TccStreamSize);
|
||||
if (EFI_ERROR (Status) || (TccStreamSize < sizeof (TCC_STREAM_CONFIGURATION))) {
|
||||
DEBUG ((DEBUG_INFO, "Load TCC Stream %r, size = 0x%x\n", Status, TccStreamSize));
|
||||
} else {
|
||||
FspsUpd->FspsConfig.TccStreamCfgBase = (UINT32)(UINTN)TccStreamBase;
|
||||
FspsUpd->FspsConfig.TccStreamCfgSize = TccStreamSize;
|
||||
DEBUG ((DEBUG_INFO, "Load tcc stream @0x%p, size = 0x%x\n", TccStreamBase, TccStreamSize));
|
||||
|
||||
// Update UPD from stream
|
||||
StreamConfig = (TCC_STREAM_CONFIGURATION *) TccStreamBase;
|
||||
PolicyConfig = (BIOS_SETTINGS *) &StreamConfig->BiosSettings;
|
||||
FspsUpd->FspsConfig.Eist = PolicyConfig->Pstates;
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
BasePchPciBdfLib
|
||||
TccLib
|
||||
SmbiosInitLib
|
||||
WatchDogTimerLib
|
||||
|
||||
[Guids]
|
||||
gOsConfigDataGuid
|
||||
|
|
Loading…
Reference in New Issue