From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id C4918D80041 for ; Wed, 13 Sep 2023 04:27:01 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=1fWCnxrss2jIGVgcpzczQAwj6hSB2HFOn6DHlFdolHQ=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1694579220; v=1; b=ftxV2XJ+cBASvVnGRS4dbSVJfs/OSo/xyFIwqxc3edXyrsLsaVPe4TMskFM5PkF3EogQ9mrL RlB0F7yWjYZNnRL/8IjC9nddhc7O/DIuJ7LwavdGGSQwSePXcJxlRKuu0J1wXyhW+Ia12cCFFR2 q0JkPkBG+UBZsYqrASNmQJNM= X-Received: by 127.0.0.2 with SMTP id Ms4UYY7687511xO62xw2OAV3; Tue, 12 Sep 2023 21:27:00 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web11.4645.1694579216558329653 for ; Tue, 12 Sep 2023 21:26:59 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10831"; a="363595396" X-IronPort-AV: E=Sophos;i="6.02,142,1688454000"; d="scan'208";a="363595396" X-Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Sep 2023 21:26:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10831"; a="859093604" X-IronPort-AV: E=Sophos;i="6.02,142,1688454000"; d="scan'208";a="859093604" X-Received: from shwdeopenlab705.ccr.corp.intel.com ([10.239.55.100]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Sep 2023 21:26:57 -0700 From: "Yuanhao Xie" To: devel@edk2.groups.io Cc: Ray Ni , Eric Dong , Rahul Kumar , Gerd Hoffmann Subject: [edk2-devel] [PATCH 01/16] UefiCpuPkg/MtrrLib: Add internal function MtrrLibIsMtrrSupported. Date: Wed, 13 Sep 2023 12:26:24 +0800 Message-Id: <20230913042639.2066-2-yuanhao.xie@intel.com> In-Reply-To: <20230913042639.2066-1-yuanhao.xie@intel.com> References: <20230913042639.2066-1-yuanhao.xie@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,yuanhao.xie@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: OiY2NneixWu8tto8fuW4DH7Bx7686176AA= Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=ftxV2XJ+; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none) From: Ray Ni Add internal function MtrrLibIsMtrrSupported and update IsMtrrSupported to call the new internal function. Signed-off-by: Ray Ni Cc: Eric Dong Cc: Rahul Kumar Cc: Gerd Hoffmann --- UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 23 deletions(-) diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c index 22ec8d2a48..bd61ffc240 100644 --- a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c +++ b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c @@ -5,7 +5,7 @@ Most of services in this library instance are suggested to be invoked by BSP only, except for MtrrSetAllMtrrs() which is used to sync BSP's MTRR setting to APs. - Copyright (c) 2008 - 2020, Intel Corporation. All rights reserved.
+ Copyright (c) 2008 - 2023, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -140,6 +140,64 @@ MtrrDebugPrintAllMtrrsWorker ( IN MTRR_SETTINGS *MtrrSetting ); +/** + Return whether MTRR is supported. + + @param[out] FixedMtrrSupported Return whether fixed MTRR is supported. + @param[out] VariableMtrrCount Return the max number of variable MTRRs. + + @retval TRUE MTRR is supported when either fixed MTRR is supported or max number + of variable MTRRs is not 0. + @retval FALSE MTRR is not supported when both fixed MTRR is not supported and max + number of variable MTRRs is 0. +**/ +BOOLEAN +MtrrLibIsMtrrSupported ( + OUT BOOLEAN *FixedMtrrSupported OPTIONAL, + OUT UINT32 *VariableMtrrCount OPTIONAL + ) +{ + CPUID_VERSION_INFO_EDX Edx; + MSR_IA32_MTRRCAP_REGISTER MtrrCap; + + // + // Check CPUID(1).EDX[12] for MTRR capability + // + AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32); + if (Edx.Bits.MTRR == 0) { + if (FixedMtrrSupported != NULL) { + *FixedMtrrSupported = FALSE; + } + + if (VariableMtrrCount != NULL) { + *VariableMtrrCount = 0; + } + + return FALSE; + } + + // + // Check the number of variable MTRRs and determine whether fixed MTRRs exist. + // If the count of variable MTRRs is zero and there are no fixed MTRRs, + // then return false + // + MtrrCap.Uint64 = AsmReadMsr64 (MSR_IA32_MTRRCAP); + ASSERT (MtrrCap.Bits.VCNT <= ARRAY_SIZE (((MTRR_VARIABLE_SETTINGS *)0)->Mtrr)); + if (FixedMtrrSupported != NULL) { + *FixedMtrrSupported = (BOOLEAN)(MtrrCap.Bits.FIX == 1); + } + + if (VariableMtrrCount != NULL) { + *VariableMtrrCount = MtrrCap.Bits.VCNT; + } + + if ((MtrrCap.Bits.VCNT == 0) && (MtrrCap.Bits.FIX == 0)) { + return FALSE; + } + + return TRUE; +} + /** Worker function returns the variable MTRR count for the CPU. @@ -2847,28 +2905,7 @@ IsMtrrSupported ( VOID ) { - CPUID_VERSION_INFO_EDX Edx; - MSR_IA32_MTRRCAP_REGISTER MtrrCap; - - // - // Check CPUID(1).EDX[12] for MTRR capability - // - AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32); - if (Edx.Bits.MTRR == 0) { - return FALSE; - } - - // - // Check number of variable MTRRs and fixed MTRRs existence. - // If number of variable MTRRs is zero, or fixed MTRRs do not - // exist, return false. - // - MtrrCap.Uint64 = AsmReadMsr64 (MSR_IA32_MTRRCAP); - if ((MtrrCap.Bits.VCNT == 0) || (MtrrCap.Bits.FIX == 0)) { - return FALSE; - } - - return TRUE; + return MtrrLibIsMtrrSupported (NULL, NULL); } /** -- 2.36.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#108557): https://edk2.groups.io/g/devel/message/108557 Mute This Topic: https://groups.io/mt/101331016/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-