From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 53DE794146E for ; Fri, 26 Apr 2024 12:18:02 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=xOSBmRiYcA1Y9MjXMWuTVrpef8lmJa/LO67CVv95vvE=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe; s=20240206; t=1714133881; v=1; b=JCrGIxKQMRGlysduBabmPLweqdVwi9eZiKHMeUHPaiw8AEXBAtOchp4oWJDh/jrVTXz/UHvH Jfdm+zw3+4nzATi2pac2AJzZti64oSQD65dGzcvkHl8pc4ip67+GkjtRGyAPhRQPsJPep6P63S2 rlTRBmU3n7VGS/UTr6UWDP6coGjQ9webmkNmPxT2QCdq8971JmhYoW4d6dxqIR49ULTU9/3K0IL 4zuz3HPzvmm6lmRLGDpFolQaY0N1AyljGhUr7MPnBEKWpi1vilW9TiSF8v9bNcXeo/F4RX9WOaq xew7aIWm7AoI9LsZ/+1KOKUlbzvJ5snFzriTHPJFqAoFQ== X-Received: by 127.0.0.2 with SMTP id EX7aYY7687511xaKeEj2JrFQ; Fri, 26 Apr 2024 05:18:01 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) by mx.groups.io with SMTP id smtpd.web11.12554.1714133857432549514 for ; Fri, 26 Apr 2024 05:18:00 -0700 X-CSE-ConnectionGUID: xaTKVufxSJucrZ7JutvEEg== X-CSE-MsgGUID: bafMjQjnQd+Cgm40N1By8A== X-IronPort-AV: E=McAfee;i="6600,9927,11055"; a="10027173" X-IronPort-AV: E=Sophos;i="6.07,232,1708416000"; d="scan'208";a="10027173" X-Received: from orviesa001.jf.intel.com ([10.64.159.141]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Apr 2024 05:18:01 -0700 X-CSE-ConnectionGUID: /1qh4MUKQEKk+PuQMHnsqA== X-CSE-MsgGUID: TH/rmSJnQ92eWuHFMjABxg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,232,1708416000"; d="scan'208";a="62879166" X-Received: from sh1gapp1009.ccr.corp.intel.com ([10.239.189.219]) by orviesa001.jf.intel.com with ESMTP; 26 Apr 2024 05:17:58 -0700 From: "Wu, Jiaxin" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Jiewen Yao , Gerd Hoffmann , Ray Ni Subject: [edk2-devel] [PATCH v4 12/14] OvmfPkg/PlatformPei: Relocate SmBases in PEI phase Date: Fri, 26 Apr 2024 20:17:18 +0800 Message-Id: <20240426121720.54308-13-jiaxin.wu@intel.com> In-Reply-To: <20240426121720.54308-1-jiaxin.wu@intel.com> References: <20240426121720.54308-1-jiaxin.wu@intel.com> 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 Resent-Date: Fri, 26 Apr 2024 05:18:00 -0700 Resent-From: jiaxin.wu@intel.com Reply-To: devel@edk2.groups.io,jiaxin.wu@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 9O9Dw3oBFdrmcgsXSkKdCITzx7686176AA= X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=JCrGIxKQ; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io This patch is to consume SmmRelocationInit for SmBase Relocation. Cc: Ard Biesheuvel Cc: Jiewen Yao Cc: Gerd Hoffmann Cc: Ray Ni Signed-off-by: Jiaxin Wu --- OvmfPkg/PlatformPei/Platform.c | 3 + OvmfPkg/PlatformPei/Platform.h | 5 ++ OvmfPkg/PlatformPei/PlatformPei.inf | 5 +- .../ClearCache.c => PlatformPei/SmmRelocation.c} | 79 ++++++---------------- 4 files changed, 34 insertions(+), 58 deletions(-) copy OvmfPkg/{Bhyve/PlatformPei/ClearCache.c => PlatformPei/SmmRelocation.c} (32%) diff --git a/OvmfPkg/PlatformPei/Platform.c b/OvmfPkg/PlatformPei/Platform.c index f5dc41c3a8..df35726ff6 100644 --- a/OvmfPkg/PlatformPei/Platform.c +++ b/OvmfPkg/PlatformPei/Platform.c @@ -365,8 +365,11 @@ InitializePlatform ( MiscInitialization (PlatformInfoHob); } IntelTdxInitialize (); InstallFeatureControlCallback (PlatformInfoHob); + if (PlatformInfoHob->SmmSmramRequire) { + RelocateSmBase (); + } return EFI_SUCCESS; } diff --git a/OvmfPkg/PlatformPei/Platform.h b/OvmfPkg/PlatformPei/Platform.h index 1cf44844a7..0a59547cfc 100644 --- a/OvmfPkg/PlatformPei/Platform.h +++ b/OvmfPkg/PlatformPei/Platform.h @@ -76,10 +76,15 @@ InstallFeatureControlCallback ( VOID InstallClearCacheCallback ( VOID ); +VOID +RelocateSmBase ( + VOID + ); + VOID AmdSevInitialize ( IN EFI_HOB_PLATFORM_INFO *PlatformInfoHob ); diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/PlatformPei.inf index 20b1b98292..e036018eab 100644 --- a/OvmfPkg/PlatformPei/PlatformPei.inf +++ b/OvmfPkg/PlatformPei/PlatformPei.inf @@ -1,10 +1,10 @@ ## @file # Platform PEI driver # # This module provides platform specific function to detect boot mode. -# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2024, Intel Corporation. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -30,10 +30,11 @@ MemDetect.c MemTypeInfo.c Platform.c Platform.h IntelTdx.c + SmmRelocation.c [Packages] EmbeddedPkg/EmbeddedPkg.dec MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec @@ -64,10 +65,11 @@ MtrrLib MemEncryptSevLib PcdLib CcExitLib PlatformInitLib + SmmRelocationLib [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvBase gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvSize gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase @@ -140,9 +142,10 @@ [Ppis] gEfiPeiMasterBootModePpiGuid gEfiPeiMpServicesPpiGuid gEfiPeiReadOnlyVariable2PpiGuid + gEdkiiPeiMpServices2PpiGuid [Depex] TRUE diff --git a/OvmfPkg/Bhyve/PlatformPei/ClearCache.c b/OvmfPkg/PlatformPei/SmmRelocation.c similarity index 32% copy from OvmfPkg/Bhyve/PlatformPei/ClearCache.c copy to OvmfPkg/PlatformPei/SmmRelocation.c index 9e59f31df7..1151fc9220 100644 --- a/OvmfPkg/Bhyve/PlatformPei/ClearCache.c +++ b/OvmfPkg/PlatformPei/SmmRelocation.c @@ -1,45 +1,21 @@ /**@file - Install a callback to clear cache on all processors. - This is for conformance with the TCG "Platform Reset Attack Mitigation - Specification". Because clearing the CPU caches at boot doesn't impact - performance significantly, do it unconditionally, for simplicity's - sake. + Install a callback to do smm relocation. - Copyright (C) 2018, Red Hat, Inc. + Copyright (c) 2024, Intel Corporation. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent **/ -#include #include #include -#include - +#include +#include #include "Platform.h" /** - Invalidate data & instruction caches. - All APs execute this function in parallel. The BSP executes the function - separately. - - @param[in,out] WorkSpace Pointer to the input/output argument workspace - shared by all processors. -**/ -STATIC -VOID -EFIAPI -ClearCache ( - IN OUT VOID *WorkSpace - ) -{ - WriteBackInvalidateDataCache (); - InvalidateInstructionCache (); -} - -/** - Notification function called when EFI_PEI_MP_SERVICES_PPI becomes available. + Notification function called when EDKII_PEI_MP_SERVICES2_PPI becomes available. @param[in] PeiServices Indirect reference to the PEI Services Table. @param[in] NotifyDescriptor Address of the notification descriptor data structure. @param[in] Ppi Address of the PPI that was installed. @@ -48,68 +24,57 @@ ClearCache ( function is ignored. **/ STATIC EFI_STATUS EFIAPI -ClearCacheOnMpServicesAvailable ( +OnMpServices2Available ( IN EFI_PEI_SERVICES **PeiServices, IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor, IN VOID *Ppi ) { - EFI_PEI_MP_SERVICES_PPI *MpServices; - EFI_STATUS Status; + EDKII_PEI_MP_SERVICES2_PPI *MpServices2; + EFI_STATUS Status; DEBUG ((DEBUG_INFO, "%a: %a\n", gEfiCallerBaseName, __func__)); + MpServices2 = Ppi; + // - // Clear cache on all the APs in parallel. + // Smm Relocation Initialize. // - MpServices = Ppi; - Status = MpServices->StartupAllAPs ( - (CONST EFI_PEI_SERVICES **)PeiServices, - MpServices, - ClearCache, // Procedure - FALSE, // SingleThread - 0, // TimeoutInMicroSeconds: inf. - NULL // ProcedureArgument - ); - if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) { - DEBUG ((DEBUG_ERROR, "%a: StartupAllAps(): %r\n", __func__, Status)); - return Status; + Status = SmmRelocationInit (MpServices2); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_WARN, "OnMpServices2Available: Not able to execute Smm Relocation Init. Status: %r\n", Status)); } - // - // Now clear cache on the BSP too. - // - ClearCache (NULL); return EFI_SUCCESS; } // // Notification object for registering the callback, for when -// EFI_PEI_MP_SERVICES_PPI becomes available. +// EDKII_PEI_MP_SERVICES2_PPI becomes available. // -STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { - EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | // Flags +STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServices2Notify = { + EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | // Flags EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, - &gEfiPeiMpServicesPpiGuid, // Guid - ClearCacheOnMpServicesAvailable // Notify + &gEdkiiPeiMpServices2PpiGuid, // Guid + OnMpServices2Available // Notify }; VOID -InstallClearCacheCallback ( +RelocateSmBase ( VOID ) { EFI_STATUS Status; - Status = PeiServicesNotifyPpi (&mMpServicesNotify); + Status = PeiServicesNotifyPpi (&mMpServices2Notify); if (EFI_ERROR (Status)) { DEBUG (( DEBUG_ERROR, - "%a: failed to set up MP Services callback: %r\n", + "%a: failed to set up MP Services2 callback: %r\n", __func__, Status )); } } -- 2.16.2.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#118336): https://edk2.groups.io/g/devel/message/118336 Mute This Topic: https://groups.io/mt/105748926/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-