]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/PlatformPei/AmdSev.c
OvmfPkg/Csm/LegacyBiosDxe: Fix Legacy16GetTableAddress call for E820 data
[mirror_edk2.git] / OvmfPkg / PlatformPei / AmdSev.c
index 1539e5b5cdce152c606d181f960256a58dbeaeac..2ae8126ccf8a77e215945249277799ce47e336ee 100644 (file)
@@ -3,25 +3,21 @@
 \r
   Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR>\r
 \r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD\r
-  License which accompanies this distribution.  The full text of the license\r
-  may be found at http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 //\r
 // The package level header files this module uses\r
 //\r
-#include <PiPei.h>\r
-\r
 #include <Library/DebugLib.h>\r
+#include <Library/HobLib.h>\r
+#include <Library/MemEncryptSevLib.h>\r
 #include <Library/PcdLib.h>\r
-#include <Register/Cpuid.h>\r
+#include <PiPei.h>\r
 #include <Register/Amd/Cpuid.h>\r
-#include <Library/MemEncryptSevLib.h>\r
+#include <Register/Cpuid.h>\r
+\r
+#include "Platform.h"\r
 \r
 /**\r
 \r
@@ -30,7 +26,6 @@
 \r
   **/\r
 VOID\r
-EFIAPI\r
 AmdSevInitialize (\r
   VOID\r
   )\r
@@ -66,4 +61,32 @@ AmdSevInitialize (
   //\r
   PcdStatus = PcdSet32S (PcdOptionRomImageVerificationPolicy, 0x4);\r
   ASSERT_RETURN_ERROR (PcdStatus);\r
+\r
+  //\r
+  // When SMM is required, cover the pages containing the initial SMRAM Save\r
+  // State Map with a memory allocation HOB:\r
+  //\r
+  // There's going to be a time interval between our decrypting those pages for\r
+  // SMBASE relocation and re-encrypting the same pages after SMBASE\r
+  // relocation. We shall ensure that the DXE phase stay away from those pages\r
+  // until after re-encryption, in order to prevent an information leak to the\r
+  // hypervisor.\r
+  //\r
+  if (FeaturePcdGet (PcdSmmSmramRequire) && (mBootMode != BOOT_ON_S3_RESUME)) {\r
+    RETURN_STATUS LocateMapStatus;\r
+    UINTN         MapPagesBase;\r
+    UINTN         MapPagesCount;\r
+\r
+    LocateMapStatus = MemEncryptSevLocateInitialSmramSaveStateMapPages (\r
+                        &MapPagesBase,\r
+                        &MapPagesCount\r
+                        );\r
+    ASSERT_RETURN_ERROR (LocateMapStatus);\r
+\r
+    BuildMemoryAllocationHob (\r
+      MapPagesBase,                      // BaseAddress\r
+      EFI_PAGES_TO_SIZE (MapPagesCount), // Length\r
+      EfiBootServicesData                // MemoryType\r
+      );\r
+  }\r
 }\r