public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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>

  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