REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3394
With new API GetMaxPlatformAddressBits, the API MtrrLibInitializeMtrrMask and InitializeMtrrMask can be replaced. Cc: Eric Dong <eric.d...@intel.com> Cc: Ray Ni <ray...@intel.com> Cc: Rahul Kumar <rahul1.ku...@intel.com> Cc: Gerd Hoffmann <kra...@redhat.com> Signed-off-by: Zhiguang Liu <zhiguang....@intel.com> --- UefiCpuPkg/CpuDxe/CpuDxe.c | 49 +----------------------- UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 56 ++-------------------------- 2 files changed, 4 insertions(+), 101 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c index 804ef5d1fe..7505801c01 100644 --- a/UefiCpuPkg/CpuDxe/CpuDxe.c +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c @@ -494,52 +494,6 @@ CpuSetMemoryAttributes ( return AssignMemoryPageAttributes (NULL, BaseAddress, Length, MemoryAttributes, NULL); } -/** - Initializes the valid bits mask and valid address mask for MTRRs. - - This function initializes the valid bits mask and valid address mask for MTRRs. - -**/ -VOID -InitializeMtrrMask ( - VOID - ) -{ - UINT32 MaxExtendedFunction; - CPUID_VIR_PHY_ADDRESS_SIZE_EAX VirPhyAddressSize; - UINT32 MaxFunction; - CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX ExtendedFeatureFlagsEcx; - MSR_IA32_TME_ACTIVATE_REGISTER TmeActivate; - - AsmCpuid (CPUID_EXTENDED_FUNCTION, &MaxExtendedFunction, NULL, NULL, NULL); - - if (MaxExtendedFunction >= CPUID_VIR_PHY_ADDRESS_SIZE) { - AsmCpuid (CPUID_VIR_PHY_ADDRESS_SIZE, &VirPhyAddressSize.Uint32, NULL, NULL, NULL); - } else { - VirPhyAddressSize.Bits.PhysicalAddressBits = 36; - } - - // - // CPUID enumeration of MAX_PA is unaffected by TME-MK activation and will continue - // to report the maximum physical address bits available for software to use, - // irrespective of the number of KeyID bits. - // So, we need to check if TME is enabled and adjust the PA size accordingly. - // - AsmCpuid (CPUID_SIGNATURE, &MaxFunction, NULL, NULL, NULL); - if (MaxFunction >= CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS) { - AsmCpuidEx (CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS, 0, NULL, NULL, &ExtendedFeatureFlagsEcx.Uint32, NULL); - if (ExtendedFeatureFlagsEcx.Bits.TME_EN == 1) { - TmeActivate.Uint64 = AsmReadMsr64 (MSR_IA32_TME_ACTIVATE); - if (TmeActivate.Bits.TmeEnable == 1) { - VirPhyAddressSize.Bits.PhysicalAddressBits -= TmeActivate.Bits.MkTmeKeyidBits; - } - } - } - - mValidMtrrBitsMask = LShiftU64 (1, VirPhyAddressSize.Bits.PhysicalAddressBits) - 1; - mValidMtrrAddressMask = mValidMtrrBitsMask & 0xfffffffffffff000ULL; -} - /** Gets GCD Mem Space type from MTRR Type. @@ -740,8 +694,7 @@ RefreshMemoryAttributesFromMtrr ( // // Initialize the valid bits mask and valid address mask for MTRRs // - InitializeMtrrMask (); - + GetMaxPlatformAddressBits (&mValidMtrrBitsMask, &mValidMtrrAddressMask); // // Get the memory attribute of variable MTRRs // diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c index 22ec8d2a48..95bf8d771f 100644 --- a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c +++ b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c @@ -741,56 +741,6 @@ MtrrLibTypeLeftPrecedeRight ( return (BOOLEAN)(Left == CacheUncacheable || (Left == CacheWriteThrough && Right == CacheWriteBack)); } -/** - Initializes the valid bits mask and valid address mask for MTRRs. - - This function initializes the valid bits mask and valid address mask for MTRRs. - - @param[out] MtrrValidBitsMask The mask for the valid bit of the MTRR - @param[out] MtrrValidAddressMask The valid address mask for the MTRR - -**/ -VOID -MtrrLibInitializeMtrrMask ( - OUT UINT64 *MtrrValidBitsMask, - OUT UINT64 *MtrrValidAddressMask - ) -{ - UINT32 MaxExtendedFunction; - CPUID_VIR_PHY_ADDRESS_SIZE_EAX VirPhyAddressSize; - UINT32 MaxFunction; - CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX ExtendedFeatureFlagsEcx; - MSR_IA32_TME_ACTIVATE_REGISTER TmeActivate; - - AsmCpuid (CPUID_EXTENDED_FUNCTION, &MaxExtendedFunction, NULL, NULL, NULL); - - if (MaxExtendedFunction >= CPUID_VIR_PHY_ADDRESS_SIZE) { - AsmCpuid (CPUID_VIR_PHY_ADDRESS_SIZE, &VirPhyAddressSize.Uint32, NULL, NULL, NULL); - } else { - VirPhyAddressSize.Bits.PhysicalAddressBits = 36; - } - - // - // CPUID enumeration of MAX_PA is unaffected by TME-MK activation and will continue - // to report the maximum physical address bits available for software to use, - // irrespective of the number of KeyID bits. - // So, we need to check if TME is enabled and adjust the PA size accordingly. - // - AsmCpuid (CPUID_SIGNATURE, &MaxFunction, NULL, NULL, NULL); - if (MaxFunction >= CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS) { - AsmCpuidEx (CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS, 0, NULL, NULL, &ExtendedFeatureFlagsEcx.Uint32, NULL); - if (ExtendedFeatureFlagsEcx.Bits.TME_EN == 1) { - TmeActivate.Uint64 = AsmReadMsr64 (MSR_IA32_TME_ACTIVATE); - if (TmeActivate.Bits.TmeEnable == 1) { - VirPhyAddressSize.Bits.PhysicalAddressBits -= TmeActivate.Bits.MkTmeKeyidBits; - } - } - } - - *MtrrValidBitsMask = LShiftU64 (1, VirPhyAddressSize.Bits.PhysicalAddressBits) - 1; - *MtrrValidAddressMask = *MtrrValidBitsMask & 0xfffffffffffff000ULL; -} - /** Determines the real attribute of a memory range. @@ -900,7 +850,7 @@ MtrrGetMemoryAttributeByAddressWorker ( ASSERT (VariableMtrrCount <= ARRAY_SIZE (MtrrSetting->Variables.Mtrr)); MtrrGetVariableMtrrWorker (MtrrSetting, VariableMtrrCount, &VariableSettings); - MtrrLibInitializeMtrrMask (&MtrrValidBitsMask, &MtrrValidAddressMask); + GetMaxPlatformAddressBits (&MtrrValidBitsMask, &MtrrValidAddressMask); MtrrLibGetRawVariableRanges ( &VariableSettings, VariableMtrrCount, @@ -2298,7 +2248,7 @@ MtrrSetMemoryAttributesInMtrrSettings ( BOOLEAN MtrrContextValid; Status = RETURN_SUCCESS; - MtrrLibInitializeMtrrMask (&MtrrValidBitsMask, &MtrrValidAddressMask); + GetMaxPlatformAddressBits (&MtrrValidBitsMask, &MtrrValidAddressMask); // // TRUE indicating the accordingly Variable setting needs modificaiton in OriginalVariableMtrr. @@ -2952,7 +2902,7 @@ MtrrDebugPrintAllMtrrsWorker ( // DEBUG ((DEBUG_CACHE, "Memory Ranges:\n")); DEBUG ((DEBUG_CACHE, "====================================\n")); - MtrrLibInitializeMtrrMask (&MtrrValidBitsMask, &MtrrValidAddressMask); + GetMaxPlatformAddressBits (&MtrrValidBitsMask, &MtrrValidAddressMask); Ranges[0].BaseAddress = 0; Ranges[0].Length = MtrrValidBitsMask + 1; Ranges[0].Type = MtrrGetDefaultMemoryTypeWorker (Mtrrs); -- 2.31.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105911): https://edk2.groups.io/g/devel/message/105911 Mute This Topic: https://groups.io/mt/99399601/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-