]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/ResetVector/Ia32/PageTables64.asm
OvmfPkg X64 ResetVector: Move page tables from 512KB to 8MB
[mirror_edk2.git] / OvmfPkg / ResetVector / Ia32 / PageTables64.asm
index 8280e8f140bf95d3dbe90e6febb05634b2604015..b5a4cf8d71871142bfb9e82a2551f25af62de4d0 100644 (file)
@@ -44,8 +44,10 @@ BITS    32
 SetCr3ForPageTables64:\r
 \r
     ;\r
-    ; For OVMF, build some initial page tables at 0x80000. This is just\r
-    ; after the early stack/temp RAM.\r
+    ; For OVMF, build some initial page tables at 0x800000-0x806000.\r
+    ;\r
+    ; This range should match with PcdOvmfSecPageTablesBase and\r
+    ; PcdOvmfSecPageTablesSize which are declared in the FDF files.\r
     ;\r
     ; At the end of PEI, the pages tables will be rebuilt into a\r
     ; more permanent location by DxeIpl.\r
@@ -54,21 +56,21 @@ SetCr3ForPageTables64:
     mov     ecx, 6 * 0x1000 / 4\r
     xor     eax, eax\r
 clearPageTablesMemoryLoop:\r
-    mov     dword[ecx * 4 + 0x80000 - 4], eax\r
+    mov     dword[ecx * 4 + 0x800000 - 4], eax\r
     loop    clearPageTablesMemoryLoop\r
 \r
     ;\r
     ; Top level Page Directory Pointers (1 * 512GB entry)\r
     ;\r
-    mov     dword[0x80000], 0x81000 + PAGE_PDP_ATTR\r
+    mov     dword[0x800000], 0x801000 + PAGE_PDP_ATTR\r
 \r
     ;\r
     ; Next level Page Directory Pointers (4 * 1GB entries => 4GB)\r
     ;\r
-    mov     dword[0x81000], 0x82000 + PAGE_PDP_ATTR\r
-    mov     dword[0x81008], 0x83000 + PAGE_PDP_ATTR\r
-    mov     dword[0x81010], 0x84000 + PAGE_PDP_ATTR\r
-    mov     dword[0x81018], 0x85000 + PAGE_PDP_ATTR\r
+    mov     dword[0x801000], 0x802000 + PAGE_PDP_ATTR\r
+    mov     dword[0x801008], 0x803000 + PAGE_PDP_ATTR\r
+    mov     dword[0x801010], 0x804000 + PAGE_PDP_ATTR\r
+    mov     dword[0x801018], 0x805000 + PAGE_PDP_ATTR\r
 \r
     ;\r
     ; Page Table Entries (2048 * 2MB entries => 4GB)\r
@@ -79,13 +81,13 @@ pageTableEntriesLoop:
     dec     eax\r
     shl     eax, 21\r
     add     eax, PAGE_2M_PDE_ATTR\r
-    mov     [ecx * 8 + 0x82000 - 8], eax\r
+    mov     [ecx * 8 + 0x802000 - 8], eax\r
     loop    pageTableEntriesLoop\r
 \r
     ;\r
     ; Set CR3 now that the paging structures are available\r
     ;\r
-    mov     eax, 0x80000\r
+    mov     eax, 0x800000\r
     mov     cr3, eax\r
 \r
     OneTimeCallRet SetCr3ForPageTables64\r