\r
#include "Platform.h"\r
\r
+/**\r
+ Initialize SEV-SNP support if running as an SEV-SNP guest.\r
+\r
+**/\r
+STATIC\r
+VOID\r
+AmdSevSnpInitialize (\r
+ VOID\r
+ )\r
+{\r
+ EFI_PEI_HOB_POINTERS Hob;\r
+ EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob;\r
+\r
+ if (!MemEncryptSevSnpIsEnabled ()) {\r
+ return;\r
+ }\r
+\r
+ //\r
+ // Iterate through the system RAM and validate it.\r
+ //\r
+ for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {\r
+ if ((Hob.Raw != NULL) && (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR)) {\r
+ ResourceHob = Hob.ResourceDescriptor;\r
+\r
+ if (ResourceHob->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) {\r
+ MemEncryptSevSnpPreValidateSystemRam (\r
+ ResourceHob->PhysicalStart,\r
+ EFI_SIZE_TO_PAGES ((UINTN)ResourceHob->ResourceLength)\r
+ );\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
/**\r
Handle an SEV-SNP/GHCB protocol check failure.\r
\r
return;\r
}\r
\r
+ //\r
+ // Check and perform SEV-SNP initialization if required. This need to be\r
+ // done before the GHCB page is made shared in the AmdSevEsInitialize(). This\r
+ // is because the system RAM must be validated before it is made shared.\r
+ // The AmdSevSnpInitialize() validates the system RAM.\r
+ //\r
+ AmdSevSnpInitialize ();\r
+\r
//\r
// Set Memory Encryption Mask PCD\r
//\r