#include <Library/HobLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
#include <Library/PcdLib.h>\r
+#include <Library/CacheMaintenanceLib.h>\r
\r
VOID\r
BuildMemoryTypeInformationHob (\r
PcdGet64 (PcdSystemMemorySize)\r
);\r
\r
+ //\r
+ // When running under virtualization, the PI/UEFI memory region may be\r
+ // clean but not invalidated in system caches or in lower level caches\r
+ // on other CPUs. So invalidate the region by virtual address, to ensure\r
+ // that the contents we put there with the caches and MMU off will still\r
+ // be visible after turning them on.\r
+ //\r
+ InvalidateDataCacheRange ((VOID*)(UINTN)UefiMemoryBase, UefiMemorySize);\r
+\r
// Build Memory Allocation Hob\r
InitMmu ();\r
\r