From: "Min Xu" <min.m.xu@intel.com>
To: "Boeuf, Sebastien" <sebastien.boeuf@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Yao, Jiewen" <jiewen.yao@intel.com>,
"kraxel@redhat.com" <kraxel@redhat.com>
Subject: Re: [PATCH 3/3] OvmfPkg/AcpiPlatformDxe: Differentiate TDX case for Cloud Hypervisor
Date: Tue, 13 Dec 2022 00:05:52 +0000 [thread overview]
Message-ID: <SJ0PR11MB50691093C721FEAA81271BD1C5E39@SJ0PR11MB5069.namprd11.prod.outlook.com> (raw)
In-Reply-To: <dcda4d52f18bbbec8bd0f78b86f19adc5e3b46ae.1670835199.git.sebastien.boeuf@intel.com>
On December 12, 2022 5:04 PM, Boeuf, Sebastien wrote:
> Subject: [PATCH 3/3] OvmfPkg/AcpiPlatformDxe: Differentiate TDX case for
> Cloud Hypervisor
>
> From: Sebastien Boeuf <sebastien.boeuf@intel.com>
>
> Rely on CcProbe() to identify when running on TDX so that ACPI tables can be
> retrieved differently for Cloud Hypervisor. Instead of relying on the PVH
> structure to find the RSDP pointer, the tables are individually passed through
> the HOB.
>
> Signed-off-by: Jiaqi Gao <jiaqi.gao@intel.com>
> Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
> ---
> OvmfPkg/AcpiPlatformDxe/AcpiPlatform.c | 8 +-
> OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h | 6 ++
> OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf | 2 +
> OvmfPkg/AcpiPlatformDxe/CloudHvAcpi.c | 87 +++++++++++++++++++++
> OvmfPkg/OvmfPkg.dec | 1 +
> 5 files changed, 103 insertions(+), 1 deletion(-)
>
> diff --git a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.c
> b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.c
> index fcfb9703bd..0cc3d958be 100644
> --- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.c
> +++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.c
> @@ -9,6 +9,8 @@
> #include <OvmfPlatforms.h> // CLOUDHV_DEVICE_ID +#include
> <Library/CcProbeLib.h> // CcProbe(), CcGuestTypeIntelTdx+ #include
> "AcpiPlatform.h" /**@@ -33,7 +35,11 @@ InstallAcpiTables (
> HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId); if
> (HostBridgeDevId == CLOUDHV_DEVICE_ID) {- Status = InstallCloudHvTables
> (AcpiTable);+ if (CcProbe () == CcGuestTypeIntelTdx) {+ Status =
> InstallCloudHvTablesTdx (AcpiTable);+ } else {+ Status =
> InstallCloudHvTables (AcpiTable);+ } } else { Status =
> InstallQemuFwCfgTables (AcpiTable); }diff --git
> a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
> b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
> index 342339750d..3ec5098658 100644
> --- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
> +++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatform.h
> @@ -19,6 +19,12 @@ typedef struct {
> typedef struct S3_CONTEXT S3_CONTEXT;
> +EFI_STATUS+EFIAPI+InstallCloudHvTablesTdx (+ IN
> EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol+ );+ EFI_STATUS EFIAPI
> InstallCloudHvTables (diff --git
> a/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
> b/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
> index 09daf30bcd..dd03eccd88 100644
> --- a/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
> +++ b/OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
> @@ -45,6 +45,7 @@
> QemuFwCfgS3Lib UefiBootServicesTableLib UefiDriverEntryPoint+
> HobLib [Protocols] gEfiAcpiTableProtocolGuid # PROTOCOL
> ALWAYS_CONSUMED@@ -53,6 +54,7 @@
> [Guids] gRootBridgesConnectedEventGroupGuid+
> gUefiOvmfPkgTdxAcpiHobGuid [Pcd]
> gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumerationdiff --git
> a/OvmfPkg/AcpiPlatformDxe/CloudHvAcpi.c
> b/OvmfPkg/AcpiPlatformDxe/CloudHvAcpi.c
> index ff59600d3e..cbe8bb9b0c 100644
> --- a/OvmfPkg/AcpiPlatformDxe/CloudHvAcpi.c
> +++ b/OvmfPkg/AcpiPlatformDxe/CloudHvAcpi.c
> @@ -7,14 +7,101 @@
> **/ +#include <IndustryStandard/Acpi.h> //
> EFI_ACPI_DESCRIPTION_HEADER #include <IndustryStandard/CloudHv.h>
> // CLOUDHV_RSDP_ADDRESS #include <IndustryStandard/Xen/arch-
> x86/hvm/start_info.h> // hvm_start_info #include <Library/BaseLib.h>
> // CpuDeadLoop() #include <Library/DebugLib.h> // DEBUG()
> #include <Library/PcdLib.h> // PcdGet32()+#include
> <Library/HobLib.h> // GetFirstGuidHob(),
> GetNextGuidHob()+#include <Library/UefiBootServicesTableLib.h> //
> gBS++#include <Protocol/AcpiSystemDescriptionTable.h>+#include
> <Protocol/AcpiTable.h>+#include <Protocol/QemuAcpiTableNotify.h>
> // QEMU_ACPI_TABLE_NOTIFY_PROTOCOL #include "AcpiPlatform.h"
> +EFI_HANDLE mChAcpiHandle =
> NULL;+QEMU_ACPI_TABLE_NOTIFY_PROTOCOL
> mChAcpiNotifyProtocol;++EFI_STATUS+EFIAPI+InstallCloudHvTablesTdx (+
> IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol+ )+{+ EFI_STATUS Status;+
> UINTN TableHandle;++ EFI_PEI_HOB_POINTERS Hob;+
> EFI_ACPI_DESCRIPTION_HEADER *CurrentTable;+
> EFI_ACPI_DESCRIPTION_HEADER *DsdtTable;++ DsdtTable = NULL;+
> TableHandle = 0;++ Hob.Guid = (EFI_HOB_GUID_TYPE *)GetFirstGuidHob
> (&gUefiOvmfPkgTdxAcpiHobGuid);++ while (Hob.Guid != NULL) {+
> CurrentTable = (EFI_ACPI_DESCRIPTION_HEADER *)(&Hob.Guid->Name +
> 1);+ if (!AsciiStrnCmp ((CHAR8 *)&CurrentTable->Signature, "DSDT", 4)) {+
> DsdtTable = CurrentTable;+ } else {+ //+ // Install the tables+ //+
> Status = AcpiProtocol->InstallAcpiTable (+ AcpiProtocol,+
> CurrentTable,+ CurrentTable->Length,+
> &TableHandle+ );+ for (UINTN i = 0; i < CurrentTable-
> >Length; i++) {+ DEBUG ((DEBUG_INFO, " %x", *((UINT8 *)CurrentTable +
> i)));+ }++ DEBUG ((DEBUG_INFO, "\n"));+ }++ Hob.Raw =
> GET_NEXT_HOB (Hob.Raw);+ Hob.Guid = (EFI_HOB_GUID_TYPE
> *)GetNextGuidHob (&gUefiOvmfPkgTdxAcpiHobGuid, Hob.Raw);+ }++ //+
> // Install DSDT table. If we reached this point without finding the DSDT,+ //
> then we're out of sync with the hypervisor, and cannot continue.+ //+ if
> (DsdtTable == NULL) {+ DEBUG ((DEBUG_INFO, "%a: no DSDT found\n",
> __FUNCTION__));+ ASSERT (FALSE);+ }++ Status = AcpiProtocol-
> >InstallAcpiTable (+ AcpiProtocol,+ DsdtTable,+
> DsdtTable->Length,+ &TableHandle+ );+ if
> (EFI_ERROR (Status)) {+ ASSERT_EFI_ERROR (Status);+ return Status;+ }++
> //+ // Install a protocol to notify that the ACPI table provided by CH is+ //
> ready.+ //+ gBS->InstallProtocolInterface (+ &mChAcpiHandle,+
> &gQemuAcpiTableNotifyProtocolGuid,+ EFI_NATIVE_INTERFACE,+
> &mChAcpiNotifyProtocol+ );++ return EFI_SUCCESS;+}+ // Get the ACPI
> tables from EBDA start EFI_STATUS EFIAPIdiff --git a/OvmfPkg/OvmfPkg.dec
> b/OvmfPkg/OvmfPkg.dec
> index 5f5556c67c..a350bb8f84 100644
> --- a/OvmfPkg/OvmfPkg.dec
> +++ b/OvmfPkg/OvmfPkg.dec
> @@ -151,6 +151,7 @@
> gConfidentialComputingSevSnpBlobGuid = {0x067b1f5f, 0xcf26, 0x44c5,
> {0x85, 0x54, 0x93, 0xd7, 0x77, 0x91, 0x2d, 0x42}}
> gUefiOvmfPkgPlatformInfoGuid = {0xdec9b486, 0x1f16, 0x47c7, {0x8f,
> 0x68, 0xdf, 0x1a, 0x41, 0x88, 0x8b, 0xa5}} gVMMBootOrderGuid =
> {0x668f4529, 0x63d0, 0x4bb5, {0xb6, 0x5d, 0x6f, 0xbb, 0x9d, 0x36, 0xa4,
> 0x4a}}+ gUefiOvmfPkgTdxAcpiHobGuid = {0x6a0c5870, 0xd4ed, 0x44f4,
> {0xa1, 0x35, 0xdd, 0x23, 0x8b, 0x6f, 0x0c, 0x8d}} [Ppis] # PPI whose
> presence in the PPI database signals that the TPM base address--
> 2.34.1
Reviewed-by: Min Xu <min.m.xu@intel.com>
next prev parent reply other threads:[~2022-12-13 0:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-12 9:03 [PATCH 0/3] OvmfPkg: Make IntelTdx work with Cloud Hypervisor Boeuf, Sebastien
2022-12-12 9:03 ` [PATCH 1/3] OvmfPkg/PlatformInitLib: Differentiate TDX case for " Boeuf, Sebastien
2022-12-13 0:04 ` Min Xu
2022-12-12 9:03 ` [PATCH 2/3] OvmfPkg/PlatformInitLib: Transfer GUID Extension HOB Boeuf, Sebastien
2022-12-13 0:05 ` Min Xu
2022-12-12 9:03 ` [PATCH 3/3] OvmfPkg/AcpiPlatformDxe: Differentiate TDX case for Cloud Hypervisor Boeuf, Sebastien
2022-12-13 0:05 ` Min Xu [this message]
2022-12-14 16:19 ` [PATCH 0/3] OvmfPkg: Make IntelTdx work with " Yao, Jiewen
2022-12-15 2:02 ` Yao, Jiewen
2022-12-15 15:11 ` Boeuf, Sebastien
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=SJ0PR11MB50691093C721FEAA81271BD1C5E39@SJ0PR11MB5069.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox