From nobody Mon Sep 16 20:25:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+108557+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+108557+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1694579220; cv=none; d=zohomail.com; s=zohoarc; b=VRsNaYsEzsQdSQpAAq4eGcjwSF6JeSWU8gBiQOCrpJ63IwwlFFjaC0RbGvHKpWOAw2YRUAEvLJqQjnrib4nCMcdp2oUm/XqoV3qJBHX2oCY5U/MwLSS96kmc0v8k2RH2bUHzoJnYdxPXLuZmEWgi+aGI5U7kbeu0XO8iBL6Crfg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1694579220; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=Ci3jq+QF/o2OOWl7CnK+6hJT7xwTVE7HrcySk/38N58=; b=j+YfzRtzPlKlxhn4Ck//qBMEZNyjZpxZXvPyMnccKrLx0p1Nf25aJRnrEhepOgE6w44yBMk6QSEEMr5ETtdRU9JkwNz0rX1cvAjS9oPnSjNq6hrXOQ/ZtKiC52HFJKLCPbZvCxxAE8WUq3+UzPMlqVcwZTALFXCiPpQA2fv1O+I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+108557+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1694579220638669.7203257638829; Tue, 12 Sep 2023 21:27:00 -0700 (PDT) Return-Path: DKIM-Signature: a=rsa-sha256; bh=iaDmq94NmkowkAvu504e9Tr+F0Bi2omNOhtSUAxTDNs=; 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=bJVdle02A4v0ef57Mx3f29si59V2FmaSJRbJwNPthbWyAQeOYS5kJRMLgMoGcForTrCaLTNQ zqkgiQayEjJghBUg3PAIpWD+7LQq1SIAi51W1JIyZACi/3pO1iI5ric8doiUO0fQsa1nGfdwVjO aYbcNE7c+Sxkcu5307HRANuw= X-Received: by 127.0.0.2 with SMTP id sIX3YY1788612xl4SJPVvsii; 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: cpHa8kVLYAYvfd0uXDj4MsHcx1787277AA= Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1694579222382100001 Content-Type: text/plain; charset="utf-8" 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/Mtrr= Lib/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. =20 - 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 =20 **/ @@ -140,6 +140,64 @@ MtrrDebugPrintAllMtrrsWorker ( IN MTRR_SETTINGS *MtrrSetting ); =20 +/** + Return whether MTRR is supported. + + @param[out] FixedMtrrSupported Return whether fixed MTRR is supported. + @param[out] VariableMtrrCount Return the max number of variable MTRR= s. + + @retval TRUE MTRR is supported when either fixed MTRR is supported or m= ax number + of variable MTRRs is not 0. + @retval FALSE MTRR is not supported when both fixed MTRR is not supporte= d 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 =3D=3D 0) { + if (FixedMtrrSupported !=3D NULL) { + *FixedMtrrSupported =3D FALSE; + } + + if (VariableMtrrCount !=3D NULL) { + *VariableMtrrCount =3D 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 =3D AsmReadMsr64 (MSR_IA32_MTRRCAP); + ASSERT (MtrrCap.Bits.VCNT <=3D ARRAY_SIZE (((MTRR_VARIABLE_SETTINGS *)0)= ->Mtrr)); + if (FixedMtrrSupported !=3D NULL) { + *FixedMtrrSupported =3D (BOOLEAN)(MtrrCap.Bits.FIX =3D=3D 1); + } + + if (VariableMtrrCount !=3D NULL) { + *VariableMtrrCount =3D MtrrCap.Bits.VCNT; + } + + if ((MtrrCap.Bits.VCNT =3D=3D 0) && (MtrrCap.Bits.FIX =3D=3D 0)) { + return FALSE; + } + + return TRUE; +} + /** Worker function returns the variable MTRR count for the CPU. =20 @@ -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 =3D=3D 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 =3D AsmReadMsr64 (MSR_IA32_MTRRCAP); - if ((MtrrCap.Bits.VCNT =3D=3D 0) || (MtrrCap.Bits.FIX =3D=3D 0)) { - return FALSE; - } - - return TRUE; + return MtrrLibIsMtrrSupported (NULL, NULL); } =20 /** --=20 2.36.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- 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/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-