]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: CloudHv: Retrieve RSDP address from PVH
authorSebastien Boeuf <sebastien.boeuf@intel.com>
Wed, 2 Mar 2022 13:31:35 +0000 (21:31 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 4 Mar 2022 02:41:57 +0000 (02:41 +0000)
Instead of hardcoding the address of the RSDP in the firmware, let's
rely on the PVH structure hvm_start_info to retrieve this information.

Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
OvmfPkg/AcpiPlatformDxe/AcpiPlatformDxe.inf
OvmfPkg/AcpiPlatformDxe/CloudHvAcpi.c
OvmfPkg/CloudHv/CloudHvX64.fdf
OvmfPkg/Include/IndustryStandard/CloudHv.h

index b36b8413e007aa01afd1fe40739440a4af7b9476..f22bd7cb6da1fbf1a0c84778fcb72d06ef23d3a8 100644 (file)
@@ -56,6 +56,8 @@
 [Pcd]\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration\r
   gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId\r
+  gUefiOvmfPkgTokenSpaceGuid.PcdXenPvhStartOfDayStructPtr\r
+  gUefiOvmfPkgTokenSpaceGuid.PcdXenPvhStartOfDayStructPtrSize\r
 \r
 [Depex]\r
   gEfiAcpiTableProtocolGuid\r
index 44a6bb70fea7dba88dd199f888167438d2a95f1e..ff59600d3ea14b57c4a89319dcbc1065ba5d9821 100644 (file)
@@ -7,9 +7,11 @@
 \r
 **/\r
 \r
-#include <IndustryStandard/CloudHv.h> // CLOUDHV_RSDP_ADDRESS\r
-#include <Library/BaseLib.h>          // CpuDeadLoop()\r
-#include <Library/DebugLib.h>         // DEBUG()\r
+#include <IndustryStandard/CloudHv.h>                     // CLOUDHV_RSDP_ADDRESS\r
+#include <IndustryStandard/Xen/arch-x86/hvm/start_info.h> // hvm_start_info\r
+#include <Library/BaseLib.h>                              // CpuDeadLoop()\r
+#include <Library/DebugLib.h>                             // DEBUG()\r
+#include <Library/PcdLib.h>                               // PcdGet32()\r
 \r
 #include "AcpiPlatform.h"\r
 \r
@@ -23,20 +25,33 @@ InstallCloudHvTables (
   EFI_STATUS  Status;\r
   UINTN       TableHandle;\r
 \r
-  EFI_ACPI_DESCRIPTION_HEADER                *Xsdt;\r
-  VOID                                       *CurrentTableEntry;\r
-  UINTN                                      CurrentTablePointer;\r
-  EFI_ACPI_DESCRIPTION_HEADER                *CurrentTable;\r
-  UINTN                                      Index;\r
-  UINTN                                      NumberOfTableEntries;\r
-  EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE  *Fadt2Table;\r
-  EFI_ACPI_DESCRIPTION_HEADER                *DsdtTable;\r
+  EFI_ACPI_DESCRIPTION_HEADER                   *Xsdt;\r
+  VOID                                          *CurrentTableEntry;\r
+  UINTN                                         CurrentTablePointer;\r
+  EFI_ACPI_DESCRIPTION_HEADER                   *CurrentTable;\r
+  UINTN                                         Index;\r
+  UINTN                                         NumberOfTableEntries;\r
+  EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE     *Fadt2Table;\r
+  EFI_ACPI_DESCRIPTION_HEADER                   *DsdtTable;\r
+  EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER  *AcpiRsdpStructurePtr;\r
+  UINT32                                        *PVHResetVectorData;\r
+  struct hvm_start_info                         *pvh_start_info;\r
 \r
   Fadt2Table           = NULL;\r
   DsdtTable            = NULL;\r
   TableHandle          = 0;\r
   NumberOfTableEntries = 0;\r
-  EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER  *AcpiRsdpStructurePtr = (VOID *)CLOUDHV_RSDP_ADDRESS;\r
+  AcpiRsdpStructurePtr = NULL;\r
+  PVHResetVectorData   = NULL;\r
+  pvh_start_info       = NULL;\r
+\r
+  PVHResetVectorData = (VOID *)(UINTN)PcdGet32 (PcdXenPvhStartOfDayStructPtr);\r
+  if (PVHResetVectorData == 0) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+\r
+  pvh_start_info       = (struct hvm_start_info *)(UINTN)PVHResetVectorData[0];\r
+  AcpiRsdpStructurePtr = (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)pvh_start_info->rsdp_paddr;\r
 \r
   // If XSDT table is found, just install its tables.\r
   // Otherwise, try to find and install the RSDT tables.\r
index 282bcf863491327781a058b2d1725dd5acf652d0..d80e13ae9040f86be7d9e7eef349fdfc740a2880 100644 (file)
@@ -73,6 +73,9 @@ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSnpSecretsBase|gUefiOvmfPkgTokenSpaceGuid.PcdO
 0x00E000|0x001000\r
 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidSize\r
 \r
+0x00F000|0x001000\r
+gUefiOvmfPkgTokenSpaceGuid.PcdXenPvhStartOfDayStructPtr|gUefiOvmfPkgTokenSpaceGuid.PcdXenPvhStartOfDayStructPtrSize\r
+\r
 0x010000|0x010000\r
 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize\r
 \r
index 86404cc97e492ad140ff97737faeadae8aa265eb..d31ecc9eec93738198f3c6e474b812147d53dfc8 100644 (file)
@@ -38,9 +38,4 @@
 //\r
 #define CLOUDHV_SMBIOS_ADDRESS  0xf0000\r
 \r
-//\r
-// RSDP address\r
-//\r
-#define CLOUDHV_RSDP_ADDRESS  0xa0000\r
-\r
 #endif // __CLOUDHV_H__\r