From: Ray Ni <ray...@intel.com> Update MtrrSetAllMtrrs to not access fixed MTRRs if CPU doesn't support them.
Signed-off-by: Ray Ni <ray...@intel.com> Signed-off-by: Yuanhao Xie <yuanhao....@intel.com> Cc: Eric Dong <eric.d...@intel.com> Cc: Rahul Kumar <rahul1.ku...@intel.com> Cc: Gerd Hoffmann <kra...@redhat.com> --- UefiCpuPkg/Include/Library/MtrrLib.h | 9 ++++++--- UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 26 ++++++++++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/UefiCpuPkg/Include/Library/MtrrLib.h b/UefiCpuPkg/Include/Library/MtrrLib.h index 683d9f2c14..94cf615901 100644 --- a/UefiCpuPkg/Include/Library/MtrrLib.h +++ b/UefiCpuPkg/Include/Library/MtrrLib.h @@ -1,7 +1,7 @@ /** @file MTRR setting library - Copyright (c) 2008 - 2020, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2008 - 2023, Intel Corporation. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -214,9 +214,12 @@ MtrrGetAllMtrrs ( /** This function sets all MTRRs (variable and fixed) - @param[in] MtrrSetting A buffer to hold all MTRRs content. + Note: The behavior of this function is to program everything in MtrrSetting to hardware. + MTRR might not be enabled due to enable bit is clear in MtrrSetting->MtrrDefType. - @return The pointer of MtrrSetting + @param[in] MtrrSetting A buffer holding all MTRRs content. + + @retval The pointer of MtrrSetting **/ MTRR_SETTINGS * diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c index b63c4b1c26..9a01f1417f 100644 --- a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c +++ b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c @@ -2868,7 +2868,10 @@ MtrrGetAllMtrrs ( } /** - This function sets all MTRRs (variable and fixed) + This function sets all MTRRs includes Variable and Fixed. + + The behavior of this function is to program everything in MtrrSetting to hardware. + MTRRs might not be enabled because the enable bit is clear in MtrrSetting->MtrrDefType. @param[in] MtrrSetting A buffer holding all MTRRs content. @@ -2881,21 +2884,32 @@ MtrrSetAllMtrrs ( IN MTRR_SETTINGS *MtrrSetting ) { - MTRR_CONTEXT MtrrContext; + BOOLEAN FixedMtrrSupported; + MSR_IA32_MTRR_DEF_TYPE_REGISTER *MtrrDefType; + MTRR_CONTEXT MtrrContext; - if (!IsMtrrSupported ()) { + MtrrDefType = (MSR_IA32_MTRR_DEF_TYPE_REGISTER *)&MtrrSetting->MtrrDefType; + if (!MtrrLibIsMtrrSupported (&FixedMtrrSupported, NULL)) { return MtrrSetting; } MtrrLibPreMtrrChange (&MtrrContext); // - // Set fixed MTRRs + // Enabling the Fixed MTRR bit when unsupported is not allowed. + // + ASSERT (FixedMtrrSupported || (MtrrDefType->Bits.FE == 0)); + + // + // If the hardware supports Fixed MTRR, it is sufficient + // to set MTRRs regardless of whether Fixed MTRR bit is enabled. // - MtrrSetFixedMtrrWorker (&MtrrSetting->Fixed); + if (FixedMtrrSupported) { + MtrrSetFixedMtrrWorker (&MtrrSetting->Fixed); + } // - // Set variable MTRRs + // Set Variable MTRRs // MtrrSetVariableMtrrWorker (&MtrrSetting->Variables); -- 2.36.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#108566): https://edk2.groups.io/g/devel/message/108566 Mute This Topic: https://groups.io/mt/101331028/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-