public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Yuanhao Xie" <yuanhao.xie@intel.com>
To: devel@edk2.groups.io
Cc: Ray Ni <ray.ni@intel.com>, Yuanhao Xie <yuanhao.xie@intel.com>,
	Eric Dong <eric.dong@intel.com>,
	Rahul Kumar <rahul1.kumar@intel.com>,
	Gerd Hoffmann <kraxel@redhat.com>
Subject: [edk2-devel] [PATCH 10/16] UefiCpuPkg/MtrrLib: Fix MtrrSetAllMtrrs to handle absent fixed MTRRs.
Date: Wed, 13 Sep 2023 12:26:33 +0800	[thread overview]
Message-ID: <20230913042639.2066-11-yuanhao.xie@intel.com> (raw)
In-Reply-To: <20230913042639.2066-1-yuanhao.xie@intel.com>

From: Ray Ni <ray.ni@intel.com>

Update MtrrSetAllMtrrs to not access fixed MTRRs if CPU doesn't
support them.

Signed-off-by: Ray Ni <ray.ni@intel.com>
Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>

Cc: Eric Dong <eric.dong@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Gerd Hoffmann <kraxel@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/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  parent reply	other threads:[~2023-09-13  4:27 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-13  4:26 [edk2-devel] [PATCH 00/16] MtrrLib modules and Unit test Enhancement Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 01/16] UefiCpuPkg/MtrrLib: Add internal function MtrrLibIsMtrrSupported Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 02/16] UefiCpuPkg/MtrrUnitTest: Update the Unit Test for IsMtrrSupported() Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 03/16] UefiCpuPkg/MtrrUnitTest: Update UnitTestGetFirmwareVariableMtrrCount Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 04/16] UefiCpuPkg/MtrrUnitTest: Update UnitTestMtrrGetDefaultMemoryType Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 05/16] UefiCpuPkg/MtrrUnitTest: Update test to cover no-fixed-mtrr cases Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 06/16] UefiCpuPkg/MtrrLib: Fix MtrrGetAllMtrrs to return correct MTRR setting Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 07/16] UefiCpuPkg/MtrrUnitTest: Update UnitTestMtrrGetAllMtrrs() Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 08/16] UefiCpuPkg/MtrrLib: Update MtrrGetFixedMtrr() Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 09/16] UefiCpuPkg/MtrrUnitTest: Update UnitTestMtrrGetFixedMtrr() Yuanhao Xie
2023-09-13  4:26 ` Yuanhao Xie [this message]
2023-09-13  4:26 ` [edk2-devel] [PATCH 11/16] UefiCpuPkg/MtrrUnitTest: Update UnitTestMtrrSetAllMtrrs() Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 12/16] UefiCpuPkg/MtrrLib: Update APIs related to set memory attributes Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 13/16] UefiCpuPkg/MtrrLib: Add API MtrrGetMemoryAttributesInMtrrSettings Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 14/16] UefiCpuPkg/MtrrLib: Improve MtrrDebugPrintAllMtrrsWorker Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 15/16] UefiCpuPkg/MtrrUnitTest: Add Unit test of setting/getting memory attributes Yuanhao Xie
2023-09-13  4:26 ` [edk2-devel] [PATCH 16/16] UefiCpuPkg/CpuDxe: Update RefreshMemoryAttributesFromMtrr Yuanhao Xie
2023-10-01  9:30 ` [edk2-devel] [PATCH 00/16] MtrrLib modules and Unit test Enhancement Ni, Ray
2023-10-09  6:27 ` Dong, Eric

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230913042639.2066-11-yuanhao.xie@intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox