UefiCpuPkg/PiSmmCpuDxeSmm: Get SmmCpuSyncConfig data from func
MM can not use the dynamic PCD (PcdCpuSmmSyncMode & PcdCpuSmmApSyncTimeout & PcdCpuSmmApSyncTimeout2), so, move to DxeSmm code and implement in GetSmmCpuSyncConfigData function. 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:
parent
23c5ee6e23
commit
d480f106a6
|
@ -1924,6 +1924,7 @@ InitializeMpServiceData (
|
|||
CPUID_VERSION_INFO_EDX RegEdx;
|
||||
UINT32 MaxExtendedFunction;
|
||||
CPUID_VIR_PHY_ADDRESS_SIZE_EAX VirPhyAddressSize;
|
||||
BOOLEAN RelaxedMode;
|
||||
|
||||
//
|
||||
// Determine if this CPU supports machine check
|
||||
|
@ -1943,7 +1944,10 @@ InitializeMpServiceData (
|
|||
(sizeof (SMM_CPU_DATA_BLOCK) + sizeof (BOOLEAN)) * gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus;
|
||||
mSmmMpSyncData = (SMM_DISPATCHER_MP_SYNC_DATA *)AllocatePages (EFI_SIZE_TO_PAGES (mSmmMpSyncDataSize));
|
||||
ASSERT (mSmmMpSyncData != NULL);
|
||||
mCpuSmmSyncMode = (SMM_CPU_SYNC_MODE)PcdGet8 (PcdCpuSmmSyncMode);
|
||||
|
||||
RelaxedMode = FALSE;
|
||||
GetSmmCpuSyncConfigData (&RelaxedMode, NULL, NULL);
|
||||
mCpuSmmSyncMode = RelaxedMode ? SmmCpuSyncModeRelaxedAp : SmmCpuSyncModeTradition;
|
||||
InitializeMpSyncData ();
|
||||
|
||||
//
|
||||
|
|
|
@ -1078,6 +1078,22 @@ RestoreSmmConfigurationInS3 (
|
|||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
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
|
||||
);
|
||||
|
||||
/**
|
||||
Get ACPI S3 enable flag.
|
||||
|
||||
|
|
|
@ -11,6 +11,35 @@ 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
|
||||
)
|
||||
{
|
||||
if (RelaxedMode != NULL) {
|
||||
*RelaxedMode = (BOOLEAN)(PcdGet8 (PcdCpuSmmSyncMode) == SmmCpuSyncModeRelaxedAp);
|
||||
}
|
||||
|
||||
if (SyncTimeout != NULL) {
|
||||
*SyncTimeout = PcdGet64 (PcdCpuSmmApSyncTimeout);
|
||||
}
|
||||
|
||||
if (SyncTimeout2 != NULL) {
|
||||
*SyncTimeout2 = PcdGet64 (PcdCpuSmmApSyncTimeout2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Get ACPI S3 enable flag.
|
||||
|
||||
|
|
|
@ -31,16 +31,22 @@ InitializeSmmTimer (
|
|||
)
|
||||
{
|
||||
UINT64 TimerFrequency;
|
||||
UINT64 SyncTimeout;
|
||||
UINT64 SyncTimeout2;
|
||||
UINT64 Start;
|
||||
UINT64 End;
|
||||
|
||||
SyncTimeout = 0;
|
||||
SyncTimeout2 = 0;
|
||||
GetSmmCpuSyncConfigData (NULL, &SyncTimeout, &SyncTimeout2);
|
||||
|
||||
TimerFrequency = GetPerformanceCounterProperties (&Start, &End);
|
||||
mTimeoutTicker = DivU64x32 (
|
||||
MultU64x64 (TimerFrequency, PcdGet64 (PcdCpuSmmApSyncTimeout)),
|
||||
MultU64x64 (TimerFrequency, SyncTimeout),
|
||||
1000 * 1000
|
||||
);
|
||||
mTimeoutTicker2 = DivU64x32 (
|
||||
MultU64x64 (TimerFrequency, PcdGet64 (PcdCpuSmmApSyncTimeout2)),
|
||||
MultU64x64 (TimerFrequency, SyncTimeout2),
|
||||
1000 * 1000
|
||||
);
|
||||
if (End < Start) {
|
||||
|
|
Loading…
Reference in New Issue