From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web10.1740.1682489774480026272 for ; Tue, 25 Apr 2023 23:16:20 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=YXeH+32V; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: zhiguang.liu@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1682489780; x=1714025780; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=8dWjEsx1hIxXgtlDFGbmLMRoWINBTO/T2od3HkxGrso=; b=YXeH+32VWIEaFaSEdo+lHqL+9cthBicQJutLg5qXl8Ag7VG6WCJ4Zr9T TqzoKWGcX7p9t0NzHGn50D6pJPHHer5HWcsjuxdP9h0xpSB4Z8GEDQuGn VEl7WOzX47sgxfHb3Hulo8uj/0chSwFikpWAbx8FYTC3TVGthzgpZC4Yv gFwd2YMksxsluJTfaupsKu/AoPkf1Bh/g/VukMQ4LRkEAUofIhz0w8hVI OhzxPV6OKfP89gRwDpvWHc3sgUW7g+xFVlNWjF8u9Xm6pPr8V+1cXzG40 isokjnlVyUGPGfZxQH91/CVh9arHgMoqrTOwTz8ju1ggG9dwbnUIZcM3g g==; X-IronPort-AV: E=McAfee;i="6600,9927,10691"; a="331235220" X-IronPort-AV: E=Sophos;i="5.99,227,1677571200"; d="scan'208";a="331235220" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Apr 2023 23:16:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10691"; a="644125296" X-IronPort-AV: E=Sophos;i="5.99,227,1677571200"; d="scan'208";a="644125296" Received: from shwdesfp01.ccr.corp.intel.com ([10.239.158.151]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Apr 2023 23:16:18 -0700 From: "Zhiguang Liu" To: devel@edk2.groups.io Cc: Zhiguang Liu , Nate DeSimone , Ray Ni Subject: [PATCH v2 5/5] SimicsX58SktPkg: Remove unused Smm related modules Date: Wed, 26 Apr 2023 14:15:49 +0800 Message-Id: <20230426061549.1254-6-zhiguang.liu@intel.com> X-Mailer: git-send-email 2.31.1.windows.1 In-Reply-To: <20230426061549.1254-1-zhiguang.liu@intel.com> References: <20230426061549.1254-1-zhiguang.liu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit In last two commit, I replace the two SMM related modules, and now no platform will use these two moduels. Remove them Cc: Nate DeSimone Cc: Ray Ni Reviewed-by: Ray Ni Signed-off-by: Zhiguang Liu --- .../Smm/Access/SmmAccess2Dxe.c | 148 -------- .../Smm/Access/SmmAccess2Dxe.inf | 54 --- .../SimicsX58SktPkg/Smm/Access/SmmAccessPei.c | 338 ------------------ .../Smm/Access/SmmAccessPei.inf | 62 ---- .../Smm/Access/SmramInternal.c | 200 ----------- .../Smm/Access/SmramInternal.h | 82 ----- 6 files changed, 884 deletions(-) delete mode 100644 Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccess2Dxe.c delete mode 100644 Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccess2Dxe.inf delete mode 100644 Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccessPei.c delete mode 100644 Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccessPei.inf delete mode 100644 Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmramInternal.c delete mode 100644 Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmramInternal.h diff --git a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccess2Dxe.c b/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccess2Dxe.c deleted file mode 100644 index 5d3b2c14aa..0000000000 --- a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccess2Dxe.c +++ /dev/null @@ -1,148 +0,0 @@ -/** @file - A DXE_DRIVER providing SMRAM access by producing EFI_SMM_ACCESS2_PROTOCOL. - - X58 TSEG is expected to have been verified and set up by the SmmAccessPei - driver. - - Copyright (C) 2013, 2015, Red Hat, Inc.
- Copyright (c) 2009 - 2019, Intel Corporation. All rights reserved.
- - SPDX-License-Identifier: BSD-2-Clause-Patent -**/ - -#include -#include -#include -#include - -#include "SmramInternal.h" - -/** - Opens the SMRAM area to be accessible by a boot-service driver. - - This function "opens" SMRAM so that it is visible while not inside of SMM. - The function should return EFI_UNSUPPORTED if the hardware does not support - hiding of SMRAM. The function should return EFI_DEVICE_ERROR if the SMRAM - configuration is locked. - - @param[in] This The EFI_SMM_ACCESS2_PROTOCOL instance. - - @retval EFI_SUCCESS The operation was successful. - @retval EFI_UNSUPPORTED The system does not support opening and closing of - SMRAM. - @retval EFI_DEVICE_ERROR SMRAM cannot be opened, perhaps because it is - locked. -**/ -STATIC -EFI_STATUS -EFIAPI -SmmAccess2DxeOpen ( - IN EFI_SMM_ACCESS2_PROTOCOL *This - ) -{ - return SmramAccessOpen (&This->LockState, &This->OpenState); -} - -/** - Inhibits access to the SMRAM. - - This function "closes" SMRAM so that it is not visible while outside of SMM. - The function should return EFI_UNSUPPORTED if the hardware does not support - hiding of SMRAM. - - @param[in] This The EFI_SMM_ACCESS2_PROTOCOL instance. - - @retval EFI_SUCCESS The operation was successful. - @retval EFI_UNSUPPORTED The system does not support opening and closing of - SMRAM. - @retval EFI_DEVICE_ERROR SMRAM cannot be closed. -**/ -STATIC -EFI_STATUS -EFIAPI -SmmAccess2DxeClose ( - IN EFI_SMM_ACCESS2_PROTOCOL *This - ) -{ - return SmramAccessClose (&This->LockState, &This->OpenState); -} - -/** - Inhibits access to the SMRAM. - - This function prohibits access to the SMRAM region. This function is usually - implemented such that it is a write-once operation. - - @param[in] This The EFI_SMM_ACCESS2_PROTOCOL instance. - - @retval EFI_SUCCESS The device was successfully locked. - @retval EFI_UNSUPPORTED The system does not support locking of SMRAM. -**/ -STATIC -EFI_STATUS -EFIAPI -SmmAccess2DxeLock ( - IN EFI_SMM_ACCESS2_PROTOCOL *This - ) -{ - return SmramAccessLock (&This->LockState, &This->OpenState); -} - -/** - Queries the memory controller for the possible regions that will support - SMRAM. - - @param[in] This The EFI_SMM_ACCESS2_PROTOCOL instance. - @param[in,out] SmramMapSize A pointer to the size, in bytes, of the - SmramMemoryMap buffer. - @param[in,out] SmramMap A pointer to the buffer in which firmware - places the current memory map. - - @retval EFI_SUCCESS The chipset supported the given resource. - @retval EFI_BUFFER_TOO_SMALL The SmramMap parameter was too small. The - current buffer size needed to hold the memory - map is returned in SmramMapSize. -**/ -STATIC -EFI_STATUS -EFIAPI -SmmAccess2DxeGetCapabilities ( - IN CONST EFI_SMM_ACCESS2_PROTOCOL *This, - IN OUT UINTN *SmramMapSize, - IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap - ) -{ - return SmramAccessGetCapabilities (This->LockState, This->OpenState, - SmramMapSize, SmramMap); -} - -// -// LockState and OpenState will be filled in by the entry point. -// -STATIC EFI_SMM_ACCESS2_PROTOCOL mAccess2 = { - &SmmAccess2DxeOpen, - &SmmAccess2DxeClose, - &SmmAccess2DxeLock, - &SmmAccess2DxeGetCapabilities -}; - -// -// Entry point of this driver. -// -EFI_STATUS -EFIAPI -SmmAccess2DxeEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - // - // This module should only be included if SMRAM support is required. - // - ASSERT (FeaturePcdGet (PcdSmmSmramRequire)); - - GetStates (&mAccess2.LockState, &mAccess2.OpenState); - return gBS->InstallMultipleProtocolInterfaces (&ImageHandle, - &gEfiSmmAccess2ProtocolGuid, &mAccess2, - NULL); -} diff --git a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccess2Dxe.inf b/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccess2Dxe.inf deleted file mode 100644 index eb8c8f93dd..0000000000 --- a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccess2Dxe.inf +++ /dev/null @@ -1,54 +0,0 @@ -## @file -# A DXE_DRIVER providing SMRAM access by producing EFI_SMM_ACCESS2_PROTOCOL. -# -# X58 TSEG is expected to have been verified and set up by the SmmAccessPei -# driver. -# -# Copyright (C) 2013, 2015, Red Hat, Inc. -# Copyright (C) 2019, Intel Corporation. All rights reserved.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = SmmAccess2Dxe - FILE_GUID = AC95AD3D-4366-44BF-9A62-E4B29D7A2206 - MODULE_TYPE = DXE_DRIVER - VERSION_STRING = 1.0 - PI_SPECIFICATION_VERSION = 0x00010400 - ENTRY_POINT = SmmAccess2DxeEntryPoint - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 -# - -[Sources] - SmmAccess2Dxe.c - SmramInternal.c - SmramInternal.h - -[Packages] - MdeModulePkg/MdeModulePkg.dec - MdePkg/MdePkg.dec - SimicsX58SktPkg/SktPkg.dec - SimicsIch10Pkg/Ich10Pkg.dec - -[LibraryClasses] - DebugLib - PcdLib - PciLib - UefiBootServicesTableLib - UefiDriverEntryPoint - -[Protocols] - gEfiSmmAccess2ProtocolGuid ## PRODUCES - -[FeaturePcd] - gSimicsX58PkgTokenSpaceGuid.PcdSmmSmramRequire - -[Depex] - TRUE diff --git a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccessPei.c b/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccessPei.c deleted file mode 100644 index ff9f9d8577..0000000000 --- a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccessPei.c +++ /dev/null @@ -1,338 +0,0 @@ -/** @file - A PEIM with the following responsibilities: - - - verify & configure the X58 TSEG in the entry point, - - provide SMRAM access by producing PEI_SMM_ACCESS_PPI, - - set aside the SMM_S3_RESUME_STATE object at the bottom of TSEG, and expose - it via the gEfiAcpiVariableGuid GUID HOB. - - This PEIM runs from RAM, so we can write to variables with static storage - duration. - - Copyright (C) 2013, 2015, Red Hat, Inc.
- Copyright (c) 2010 - 2023, Intel Corporation. All rights reserved.
- - SPDX-License-Identifier: BSD-2-Clause-Patent -**/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "SmramInternal.h" - -// -// PEI_SMM_ACCESS_PPI implementation. -// - -/** - Opens the SMRAM area to be accessible by a PEIM driver. - - This function "opens" SMRAM so that it is visible while not inside of SMM. - The function should return EFI_UNSUPPORTED if the hardware does not support - hiding of SMRAM. The function should return EFI_DEVICE_ERROR if the SMRAM - configuration is locked. - - @param PeiServices General purpose services available to every - PEIM. - @param This The pointer to the SMM Access Interface. - @param DescriptorIndex The region of SMRAM to Open. - - @retval EFI_SUCCESS The region was successfully opened. - @retval EFI_DEVICE_ERROR The region could not be opened because locked - by chipset. - @retval EFI_INVALID_PARAMETER The descriptor index was out of bounds. - -**/ -STATIC -EFI_STATUS -EFIAPI -SmmAccessPeiOpen ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_SMM_ACCESS_PPI *This, - IN UINTN DescriptorIndex - ) -{ - if (DescriptorIndex >= DescIdxCount) { - return EFI_INVALID_PARAMETER; - } - - // - // According to current practice, DescriptorIndex is not considered at all, - // beyond validating it. - // - return SmramAccessOpen (&This->LockState, &This->OpenState); -} - -/** - Inhibits access to the SMRAM. - - This function "closes" SMRAM so that it is not visible while outside of SMM. - The function should return EFI_UNSUPPORTED if the hardware does not support - hiding of SMRAM. - - @param PeiServices General purpose services available to every - PEIM. - @param This The pointer to the SMM Access Interface. - @param DescriptorIndex The region of SMRAM to Close. - - @retval EFI_SUCCESS The region was successfully closed. - @retval EFI_DEVICE_ERROR The region could not be closed because - locked by chipset. - @retval EFI_INVALID_PARAMETER The descriptor index was out of bounds. - -**/ -STATIC -EFI_STATUS -EFIAPI -SmmAccessPeiClose ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_SMM_ACCESS_PPI *This, - IN UINTN DescriptorIndex - ) -{ - if (DescriptorIndex >= DescIdxCount) { - return EFI_INVALID_PARAMETER; - } - - // - // According to current practice, DescriptorIndex is not considered at all, - // beyond validating it. - // - return SmramAccessClose (&This->LockState, &This->OpenState); -} - -/** - Inhibits access to the SMRAM. - - This function prohibits access to the SMRAM region. This function is usually - implemented such that it is a write-once operation. - - @param PeiServices General purpose services available to every - PEIM. - @param This The pointer to the SMM Access Interface. - @param DescriptorIndex The region of SMRAM to Close. - - @retval EFI_SUCCESS The region was successfully locked. - @retval EFI_DEVICE_ERROR The region could not be locked because at - least one range is still open. - @retval EFI_INVALID_PARAMETER The descriptor index was out of bounds. - -**/ -STATIC -EFI_STATUS -EFIAPI -SmmAccessPeiLock ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_SMM_ACCESS_PPI *This, - IN UINTN DescriptorIndex - ) -{ - if (DescriptorIndex >= DescIdxCount) { - return EFI_INVALID_PARAMETER; - } - - // - // According to current practice, DescriptorIndex is not considered at all, - // beyond validating it. - // - return SmramAccessLock (&This->LockState, &This->OpenState); -} - -/** - Queries the memory controller for the possible regions that will support - SMRAM. - - @param PeiServices General purpose services available to every - PEIM. - @param This The pointer to the SmmAccessPpi Interface. - @param SmramMapSize The pointer to the variable containing size of - the buffer to contain the description - information. - @param SmramMap The buffer containing the data describing the - Smram region descriptors. - - @retval EFI_BUFFER_TOO_SMALL The user did not provide a sufficient buffer. - @retval EFI_SUCCESS The user provided a sufficiently-sized buffer. - -**/ -STATIC -EFI_STATUS -EFIAPI -SmmAccessPeiGetCapabilities ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_SMM_ACCESS_PPI *This, - IN OUT UINTN *SmramMapSize, - IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap - ) -{ - return SmramAccessGetCapabilities (This->LockState, This->OpenState, SmramMapSize, SmramMap); -} - -// -// LockState and OpenState will be filled in by the entry point. -// -STATIC PEI_SMM_ACCESS_PPI mAccess = { - &SmmAccessPeiOpen, - &SmmAccessPeiClose, - &SmmAccessPeiLock, - &SmmAccessPeiGetCapabilities -}; - - -STATIC EFI_PEI_PPI_DESCRIPTOR mPpiList[] = { - { - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, - &gPeiSmmAccessPpiGuid, &mAccess - } -}; - - -// -// Utility functions. -// -STATIC -UINT8 -CmosRead8 ( - IN UINT8 Index - ) -{ - IoWrite8 (0x70, Index); - return IoRead8 (0x71); -} - -STATIC -UINT32 -GetSystemMemorySizeBelow4gb ( - VOID - ) -{ - UINT32 Cmos0x34; - UINT32 Cmos0x35; - - Cmos0x34 = CmosRead8 (0x34); - Cmos0x35 = CmosRead8 (0x35); - - return ((Cmos0x35 << 8 | Cmos0x34) << 16) + SIZE_16MB; -} - - -// -// Entry point of this driver. -// -EFI_STATUS -EFIAPI -SmmAccessPeiEntryPoint ( - IN EFI_PEI_FILE_HANDLE FileHandle, - IN CONST EFI_PEI_SERVICES **PeiServices - ) -{ - UINT16 HostBridgeDevId; - UINT32 EsmramcVal; - UINT32 TopOfLowRam, TopOfLowRamMb; - EFI_STATUS Status; - UINTN SmramMapSize; - EFI_SMRAM_DESCRIPTOR SmramMap[DescIdxCount]; - - // - // This module should only be included if SMRAM support is required. - // - ASSERT (FeaturePcdGet (PcdSmmSmramRequire)); - - // - // Verify if we're running on a X58 machine type. - // - HostBridgeDevId = PciRead16 (SIMICS_HOSTBRIDGE_DID); - if (HostBridgeDevId != INTEL_ICH10_DEVICE_ID) { - DEBUG ((EFI_D_ERROR, "%a: no SMRAM with host bridge DID=0x%04x; only " - "DID=0x%04x (X58) is supported\n", __FUNCTION__, HostBridgeDevId, - INTEL_ICH10_DEVICE_ID)); - goto WrongConfig; - } - - // - // Confirm if Simics supports SMRAM. - // - // With no support for it, the ESMRAMC (Extended System Management RAM - // Control) register reads as zero. If there is support, the cache-enable - // bits are hard-coded as 1 by Simics. - // - - TopOfLowRam = GetSystemMemorySizeBelow4gb (); - ASSERT ((TopOfLowRam & (SIZE_1MB - 1)) == 0); - TopOfLowRamMb = TopOfLowRam >> 20; - DEBUG((EFI_D_INFO, "TopOfLowRam =0x%x; TopOfLowRamMb =0x%x \n", TopOfLowRam, TopOfLowRamMb)); - - - // - // Set Top of Low Usable DRAM. - // - PciWrite32 (DRAMC_REGISTER_X58(MCH_TOLUD), TopOfLowRam); - DEBUG((EFI_D_INFO, "MCH_TOLUD =0x%x; \n", PciRead32(DRAMC_REGISTER_X58(MCH_TOLUD)))); - - // - // Set TSEG Memory Base. - // - EsmramcVal = (TopOfLowRamMb - FixedPcdGet8(PcdX58TsegMbytes)) << MCH_TSEGMB_MB_SHIFT; - // - // Set TSEG size, and disable TSEG visibility outside of SMM. Note that the - // T_EN bit has inverse meaning; when T_EN is set, then TSEG visibility is - // *restricted* to SMM. - // - EsmramcVal &= ~(UINT32)MCH_ESMRAMC_TSEG_MASK; - EsmramcVal |= FixedPcdGet8 (PcdX58TsegMbytes) == 8 ? MCH_ESMRAMC_TSEG_8MB : - FixedPcdGet8 (PcdX58TsegMbytes) == 2 ? MCH_ESMRAMC_TSEG_2MB : - MCH_ESMRAMC_TSEG_1MB; - EsmramcVal |= MCH_ESMRAMC_T_EN; - PciWrite32(DRAMC_REGISTER_X58(MCH_TSEGMB), EsmramcVal); - DEBUG((EFI_D_INFO, "MCH_TSEGMB =0x%x; \n", PciRead32(DRAMC_REGISTER_X58(MCH_TSEGMB)))); - DEBUG((EFI_D_INFO, "MCH_TSEGMB_1 =0x%x; MCH_TSEGMB_2 =0x%x;\n", ((TopOfLowRamMb - FixedPcdGet8(PcdX58TsegMbytes)) << MCH_TSEGMB_MB_SHIFT), EsmramcVal)); - - // - // Create the GUID HOB and point it to the first SMRAM range. - // - GetStates (&mAccess.LockState, &mAccess.OpenState); - SmramMapSize = sizeof SmramMap; - Status = SmramAccessGetCapabilities (mAccess.LockState, mAccess.OpenState, &SmramMapSize, SmramMap); - ASSERT_EFI_ERROR (Status); - - DEBUG_CODE_BEGIN (); - { - UINTN Count; - UINTN Idx; - - Count = SmramMapSize / sizeof SmramMap[0]; - DEBUG ((EFI_D_VERBOSE, "%a: SMRAM map follows, %d entries\n", __FUNCTION__, (INT32)Count)); - DEBUG ((EFI_D_VERBOSE, "% 20a % 20a % 20a % 20a\n", "PhysicalStart(0x)", - "PhysicalSize(0x)", "CpuStart(0x)", "RegionState(0x)")); - for (Idx = 0; Idx < Count; ++Idx) { - DEBUG ((EFI_D_VERBOSE, "% 20Lx % 20Lx % 20Lx % 20Lx\n", - SmramMap[Idx].PhysicalStart, SmramMap[Idx].PhysicalSize, - SmramMap[Idx].CpuStart, SmramMap[Idx].RegionState)); - } - } - DEBUG_CODE_END (); - - // - // We're done. The next step should succeed, but even if it fails, we can't - // roll back the above BuildGuidHob() allocation, because PEI doesn't support - // releasing memory. - // - return PeiServicesInstallPpi (mPpiList); - -WrongConfig: - // - // We really don't want to continue in this case. - // - ASSERT (FALSE); - CpuDeadLoop (); - return EFI_UNSUPPORTED; -} diff --git a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccessPei.inf b/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccessPei.inf deleted file mode 100644 index 6aa5b76e63..0000000000 --- a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmmAccessPei.inf +++ /dev/null @@ -1,62 +0,0 @@ -## @file -# A PEIM with the following responsibilities: -# -# - provide SMRAM access by producing PEI_SMM_ACCESS_PPI, -# - verify & configure the X58 TSEG in the entry point, -# - set aside the SMM_S3_RESUME_STATE object at the bottom of TSEG, and expose -# it via the gEfiAcpiVariableGuid GUIDed HOB. -# -# Copyright (C) 2013, 2015, Red Hat, Inc. -# Copyright (C) 2019 - 2023, Intel Corporation. All rights reserved.
-# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = SmmAccessPei - FILE_GUID = 6C0E75B4-B0B9-44D1-8210-3377D7B4E066 - MODULE_TYPE = PEIM - VERSION_STRING = 1.0 - ENTRY_POINT = SmmAccessPeiEntryPoint - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 -# - -[Sources] - SmmAccessPei.c - SmramInternal.c - SmramInternal.h - -[Packages] - MdeModulePkg/MdeModulePkg.dec - MdePkg/MdePkg.dec - SimicsX58SktPkg/SktPkg.dec - SimicsIch10Pkg/Ich10Pkg.dec - -[LibraryClasses] - BaseLib - BaseMemoryLib - DebugLib - HobLib - IoLib - PcdLib - PciLib - PeiServicesLib - PeimEntryPoint - -[FeaturePcd] - gSimicsX58PkgTokenSpaceGuid.PcdSmmSmramRequire - -[FixedPcd] - gSimicsX58PkgTokenSpaceGuid.PcdX58TsegMbytes - -[Ppis] - gPeiSmmAccessPpiGuid ## PRODUCES - -[Depex] - gEfiPeiMemoryDiscoveredPpiGuid diff --git a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmramInternal.c b/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmramInternal.c deleted file mode 100644 index 4b5a92f602..0000000000 --- a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmramInternal.c +++ /dev/null @@ -1,200 +0,0 @@ -/** @file - Functions and types shared by the SMM accessor PEI and DXE modules. - - Copyright (C) 2015, Red Hat, Inc. - Copyright (C) 2019, Intel Corporation. All rights reserved.
- - SPDX-License-Identifier: BSD-2-Clause-Patent -**/ - -#include -#include -#include -#include - -#include "SmramInternal.h" - -BOOLEAN gLockState; -BOOLEAN gOpenState; - -/** - Read the MCH_SMRAM and ESMRAMC registers, and update the LockState and - OpenState fields in the PEI_SMM_ACCESS_PPI / EFI_SMM_ACCESS2_PROTOCOL object, - from the D_LCK and T_EN bits. - - PEI_SMM_ACCESS_PPI and EFI_SMM_ACCESS2_PROTOCOL member functions can rely on - the LockState and OpenState fields being up-to-date on entry, and they need - to restore the same invariant on exit, if they touch the bits in question. - - @param[out] LockState Reflects the D_LCK bit on output; TRUE iff SMRAM is - locked. - @param[out] OpenState Reflects the inverse of the T_EN bit on output; TRUE - iff SMRAM is open. -**/ -VOID -GetStates ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState -) -{ - UINT8 EsmramcVal; - - EsmramcVal = PciRead8(DRAMC_REGISTER_X58(MCH_TSEGMB)); - - *OpenState = !(EsmramcVal & MCH_ESMRAMC_T_EN); - *LockState = !*OpenState; - - *OpenState = gOpenState; - *LockState = gLockState; -} - -// -// The functions below follow the PEI_SMM_ACCESS_PPI and -// EFI_SMM_ACCESS2_PROTOCOL member declarations. The PeiServices and This -// pointers are removed (TSEG doesn't depend on them), and so is the -// DescriptorIndex parameter (TSEG doesn't support range-wise locking). -// -// The LockState and OpenState members that are common to both -// PEI_SMM_ACCESS_PPI and EFI_SMM_ACCESS2_PROTOCOL are taken and updated in -// isolation from the rest of the (non-shared) members. -// - -EFI_STATUS -SmramAccessOpen ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState - ) -{ - - // - // Open TSEG by clearing T_EN. - // - PciAnd8(DRAMC_REGISTER_X58(MCH_TSEGMB), - (UINT8)((~(UINT32)MCH_ESMRAMC_T_EN) & 0xff)); - - gOpenState = TRUE; - gLockState = !gOpenState; - - GetStates (LockState, OpenState); - if (!*OpenState) { - return EFI_DEVICE_ERROR; - } - return EFI_SUCCESS; -} - -EFI_STATUS -SmramAccessClose ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState - ) -{ - // - // Close TSEG by setting T_EN. - // - PciOr8(DRAMC_REGISTER_X58(MCH_TSEGMB), MCH_ESMRAMC_T_EN); - - gOpenState = FALSE; - gLockState = !gOpenState; - - GetStates (LockState, OpenState); - if (*OpenState) { - return EFI_DEVICE_ERROR; - } - return EFI_SUCCESS; -} - -EFI_STATUS -SmramAccessLock ( - OUT BOOLEAN *LockState, - IN OUT BOOLEAN *OpenState - ) -{ - if (*OpenState) { - return EFI_DEVICE_ERROR; - } - - // - // Close & lock TSEG by setting T_EN and D_LCK. - // - PciOr8 (DRAMC_REGISTER_X58(MCH_TSEGMB), MCH_ESMRAMC_T_EN); - - gOpenState = FALSE; - gLockState = !gOpenState; - - GetStates (LockState, OpenState); - if (*OpenState || !*LockState) { - return EFI_DEVICE_ERROR; - } - return EFI_SUCCESS; -} - -EFI_STATUS -SmramAccessGetCapabilities ( - IN BOOLEAN LockState, - IN BOOLEAN OpenState, - IN OUT UINTN *SmramMapSize, - IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap - ) -{ - UINTN OriginalSize; - UINT32 TsegMemoryBaseMb, TsegMemoryBase; - UINT64 CommonRegionState; - UINT8 TsegSizeBits; - - OriginalSize = *SmramMapSize; - *SmramMapSize = DescIdxCount * sizeof *SmramMap; - if (OriginalSize < *SmramMapSize) { - return EFI_BUFFER_TOO_SMALL; - } - - // - // Read the TSEG Memory Base register. - // - TsegMemoryBaseMb = PciRead32(DRAMC_REGISTER_X58(MCH_TSEGMB)); - - TsegMemoryBaseMb = 0xDF800000; - - TsegMemoryBase = (TsegMemoryBaseMb >> MCH_TSEGMB_MB_SHIFT) << 20; - - // - // Precompute the region state bits that will be set for all regions. - // - CommonRegionState = (OpenState ? EFI_SMRAM_OPEN : EFI_SMRAM_CLOSED) | - (LockState ? EFI_SMRAM_LOCKED : 0) | - EFI_CACHEABLE; - - // - // The first region hosts an SMM_S3_RESUME_STATE object. It is located at the - // start of TSEG. We round up the size to whole pages, and we report it as - // EFI_ALLOCATED, so that the SMM_CORE stays away from it. - // - SmramMap[DescIdxSmmS3ResumeState].PhysicalStart = TsegMemoryBase; - SmramMap[DescIdxSmmS3ResumeState].CpuStart = TsegMemoryBase; - SmramMap[DescIdxSmmS3ResumeState].PhysicalSize = - EFI_PAGES_TO_SIZE (EFI_SIZE_TO_PAGES (sizeof (SMM_S3_RESUME_STATE))); - SmramMap[DescIdxSmmS3ResumeState].RegionState = - CommonRegionState | EFI_ALLOCATED; - - // - // Get the TSEG size bits from the ESMRAMC register. - // - TsegSizeBits = PciRead8 (DRAMC_REGISTER_X58(MCH_TSEGMB)) & - MCH_ESMRAMC_TSEG_MASK; - - TsegSizeBits = MCH_ESMRAMC_TSEG_8MB; - - // - // The second region is the main one, following the first. - // - SmramMap[DescIdxMain].PhysicalStart = - SmramMap[DescIdxSmmS3ResumeState].PhysicalStart + - SmramMap[DescIdxSmmS3ResumeState].PhysicalSize; - SmramMap[DescIdxMain].CpuStart = SmramMap[DescIdxMain].PhysicalStart; - SmramMap[DescIdxMain].PhysicalSize = - (TsegSizeBits == MCH_ESMRAMC_TSEG_8MB ? SIZE_8MB : - TsegSizeBits == MCH_ESMRAMC_TSEG_2MB ? SIZE_2MB : - SIZE_1MB) - SmramMap[DescIdxSmmS3ResumeState].PhysicalSize; - SmramMap[DescIdxMain].RegionState = CommonRegionState; - - return EFI_SUCCESS; -} diff --git a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmramInternal.h b/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmramInternal.h deleted file mode 100644 index 81180a9c8e..0000000000 --- a/Silicon/Intel/SimicsX58SktPkg/Smm/Access/SmramInternal.h +++ /dev/null @@ -1,82 +0,0 @@ -/** @file - Functions and types shared by the SMM accessor PEI and DXE modules. - - Copyright (C) 2015, Red Hat, Inc. - Copyright (C) 2019, Intel Corporation. All rights reserved.
- - SPDX-License-Identifier: BSD-2-Clause-Patent -**/ - -#include - -// -// We'll have two SMRAM ranges. -// -// The first is a tiny one that hosts an SMM_S3_RESUME_STATE object, to be -// filled in by the CPU SMM driver during normal boot, for the PEI instance of -// the LockBox library (which will rely on the object during S3 resume). -// -// The other SMRAM range is the main one, for the SMM core and the SMM drivers. -// -typedef enum { - DescIdxSmmS3ResumeState = 0, - DescIdxMain = 1, - DescIdxCount = 2 -} DESCRIPTOR_INDEX; - -/** - Read the MCH_SMRAM and ESMRAMC registers, and update the LockState and - OpenState fields in the PEI_SMM_ACCESS_PPI / EFI_SMM_ACCESS2_PROTOCOL object, - from the D_LCK and T_EN bits. - - PEI_SMM_ACCESS_PPI and EFI_SMM_ACCESS2_PROTOCOL member functions can rely on - the LockState and OpenState fields being up-to-date on entry, and they need - to restore the same invariant on exit, if they touch the bits in question. - - @param[out] LockState Reflects the D_LCK bit on output; TRUE iff SMRAM is - locked. - @param[out] OpenState Reflects the inverse of the T_EN bit on output; TRUE - iff SMRAM is open. -**/ -VOID -GetStates ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState - ); - -// -// The functions below follow the PEI_SMM_ACCESS_PPI and -// EFI_SMM_ACCESS2_PROTOCOL member declarations. The PeiServices and This -// pointers are removed (TSEG doesn't depend on them), and so is the -// DescriptorIndex parameter (TSEG doesn't support range-wise locking). -// -// The LockState and OpenState members that are common to both -// PEI_SMM_ACCESS_PPI and EFI_SMM_ACCESS2_PROTOCOL are taken and updated in -// isolation from the rest of the (non-shared) members. -// - -EFI_STATUS -SmramAccessOpen ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState - ); - -EFI_STATUS -SmramAccessClose ( - OUT BOOLEAN *LockState, - OUT BOOLEAN *OpenState - ); - -EFI_STATUS -SmramAccessLock ( - OUT BOOLEAN *LockState, - IN OUT BOOLEAN *OpenState - ); - -EFI_STATUS -SmramAccessGetCapabilities ( - IN BOOLEAN LockState, - IN BOOLEAN OpenState, - IN OUT UINTN *SmramMapSize, - IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap - ); -- 2.31.1.windows.1