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;
|
CPUID_VERSION_INFO_EDX RegEdx;
|
||||||
UINT32 MaxExtendedFunction;
|
UINT32 MaxExtendedFunction;
|
||||||
CPUID_VIR_PHY_ADDRESS_SIZE_EAX VirPhyAddressSize;
|
CPUID_VIR_PHY_ADDRESS_SIZE_EAX VirPhyAddressSize;
|
||||||
|
BOOLEAN RelaxedMode;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Determine if this CPU supports machine check
|
// Determine if this CPU supports machine check
|
||||||
|
@ -1943,7 +1944,10 @@ InitializeMpServiceData (
|
||||||
(sizeof (SMM_CPU_DATA_BLOCK) + sizeof (BOOLEAN)) * gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus;
|
(sizeof (SMM_CPU_DATA_BLOCK) + sizeof (BOOLEAN)) * gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus;
|
||||||
mSmmMpSyncData = (SMM_DISPATCHER_MP_SYNC_DATA *)AllocatePages (EFI_SIZE_TO_PAGES (mSmmMpSyncDataSize));
|
mSmmMpSyncData = (SMM_DISPATCHER_MP_SYNC_DATA *)AllocatePages (EFI_SIZE_TO_PAGES (mSmmMpSyncDataSize));
|
||||||
ASSERT (mSmmMpSyncData != NULL);
|
ASSERT (mSmmMpSyncData != NULL);
|
||||||
mCpuSmmSyncMode = (SMM_CPU_SYNC_MODE)PcdGet8 (PcdCpuSmmSyncMode);
|
|
||||||
|
RelaxedMode = FALSE;
|
||||||
|
GetSmmCpuSyncConfigData (&RelaxedMode, NULL, NULL);
|
||||||
|
mCpuSmmSyncMode = RelaxedMode ? SmmCpuSyncModeRelaxedAp : SmmCpuSyncModeTradition;
|
||||||
InitializeMpSyncData ();
|
InitializeMpSyncData ();
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -1078,6 +1078,22 @@ RestoreSmmConfigurationInS3 (
|
||||||
VOID
|
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.
|
Get ACPI S3 enable flag.
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,35 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
#include "PiSmmCpuCommon.h"
|
#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.
|
Get ACPI S3 enable flag.
|
||||||
|
|
||||||
|
|
|
@ -31,16 +31,22 @@ InitializeSmmTimer (
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT64 TimerFrequency;
|
UINT64 TimerFrequency;
|
||||||
|
UINT64 SyncTimeout;
|
||||||
|
UINT64 SyncTimeout2;
|
||||||
UINT64 Start;
|
UINT64 Start;
|
||||||
UINT64 End;
|
UINT64 End;
|
||||||
|
|
||||||
|
SyncTimeout = 0;
|
||||||
|
SyncTimeout2 = 0;
|
||||||
|
GetSmmCpuSyncConfigData (NULL, &SyncTimeout, &SyncTimeout2);
|
||||||
|
|
||||||
TimerFrequency = GetPerformanceCounterProperties (&Start, &End);
|
TimerFrequency = GetPerformanceCounterProperties (&Start, &End);
|
||||||
mTimeoutTicker = DivU64x32 (
|
mTimeoutTicker = DivU64x32 (
|
||||||
MultU64x64 (TimerFrequency, PcdGet64 (PcdCpuSmmApSyncTimeout)),
|
MultU64x64 (TimerFrequency, SyncTimeout),
|
||||||
1000 * 1000
|
1000 * 1000
|
||||||
);
|
);
|
||||||
mTimeoutTicker2 = DivU64x32 (
|
mTimeoutTicker2 = DivU64x32 (
|
||||||
MultU64x64 (TimerFrequency, PcdGet64 (PcdCpuSmmApSyncTimeout2)),
|
MultU64x64 (TimerFrequency, SyncTimeout2),
|
||||||
1000 * 1000
|
1000 * 1000
|
||||||
);
|
);
|
||||||
if (End < Start) {
|
if (End < Start) {
|
||||||
|
|
Loading…
Reference in New Issue