]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/PlatformPei/Platform.c
OvmfPkg: PlatformPei: invert MTRR setup in QemuInitializeRam()
[mirror_edk2.git] / OvmfPkg / PlatformPei / Platform.c
index 1ad5bfc26a09a1d6fb09784609d7dc005bacaaa4..fc98fc35e0781a88385ad015b7fcf3cd9f539319 100644 (file)
 #include <Library/PeiServicesLib.h>\r
 #include <Library/QemuFwCfgLib.h>\r
 #include <Library/ResourcePublicationLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
 #include <Guid/MemoryTypeInformation.h>\r
 #include <Ppi/MasterBootMode.h>\r
 #include <IndustryStandard/Pci22.h>\r
+#include <IndustryStandard/SmBios.h>\r
 #include <OvmfPlatforms.h>\r
 \r
 #include "Platform.h"\r
@@ -247,9 +249,11 @@ MiscInitialization (
   IoOr8 (0x92, BIT1);\r
 \r
   //\r
-  // Build the CPU hob with 36-bit addressing and 16-bits of IO space.\r
+  // Build the CPU HOB with guest RAM size dependent address width and 16-bits\r
+  // of IO space. (Side note: unlike other HOBs, the CPU HOB is needed during\r
+  // S3 resume as well, so we build it unconditionally.)\r
   //\r
-  BuildCpuHob (36, 16);\r
+  BuildCpuHob (mPhysMemAddressWidth, 16);\r
 \r
   //\r
   // Determine platform type and save Host Bridge DID to PCD\r
@@ -377,6 +381,41 @@ DebugDumpCmos (
 }\r
 \r
 \r
+/**\r
+  Set the SMBIOS entry point version for the generic SmbiosDxe driver.\r
+**/\r
+STATIC\r
+VOID\r
+SmbiosVersionInitialization (\r
+  VOID\r
+  )\r
+{\r
+  FIRMWARE_CONFIG_ITEM     Anchor;\r
+  UINTN                    AnchorSize;\r
+  SMBIOS_TABLE_ENTRY_POINT QemuAnchor;\r
+  UINT16                   SmbiosVersion;\r
+\r
+  if (RETURN_ERROR (QemuFwCfgFindFile ("etc/smbios/smbios-anchor", &Anchor,\r
+                      &AnchorSize)) ||\r
+      AnchorSize != sizeof QemuAnchor) {\r
+    return;\r
+  }\r
+\r
+  QemuFwCfgSelectItem (Anchor);\r
+  QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);\r
+  if (CompareMem (QemuAnchor.AnchorString, "_SM_", 4) != 0 ||\r
+      CompareMem (QemuAnchor.IntermediateAnchorString, "_DMI_", 5) != 0) {\r
+    return;\r
+  }\r
+\r
+  SmbiosVersion = (UINT16)(QemuAnchor.MajorVersion << 8 |\r
+                           QemuAnchor.MinorVersion);\r
+  DEBUG ((EFI_D_INFO, "%a: SMBIOS version from QEMU: 0x%04x\n", __FUNCTION__,\r
+    SmbiosVersion));\r
+  PcdSet16 (PcdSmbiosVersion, SmbiosVersion);\r
+}\r
+\r
+\r
 /**\r
   Perform Platform PEI initialization.\r
 \r
@@ -405,6 +444,7 @@ InitializePlatform (
   }\r
 \r
   BootModeInitialization ();\r
+  AddressWidthInitialization ();\r
 \r
   PublishPeiMemory ();\r
 \r
@@ -426,6 +466,8 @@ InitializePlatform (
     PeiFvInitialization ();\r
 \r
     MemMapInitialization ();\r
+\r
+    SmbiosVersionInitialization ();\r
   }\r
 \r
   MiscInitialization ();\r