[Sources.X64]\r
X64/VirtualMemory.h\r
X64/VirtualMemory.c\r
- X64/DxeLoadFunc.c\r
+ X64/DxeLoadFunc.c \r
\r
[Sources.IPF]\r
Ipf/DxeLoadFunc.c\r
[FeaturePcd.IA32]\r
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode\r
\r
+[FeaturePcd.X64]\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables\r
+\r
[FeaturePcd]\r
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportUefiDecompress\r
\r
TopOfStack = (VOID *) ((UINTN) BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT);\r
TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);\r
\r
- //\r
- // Create page table and save PageMapLevel4 to CR3\r
- //\r
- PageTables = CreateIdentityMappingPageTables ();\r
-\r
+ if (FeaturePcdGet (PcdDxeIplBuildPageTables)) {\r
+ //\r
+ // Create page table and save PageMapLevel4 to CR3\r
+ //\r
+ PageTables = CreateIdentityMappingPageTables ();\r
+ }\r
+ \r
//\r
// End of PEI phase signal\r
//\r
Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi);\r
ASSERT_EFI_ERROR (Status);\r
\r
- AsmWriteCr3 (PageTables);\r
+ if (FeaturePcdGet (PcdDxeIplBuildPageTables)) {\r
+ AsmWriteCr3 (PageTables);\r
+ }\r
\r
//\r
// Update the contents of BSP stack HOB to reflect the real stack info passed to DxeCore.\r
#\r
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|TRUE|BOOLEAN|0x0001003b\r
\r
+ ##\r
+ # This feature flag specifies whether DxeIpl should rebuild page tables. This flag only\r
+ # makes sense in the case where the DxeIpl and the DxeCore are both X64.\r
+ #\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables|TRUE|BOOLEAN|0x0001003c\r
+\r
[PcdsFixedAtBuild]\r
## Dynamic type PCD can be registered callback function for Pcd setting action.\r
# PcdMaxPeiPcdCallBackNumberPerPcdEntry indicate maximum number of callback function\r