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 52D28D8024B for ; Fri, 15 Sep 2023 04:46:13 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=NgnZht7AWCroNHmBB8r3DyeymNr3dpVSMqcNcDdvvI0=; 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=1694753172; v=1; b=Gt+jLatVZCwUzIE7Ftc7cnCWtlSmQWx0a6FEBBOrKPTm60+VsBs0iNPHY12fLLD0JWEcR7tI v9gdOsq4M1XfuRE4tJLyawMFH0TIBpppc0ZMF8Qke2xfvX7SguEYMz23vJv6A6JYEVcAIHBg+1n T/+0b/RrEgeQBuirXWXlk3ZM= X-Received: by 127.0.0.2 with SMTP id CLI0YY7687511xZkJMRRCy8z; Thu, 14 Sep 2023 21:46:12 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web11.14121.1694753161478942260 for ; Thu, 14 Sep 2023 21:46:10 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10833"; a="465520001" X-IronPort-AV: E=Sophos;i="6.02,148,1688454000"; d="scan'208";a="465520001" X-Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Sep 2023 21:46:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10833"; a="738183134" X-IronPort-AV: E=Sophos;i="6.02,148,1688454000"; d="scan'208";a="738183134" X-Received: from fmbiosdev02.amr.corp.intel.com ([10.105.221.44]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Sep 2023 21:46:09 -0700 From: "Saloni Kasbekar" To: devel@edk2.groups.io Cc: Saloni Kasbekar , Sai Chaganty , Nate DeSimone , Rosen Chuang Subject: [edk2-devel] [PATCH v2 08/10] AlderlakeSiliconPkg/Fru: Add AdlCpu Fru Date: Thu, 14 Sep 2023 21:45:52 -0700 Message-Id: In-Reply-To: References: 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,saloni.kasbekar@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: lQ13Qh4C96br9KfvT4GZASEjx7686176AA= 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=Gt+jLatV; 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) Adds the following modules: - AdlCpu/CpuPcieRp - AdlCpu/Include - AdlCpu/IncludePrivate - AdlCpu/LibraryPrivate - AdlCpu/PeiReportCpuHob - AdlCpu DSCs Cc: Sai Chaganty Cc: Nate DeSimone Cc: Rosen Chuang Signed-off-by: Saloni Kasbekar --- .../Fru/AdlCpu/CommonLib.dsc | 9 + .../CpuPcieInfoFruLib.c | 87 ++++++++++ .../PeiDxeSmmCpuPcieInfoFruLib.inf | 39 +++++ .../AlderlakeSiliconPkg/Fru/AdlCpu/DxeLib.dsc | 8 + .../Fru/AdlCpu/Include/CpuGenInfo.h | 42 +++++ .../Include/Library/CpuPcieInfoFruLib.h | 45 +++++ .../Include/Register/SaRegsHostBridge.h | 64 +++++++ .../AdlCpu/IncludePrivate/CpuGenInfoFruLib.h | 44 +++++ .../AdlCpu/IncludePrivate/Register/IgdRegs.h | 34 ++++ .../BaseCpuInfoFruLib/BaseCpuInfoFruLib.c | 164 ++++++++++++++++++ .../BaseCpuInfoFruLib/BaseCpuInfoFruLib.inf | 29 ++++ .../PeiReportCpuHobLib/PeiReportCpuHobLib.c | 22 +++ .../PeiReportCpuHobLib/PeiReportCpuHobLib.inf | 26 +++ 13 files changed, 613 insertions(+) create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CommonLib.dsc create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/CpuPcieInfoFruLib.c create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/PeiDxeSmmCpuPcieInfoFruLib.inf create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/DxeLib.dsc create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/CpuGenInfo.h create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/Library/CpuPcieInfoFruLib.h create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/Register/SaRegsHostBridge.h create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/IncludePrivate/CpuGenInfoFruLib.h create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/IncludePrivate/Register/IgdRegs.h create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.c create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.inf create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/PeiReportCpuHob/Library/PeiReportCpuHobLib/PeiReportCpuHobLib.c create mode 100644 Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/PeiReportCpuHob/Library/PeiReportCpuHobLib/PeiReportCpuHobLib.inf diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CommonLib.dsc b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CommonLib.dsc new file mode 100644 index 0000000000..35a3cce916 --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CommonLib.dsc @@ -0,0 +1,9 @@ +## @file +# Component description file for the AlderLake CPU Common FRU libraries. +# +# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +CpuPcieInfoFruLib|$(PLATFORM_SI_PACKAGE)/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/PeiDxeSmmCpuPcieInfoFruLib.inf +CpuInfoFruLib|$(PLATFORM_SI_PACKAGE)/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.inf diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/CpuPcieInfoFruLib.c b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/CpuPcieInfoFruLib.c new file mode 100644 index 0000000000..277b73fe67 --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/CpuPcieInfoFruLib.c @@ -0,0 +1,87 @@ +/** @file + CPU PCIe information library. + + All function in this library is available for PEI, DXE, and SMM, + But do not support UEFI RUNTIME environment call. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#include +#include +#include +#include +#include +#include +#include +#include + +/** + Get Maximum CPU Pcie Root Port Number + + @retval Maximum CPU Pcie Root Port Number +**/ +UINT8 +GetMaxCpuPciePortNum ( + VOID + ) +{ + switch (GetCpuSku ()) { + case EnumCpuUlt: + return CPU_PCIE_ULT_MAX_ROOT_PORT; + case EnumCpuUlx: + return CPU_PCIE_ULX_MAX_ROOT_PORT; + default: + return CPU_PCIE_ULT_MAX_ROOT_PORT; + } +} + +/** + Get CPU Pcie Root Port Device and Function Number by Root Port physical Number + + @param[in] RpNumber Root port physical number. (0-based) + @param[out] RpDev Return corresponding root port device number. + @param[out] RpFun Return corresponding root port function number. + + @retval EFI_SUCCESS Root port device and function is retrieved + @retval EFI_INVALID_PARAMETER RpNumber is invalid +**/ +EFI_STATUS +EFIAPI +GetCpuPcieRpDevFun ( + IN UINTN RpNumber, + OUT UINTN *RpDev, + OUT UINTN *RpFun + ) +{ + if (RpNumber > GetMaxCpuPciePortNum ()) { + DEBUG ((DEBUG_ERROR, "GetCpuPcieRpDevFun invalid RpNumber %x", RpNumber)); + ASSERT (FALSE); + return EFI_INVALID_PARAMETER; + } + + switch (RpNumber) { + case 0: + *RpDev = 6; + *RpFun = 0; + break; + case 1: + *RpDev = 1; + *RpFun = 0; + break; + case 2: + if (GetCpuSku () == EnumCpuTrad) { + *RpDev = 1; + *RpFun = 1; + } else { + *RpDev = 6; + *RpFun = 2; + } + break; + default: + *RpDev = 6; + *RpFun = 0; + break; + } + return EFI_SUCCESS; +} diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/PeiDxeSmmCpuPcieInfoFruLib.inf b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/PeiDxeSmmCpuPcieInfoFruLib.inf new file mode 100644 index 0000000000..f850f1a5f1 --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/CpuPcieRp/Library/PeiDxeSmmCpuPcieInfoFruLib/PeiDxeSmmCpuPcieInfoFruLib.inf @@ -0,0 +1,39 @@ +## @file +# CPU PCIe information library for TigerLake PCH. +# +# All function in this library is available for PEI, DXE, and SMM, +# But do not support UEFI RUNTIME environment call. +# +# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + + +[Defines] +INF_VERSION = 0x00010017 +BASE_NAME = PeiDxeSmmCpuPcieInfoFruLib +FILE_GUID = 59CA5352-ED46-4449-BF1C-0D0074C4D5B1 +VERSION_STRING = 1.0 +MODULE_TYPE = BASE +LIBRARY_CLASS = CpuPcieInfoFruLib + + +[LibraryClasses] +IoLib +BaseLib +DebugLib +PrintLib +PciSegmentLib +PchPcrLib +PmcPrivateLib +PcdLib +ConfigBlockLib +CpuPlatformLib + +[Packages] +MdePkg/MdePkg.dec +AlderlakeSiliconPkg/SiPkg.dec + +[Sources] +CpuPcieInfoFruLib.c + diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/DxeLib.dsc b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/DxeLib.dsc new file mode 100644 index 0000000000..644230484e --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/DxeLib.dsc @@ -0,0 +1,8 @@ +# @file +# Component description file for the AlderLake CPU DXE FRU libraries. +# +# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## +DxeGraphicsPolicyLib|$(PLATFORM_SI_PACKAGE)/IpBlock/Graphics/LibraryPrivate/DxeGraphicsPolicyLib/DxeGraphicsPolicyLib.inf +DxeIgdOpRegionInitLib|$(PLATFORM_SI_PACKAGE)/IpBlock/Graphics/LibraryPrivate/DxeIgdOpRegionInitLib/DxeIgdOpRegionInitLib.inf diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/CpuGenInfo.h b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/CpuGenInfo.h new file mode 100644 index 0000000000..482316829d --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/CpuGenInfo.h @@ -0,0 +1,42 @@ +/** @file + Header file for Cpu Information + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#ifndef _CPU_GEN_INFO_H_ +#define _CPU_GEN_INFO_H_ + +#include + +// +// Processor Definitions +// +#define CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE 0x000906A0 + +/// +/// Enums for CPU Stepping IDs +/// +typedef enum { + + /// + /// AlderLake Mobile Steppings(ULT) + /// + EnumAdlJ0 = 0, + EnumAdlK0 = 2, + EnumAdlL0 = 3, + + /// + /// AlderLake Mobile Steppings(ULX) + /// + EnumAdlQ0 = 1, + EnumAdlR0 = 4, + EnumAdlS0 = 5, + + + /// + /// Max Stepping + /// + EnumCpuSteppingMax = CPUID_FULL_STEPPING +} CPU_STEPPING; +#endif diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/Library/CpuPcieInfoFruLib.h b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/Library/CpuPcieInfoFruLib.h new file mode 100644 index 0000000000..9dafa98631 --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/Library/CpuPcieInfoFruLib.h @@ -0,0 +1,45 @@ +/** @file + Header file for CpuPcieInfoFruLib. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#ifndef _CPU_PCIE_INFO_FRU_LIB_H_ +#define _CPU_PCIE_INFO_FRU_LIB_H_ + +#include + +#define CPU_PCIE_MAX_ROOT_PORTS 4 +#define CPU_PCIE_MAX_CONTROLLERS 3 + +#define CPU_PCIE_ULT_MAX_ROOT_PORT 3 +#define CPU_PCIE_ULX_MAX_ROOT_PORT 1 + +/** + Get CPU Maximum Pcie Root Port Number + + @retval PcieMaxRootPort Pch Maximum Pcie Root Port Number +**/ +UINT8 +GetMaxCpuPciePortNum ( + VOID + ); + +/** + Get CPU Pcie Root Port Device and Function Number by Root Port physical Number + + @param[in] RpNumber Root port physical number. (0-based) + @param[out] RpDev Return corresponding root port device number. + @param[out] RpFun Return corresponding root port function number. + + @retval EFI_SUCCESS Root port device and function is retrieved + @retval EFI_INVALID_PARAMETER RpNumber is invalid +**/ +EFI_STATUS +EFIAPI +GetCpuPcieRpDevFun ( + IN UINTN RpNumber, + OUT UINTN *RpDev, + OUT UINTN *RpFun + ); +#endif // _CPU_PCIE_INFO_FRU_LIB_H_ diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/Register/SaRegsHostBridge.h b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/Register/SaRegsHostBridge.h new file mode 100644 index 0000000000..be4bba3283 --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/Include/Register/SaRegsHostBridge.h @@ -0,0 +1,64 @@ +/** @file + Register names for Host Bridge block + Conventions: + - Prefixes: + - Definitions beginning with "R_" are registers + - Definitions beginning with "B_" are bits within registers + - Definitions beginning with "V_" are meaningful values of bits within the registers + - Definitions beginning with "S_" are register sizes + - Definitions beginning with "N_" are the bit position + - In general, SA registers are denoted by "_SA_" in register names + - Registers / bits that are different between SA generations are denoted by + "_SA_[generation_name]_" in register/bit names. e.g., "_SA_HSW_" + - Registers / bits that are different between SKUs are denoted by "_[SKU_name]" + at the end of the register/bit names + - Registers / bits of new devices introduced in a SA generation will be just named + as "_SA_" without [generation_name] inserted. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#ifndef _SA_REGS_HOST_BRIDGE_H_ +#define _SA_REGS_HOST_BRIDGE_H_ + +#define SA_SEG_NUM 0x00 +// +// DEVICE 0 (Memory Controller Hub) +// +#define SA_MC_BUS 0x00 +#define SA_MC_DEV 0x00 +#define SA_MC_FUN 0x00 +#define R_SA_MC_DEVICE_ID 0x02 + +// +// AlderLake CPU Mobile SA Device IDs B0:D0:F0 +// +#define V_SA_DEVICE_ID_MB_ULT_1 0x4641 ///< AlderLake P (6+8+GT) SA DID +#define V_SA_DEVICE_ID_MB_ULT_2 0x4649 ///< AlderLake P (6+4(f)+GT) SA DID +#define V_SA_DEVICE_ID_MB_ULT_3 0x4621 ///< AlderLake P (4(f)+8+GT) SA DID +#define V_SA_DEVICE_ID_MB_ULT_4 0x4609 ///< AlderLake P (2(f)+4(f)+GT) SA DID +#define V_SA_DEVICE_ID_MB_ULT_5 0x4601 ///< AlderLake P (2+8+GT) SA DID +#define V_SA_DEVICE_ID_MB_ULT_6 0x4661 ///< AlderLake P (6+8+2) SA DID +#define V_SA_DEVICE_ID_MB_ULT_7 0x4629 ///< AlderLake P (4+4+1) SA DID +#define V_SA_DEVICE_ID_MB_ULT_8 0x4619 ///< AlderLake P (1+4+GT) SA DID +#define V_SA_DEVICE_ID_MB_ULT_9 0x4659 ///< AlderLake P (1+8+GT) SA DID +#define V_SA_DEVICE_ID_MB_ULT_10 0x4645 ///< AlderLake P (6+6+GT) SA DID +/// +/// Description: +/// The SMRAMC register controls how accesses to Compatible SMRAM spaces are treated. The Open, Close and Lock bits function only when G_SMRAME bit is set to 1. Also, the Open bit must be reset before the Lock bit is set. +/// +#define R_SA_SMRAMC (0x88) + +/// +/// Description: +/// This register contains the Top of low memory address. +/// +#define R_SA_TOLUD (0xbc) +/// +/// Description of TOLUD (20:31) +/// This register contains bits 31 to 20 of an address one byte above the maximum DRAM memory below 4G that is usable by the operating system. Address bits 31 down to 20 programmed to 01h implies a minimum memory size of 1MB. Configuration software must set this value to the smaller of the following 2 choices: maximum amount memory in the system minus ME stolen memory plus one byte or the minimum address allocated for PCI memory. Address bits 19:0 are assumed to be 0_0000h for the purposes of address comparison. The Host interface positively decodes an address towards DRAM if the incoming address is less than the value programmed in this register. +/// The Top of Low Usable DRAM is the lowest address above both Graphics Stolen memory and Tseg. BIOS determines the base of Graphics Stolen Memory by subtracting the Graphics Stolen Memory Size from TOLUD and further decrements by Tseg size to determine base of Tseg. All the Bits in this register are locked in LT mode. +/// This register must be 1MB aligned when reclaim is enabled. +/// +#define B_SA_TOLUD_TOLUD_MASK (0xfff00000) +#endif diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/IncludePrivate/CpuGenInfoFruLib.h b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/IncludePrivate/CpuGenInfoFruLib.h new file mode 100644 index 0000000000..5ad7bf4982 --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/IncludePrivate/CpuGenInfoFruLib.h @@ -0,0 +1,44 @@ + /** @file + This file contains Cpu Information for specific generation. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#ifndef _CPU_GEN_INFO_FRU_LIB_H_ +#define _CPU_GEN_INFO_FRU_LIB_H_ +#include +#include +#include + +/// +/// Used to identify the CPU used for programming with the VR override table +/// +typedef enum { + EnumUnknownCpuId = 0, + EnumMinCpuId = 1, + + /// + /// ADL P + /// + EnumAdlP15Watt282fCpuId = 0x30, + EnumAdlP28Watt482fCpuId = 0x31, + EnumAdlP28Watt682fCpuId = 0x32, + EnumAdlP45Watt682fCpuId = 0x35, + EnumAdlP15Watt142fCpuId = 0x36, + EnumAdlP15Watt242fCpuId = 0x37, + EnumAdlP45Watt482fCpuId = 0x38, + EnumAdlP45Watt442fCpuId = 0x39, + EnumAdlP28Watt442fCpuId = 0x3A, + EnumAdlP28Watt282fCpuId = 0x3B, + EnumAdlP28Watt242fCpuId = 0x3C, + EnumAdlP28Watt142fCpuId = 0x3D, + EnumAdlP45Watt242fCpuId = 0x3E, + EnumAdlP28Watt182fCpuId = 0x3F, + EnumAdlP28Watt662fCpuId = 0x40, + EnumAdlP28Watt642fCpuId = 0x41, + EnumAdlP45Watt642fCpuId = 0x42, + EnumAdlPMaxCpuId = EnumAdlP45Watt642fCpuId, + +} CPU_IDENTIFIER; + +#endif // _CPU_GEN_INFO_FRU_LIB_H_ diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/IncludePrivate/Register/IgdRegs.h b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/IncludePrivate/Register/IgdRegs.h new file mode 100644 index 0000000000..289b293b32 --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/IncludePrivate/Register/IgdRegs.h @@ -0,0 +1,34 @@ +/** @file + Register names for IGD block + Conventions: + - Prefixes: + - Definitions beginning with "R_" are registers + - Definitions beginning with "B_" are bits within registers + - Definitions beginning with "V_" are meaningful values of bits within the registers + - Definitions beginning with "S_" are register sizes + - Definitions beginning with "N_" are the bit position + - In general, SA registers are denoted by "_SA_" in register names + - Registers / bits that are different between SA generations are denoted by + "_SA_[generation_name]_" in register/bit names. e.g., "_SA_HSW_" + - Registers / bits that are different between SKUs are denoted by "_[SKU_name]" + at the end of the register/bit names + - Registers / bits of new devices introduced in a SA generation will be just named + as "_SA_" without [generation_name] inserted. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#ifndef _IGD_REGS_H_ +#define _IGD_REGS_H_ + +/// +/// Device 2 Register Equates +/// +// +// The following equates must be reviewed and revised when the specification is ready. +// +#define IGD_BUS_NUM 0x00 +#define IGD_DEV_NUM 0x02 +#define IGD_FUN_NUM 0x00 + +#endif diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.c b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.c new file mode 100644 index 0000000000..d93048eb6e --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.c @@ -0,0 +1,164 @@ +/** @file + This file contains the Cpu Information for specific generation. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +STATIC CONST CHAR8 mAdlCpuFamilyString[] = "AlderLake"; +typedef struct { + UINT32 CPUID; + UINT8 CpuSku; + CHAR8 *String; +} CPU_REV; + +typedef struct { + CPU_IDENTIFIER CpuIdentifier; + UINT8 SupportedCores; + UINT8 SupportedAtomCores; +} CPU_CORE_COUNT; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST CPU_REV mProcessorRevisionTable[] = { + {CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE + EnumAdlJ0, EnumCpuUlt, "J0"}, + {CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE + EnumAdlK0, EnumCpuUlt, "K0"}, + {CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE + EnumAdlL0, EnumCpuUlt, "L0"}, + {CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE + EnumAdlQ0, EnumCpuUlt, "Q0"}, + {CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE + EnumAdlR0, EnumCpuUlt, "R0"}, + {CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE + EnumAdlQ0, EnumCpuUlx, "Q0"}, + {CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE + EnumAdlR0, EnumCpuUlx, "R0"}, + {CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE + EnumAdlS0, EnumCpuUlx, "S0"} +}; + +/// +/// PowerLimits Override table for all SKUs. Non-cTDP parts would have '0' data for TDP level information. +/// +GLOBAL_REMOVE_IF_UNREFERENCED PPM_OVERRIDE_TABLE mPowerLimitsOverrideTable[] = { +/// +/// CpuIdentifier TDP MSR PL1 MSR PL2 TdpUp TdpUp TdpNominal TdpNominal TdpDown TdpDown MSR MSR Disablefvm +/// PL1 PL2 PL1 PL2 PL1 PL2 PL1 PL2 PL4 PL4 + {EnumAdlP15Watt282fCpuId, 1500, 1500, 5500, 0, 5500, 0, 5500, 0, 5500, 12300, 0}, /// 15W 282 ADL-P + {EnumAdlP15Watt142fCpuId, 1500, 1500, 5500, 0, 5500, 0, 5500, 0, 5500, 12300, 0}, /// 15W 142 ADL-P + {EnumAdlP15Watt242fCpuId, 1500, 1500, 5500, 0, 5500, 0, 5500, 0, 5500, 12300, 0}, /// 15W 242 ADL-P + {EnumAdlP28Watt282fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 9000, 0}, /// 28W 282 ADL-P + {EnumAdlP28Watt482fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 9000, 0}, /// 28W 482 ADL-P + {EnumAdlP28Watt682fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 14000, 0}, /// 26W 682 ADL-P + {EnumAdlP28Watt142fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 9000, 0}, /// 28W 142 ADL-P + {EnumAdlP28Watt242fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 9000, 0}, /// 28W 242 ADL-P + {EnumAdlP28Watt442fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 9000, 0}, /// 28W 442 ADL-P + {EnumAdlP28Watt182fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 9000, 0}, /// 28W 182 ADL-P + {EnumAdlP28Watt642fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 14000, 0}, /// 26W 682 ADL-P + {EnumAdlP28Watt662fCpuId, 2800, 2800, 6400, 0, 6400, 0, 6400, 0, 6400, 14000, 0}, /// 26W 682 ADL-P + {EnumAdlP45Watt682fCpuId, 4500, 4500, 11500, 0, 11500, 0, 11500, 0, 11500, 21500, 0}, /// 45W 682 ADL-P + {EnumAdlP45Watt242fCpuId, 4500, 4500, 9500, 0, 9500, 0, 9500, 0, 9500, 12500, 0}, /// 45W 242 ADL-P + {EnumAdlP45Watt482fCpuId, 4500, 4500, 9500, 0, 9500, 0, 9500, 0, 9500, 12500, 0}, /// 45W 482 ADL-P + {EnumAdlP45Watt442fCpuId, 4500, 4500, 9500, 0, 9500, 0, 9500, 0, 9500, 12500, 0}, /// 45W 442 ADL-P + {EnumAdlP45Watt642fCpuId, 4500, 4500, 11500, 0, 11500, 0, 11500, 0, 11500, 21500, 0}, /// 45W 642 ADL-P +}; + +GLOBAL_REMOVE_IF_UNREFERENCED CONST CPU_CORE_COUNT mCpuCoreCountMappingTable[] = { + { EnumAdlP15Watt282fCpuId, 2, 8}, + { EnumAdlP28Watt282fCpuId, 2, 8}, + { EnumAdlP28Watt482fCpuId, 4, 8}, + { EnumAdlP28Watt682fCpuId, 6, 8}, + { EnumAdlP45Watt682fCpuId, 6, 8}, + { EnumAdlP45Watt482fCpuId, 4, 8}, + { EnumAdlP45Watt442fCpuId, 4, 4}, + { EnumAdlP28Watt442fCpuId, 4, 4}, + { EnumAdlP15Watt142fCpuId, 1, 4}, + { EnumAdlP28Watt142fCpuId, 1, 4}, + { EnumAdlP15Watt242fCpuId, 2, 4}, + { EnumAdlP28Watt242fCpuId, 2, 4}, + { EnumAdlP45Watt242fCpuId, 2, 4}, + { EnumAdlP45Watt642fCpuId, 6, 4}, + { EnumAdlP28Watt182fCpuId, 1, 8}, + { EnumAdlP28Watt642fCpuId, 6, 4}, + { EnumAdlP28Watt662fCpuId, 6, 6}, +}; + +/** + Return CPU Sku + + @param[in] UINT32 CpuFamilyModel + @param[in] UINT16 CpuDid + + @retval UINT8 CPU Sku +**/ +UINT8 +GetCpuSkuInfo ( + IN UINT32 CpuFamilyModel, + IN UINT16 CpuDid + ) +{ + UINT8 CpuType; + BOOLEAN SkuFound; + + SkuFound = TRUE; + CpuType = EnumCpuUnknown; + + switch (CpuFamilyModel) { + case CPUID_FULL_FAMILY_MODEL_ALDERLAKE_MOBILE: + switch (CpuDid) { + case V_SA_DEVICE_ID_MB_ULT_1: // AlderLake P (6+8+GT) + case V_SA_DEVICE_ID_MB_ULT_2: // AlderLake P (6+4(f)+GT) + case V_SA_DEVICE_ID_MB_ULT_3: // AlderLake P (4(f)+8+GT) + case V_SA_DEVICE_ID_MB_ULT_4: // AlderLake P (2(f)+4(f)+GT) + case V_SA_DEVICE_ID_MB_ULT_5: // AlderLake P (2+8+GT) + case V_SA_DEVICE_ID_MB_ULT_6: // AlderLake P (2+4(f)+GT) + case V_SA_DEVICE_ID_MB_ULT_7: // AlderLake P (4+4(f)+GT) + case V_SA_DEVICE_ID_MB_ULT_8: // AlderLake P (1+4+GT) SA DID + case V_SA_DEVICE_ID_MB_ULT_9: // AlderLake P (1+8+GT) SA DID + case V_SA_DEVICE_ID_MB_ULT_10: // AlderLake P (6+6+GT) SA DID + CpuType = EnumCpuUlt; + break; + default: + SkuFound = FALSE; + break; + } + break; + default: + SkuFound = FALSE; + break; + } + + if (!SkuFound) { + DEBUG ((DEBUG_ERROR, "Unsupported CPU SKU, Device ID: 0x%02X, CPUID: 0x%08X!\n", CpuDid, CpuFamilyModel)); + ASSERT (FALSE); + } + + return CpuType; +} + + +/** + This function returns the supported Physical Address Size + + @retval returns the supported Physical Address Size. +**/ +UINT8 +GetMaxPhysicalAddressSizeFru ( + VOID + ) +{ + // + // Even though CPUID Leaf CPUID_VIR_PHY_ADDRESS_SIZE (0x80000008) MAX_PA will report 46. + // For ADL BIOS will return Memory expansion 39 bit (0 - 38) + MKTME (Bits 39-41 must be zero - 3 bit hole in the middle) 42-45 bit is MKTME Keys. + // + return 39; +} + + diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.inf b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.inf new file mode 100644 index 0000000000..22bcbdf43c --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/LibraryPrivate/BaseCpuInfoFruLib/BaseCpuInfoFruLib.inf @@ -0,0 +1,29 @@ +## @file +# This file contains the Cpu Information for specific generation. +# +# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + + +[Defines] +INF_VERSION = 0x00010017 +BASE_NAME = BaseCpuInfoFruLib +FILE_GUID = 72E44627-C719-4B2D-8C5D-963E167E5AAC +VERSION_STRING = 1.0 +MODULE_TYPE = BASE +LIBRARY_CLASS = CpuInfoFruLib + +[LibraryClasses] +BaseLib +DebugLib +PchInfoLib + +[Packages] +MdePkg/MdePkg.dec +UefiCpuPkg/UefiCpuPkg.dec +AlderlakeSiliconPkg/SiPkg.dec + +[Sources] +BaseCpuInfoFruLib.c + diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/PeiReportCpuHob/Library/PeiReportCpuHobLib/PeiReportCpuHobLib.c b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/PeiReportCpuHob/Library/PeiReportCpuHobLib/PeiReportCpuHobLib.c new file mode 100644 index 0000000000..7ea605a05b --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/PeiReportCpuHob/Library/PeiReportCpuHobLib/PeiReportCpuHobLib.c @@ -0,0 +1,22 @@ +/** @file + + Source code file for Report CPU HOB library. + + Copyright (c) 2022, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include + +VOID +ReportCpuHob ( + VOID + ) +{ + /// + /// Create a CPU hand-off information + /// + BuildCpuHob (GetMaxPhysicalAddressSize (), 16); +} diff --git a/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/PeiReportCpuHob/Library/PeiReportCpuHobLib/PeiReportCpuHobLib.inf b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/PeiReportCpuHob/Library/PeiReportCpuHobLib/PeiReportCpuHobLib.inf new file mode 100644 index 0000000000..0ba4744eea --- /dev/null +++ b/Silicon/Intel/AlderlakeSiliconPkg/Fru/AdlCpu/PeiReportCpuHob/Library/PeiReportCpuHobLib/PeiReportCpuHobLib.inf @@ -0,0 +1,26 @@ +### @file +# Component information file for the Report CPU HOB library. +# +# Copyright (c) 2022, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 0x00010017 + BASE_NAME = PeiReportCpuHobLib + FILE_GUID = F19AA754-CE24-448D-B755-1F939B00C23D + VERSION_STRING = 1.0 + MODULE_TYPE = PEIM + LIBRARY_CLASS = ReportCpuHobLib + +[LibraryClasses] + BaseLib + HobLib + CpuPlatformLib + +[Packages] + MdePkg/MdePkg.dec + AlderlakeSiliconPkg/SiPkg.dec + +[Sources] + PeiReportCpuHobLib.c -- 2.36.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#108684): https://edk2.groups.io/g/devel/message/108684 Mute This Topic: https://groups.io/mt/101373952/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-