UefiCpuPkg/PiSmmCpuDxeSmm: Impl GetSmmCpuSyncConfigData for MM

MM CPU can not use the dynamic PCD (PcdCpuSmmSyncMode &
PcdCpuSmmApSyncTimeout & PcdCpuSmmApSyncTimeout2), so, it
consumes the gMmCpuSyncConfigHobGuid for RelaxedApMode &
Timeout & Timeout2.

Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Dun Tan <dun.tan@intel.com>
Cc: Hongbin1 Zhang <hongbin1.zhang@intel.com>
Cc: Wei6 Xu <wei6.xu@intel.com>
Cc: Yuanhao Xie <yuanhao.xie@intel.com>
This commit is contained in:
Jiaxin Wu 2024-06-26 12:47:46 +08:00 committed by mergify[bot]
parent 1f22b96b11
commit 614d6c91bf
2 changed files with 46 additions and 0 deletions

View File

@ -30,6 +30,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Guid/MpInformation2.h>
#include <Guid/MmProfileData.h>
#include <Guid/MmAcpiS3Enable.h>
#include <Guid/MmCpuSyncConfig.h>
#include <Library/BaseLib.h>
#include <Library/IoLib.h>

View File

@ -9,6 +9,51 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "PiSmmCpuCommon.h"
/**
Get SmmCpuSyncConfig data: RelaxedMode, SyncTimeout, SyncTimeout2.
@param[in,out] RelaxedMode It indicates if Relaxed CPU synchronization method or
traditional CPU synchronization method is used when processing an SMI.
@param[in,out] SyncTimeout It indicates the 1st BSP/AP synchronization timeout value in SMM.
@param[in,out] SyncTimeout2 It indicates the 2nd BSP/AP synchronization timeout value in SMM.
**/
VOID
GetSmmCpuSyncConfigData (
IN OUT BOOLEAN *RelaxedMode, OPTIONAL
IN OUT UINT64 *SyncTimeout, OPTIONAL
IN OUT UINT64 *SyncTimeout2 OPTIONAL
)
{
EFI_HOB_GUID_TYPE *GuidHob;
MM_CPU_SYNC_CONFIG *MmCpuSyncConfigHob;
MmCpuSyncConfigHob = NULL;
//
// Get MM_CPU_SYNC_CONFIG for Standalone MM init.
//
GuidHob = GetFirstGuidHob (&gMmCpuSyncConfigHobGuid);
ASSERT (GuidHob != NULL);
if (GuidHob != NULL) {
MmCpuSyncConfigHob = GET_GUID_HOB_DATA (GuidHob);
}
if (MmCpuSyncConfigHob != NULL) {
if (RelaxedMode != NULL) {
*RelaxedMode = ((MmCpuSyncConfigHob->RelaxedApMode == MmCpuSyncModeRelaxedAp) ? TRUE : FALSE);
}
if (SyncTimeout != NULL) {
*SyncTimeout = MmCpuSyncConfigHob->Timeout;
}
if (SyncTimeout2 != NULL) {
*SyncTimeout2 = MmCpuSyncConfigHob->Timeout2;
}
}
}
/**
Get ACPI S3 enable flag.