\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
\r
**/\r
VOID\r
-EFIAPI\r
AmdSevInitialize (\r
VOID\r
)\r
//\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