#include <Library/DebugLib.h>\r
#include <Library/HobLib.h>\r
#include <Library/IoLib.h>\r
+#include <Library/MemEncryptSevLib.h>\r
#include <Library/PcdLib.h>\r
#include <Library/PciLib.h>\r
#include <Library/PeimEntryPoint.h>\r
(UINT64)(UINTN) PcdGet32 (PcdOvmfSecPageTablesSize),\r
EfiACPIMemoryNVS\r
);\r
+\r
+ if (MemEncryptSevEsIsEnabled ()) {\r
+ //\r
+ // If SEV-ES is enabled, reserve the GHCB-related memory area. This\r
+ // includes the extra page table used to break down the 2MB page\r
+ // mapping into 4KB page entries where the GHCB resides and the\r
+ // GHCB area itself.\r
+ //\r
+ // Since this memory range will be used by the Reset Vector on S3\r
+ // resume, it must be reserved as ACPI NVS.\r
+ //\r
+ BuildMemoryAllocationHob (\r
+ (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecGhcbPageTableBase),\r
+ (UINT64)(UINTN) PcdGet32 (PcdOvmfSecGhcbPageTableSize),\r
+ EfiACPIMemoryNVS\r
+ );\r
+ BuildMemoryAllocationHob (\r
+ (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecGhcbBase),\r
+ (UINT64)(UINTN) PcdGet32 (PcdOvmfSecGhcbSize),\r
+ EfiACPIMemoryNVS\r
+ );\r
+ }\r
#endif\r
}\r
\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableBase\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableSize\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBase\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfLockBoxStorageBase\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfLockBoxStorageSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdGuidedExtractHandlerTableSize\r