From: Laszlo Ersek <lersek@redhat.com>
To: edk2-devel-01 <edk2-devel@ml01.01.org>
Cc: "Jordan Justen" <jordan.l.justen@intel.com>,
"Marvin Häuser" <Marvin.Haeuser@outlook.com>
Subject: [PATCH v3 2/2] OvmfPkg/ResetVector: Depend on PCD values of the page tables.
Date: Fri, 4 Nov 2016 00:32:18 +0100 [thread overview]
Message-ID: <20161103233218.17073-3-lersek@redhat.com> (raw)
In-Reply-To: <20161103233218.17073-1-lersek@redhat.com>
From: Marvin Häuser <Marvin.Haeuser@outlook.com>
Currently, the values of the page tables' address and size are
hard-coded in the ResetVector. This patch replaces this with a PCD
dependency for the NASM Reset Vector.
Checks for the size have been added to alert the developer to rewrite
the ASM according to the new size, if it has been changed.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Marvin Haeuser <Marvin.Haeuser@outlook.com>
[lersek@redhat.com: simplify patch]
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Marvin Häuser <Marvin.Haeuser@outlook.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
---
OvmfPkg/ResetVector/ResetVector.inf | 5 +++++
OvmfPkg/ResetVector/Ia32/PageTables64.asm | 22 +++++++++-----------
OvmfPkg/ResetVector/ResetVector.nasmb | 12 +++++++++--
3 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/OvmfPkg/ResetVector/ResetVector.inf b/OvmfPkg/ResetVector/ResetVector.inf
index 46610d243ecf..82df438db0dc 100644
--- a/OvmfPkg/ResetVector/ResetVector.inf
+++ b/OvmfPkg/ResetVector/ResetVector.inf
@@ -30,8 +30,13 @@ [Sources]
[Packages]
MdePkg/MdePkg.dec
+ OvmfPkg/OvmfPkg.dec
UefiCpuPkg/UefiCpuPkg.dec
[BuildOptions]
*_*_IA32_NASMB_FLAGS = -I$(WORKSPACE)/UefiCpuPkg/ResetVector/Vtf0/
*_*_X64_NASMB_FLAGS = -I$(WORKSPACE)/UefiCpuPkg/ResetVector/Vtf0/
+
+[FixedPcd]
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase ## CONSUMES
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize ## CONSUMES
diff --git a/OvmfPkg/ResetVector/Ia32/PageTables64.asm b/OvmfPkg/ResetVector/Ia32/PageTables64.asm
index b5a4cf8d7187..25c9ebd5f73e 100644
--- a/OvmfPkg/ResetVector/Ia32/PageTables64.asm
+++ b/OvmfPkg/ResetVector/Ia32/PageTables64.asm
@@ -44,10 +44,8 @@ BITS 32
SetCr3ForPageTables64:
;
- ; For OVMF, build some initial page tables at 0x800000-0x806000.
- ;
- ; This range should match with PcdOvmfSecPageTablesBase and
- ; PcdOvmfSecPageTablesSize which are declared in the FDF files.
+ ; For OVMF, build some initial page tables at
+ ; PT_ADDR (0) .. PT_ADDR (0x6000).
;
; At the end of PEI, the pages tables will be rebuilt into a
; more permanent location by DxeIpl.
@@ -56,21 +54,21 @@ SetCr3ForPageTables64:
mov ecx, 6 * 0x1000 / 4
xor eax, eax
clearPageTablesMemoryLoop:
- mov dword[ecx * 4 + 0x800000 - 4], eax
+ mov dword[ecx * 4 + PT_ADDR (0) - 4], eax
loop clearPageTablesMemoryLoop
;
; Top level Page Directory Pointers (1 * 512GB entry)
;
- mov dword[0x800000], 0x801000 + PAGE_PDP_ATTR
+ mov dword[PT_ADDR (0)], PT_ADDR (0x1000) + PAGE_PDP_ATTR
;
; Next level Page Directory Pointers (4 * 1GB entries => 4GB)
;
- mov dword[0x801000], 0x802000 + PAGE_PDP_ATTR
- mov dword[0x801008], 0x803000 + PAGE_PDP_ATTR
- mov dword[0x801010], 0x804000 + PAGE_PDP_ATTR
- mov dword[0x801018], 0x805000 + PAGE_PDP_ATTR
+ mov dword[PT_ADDR (0x1000)], PT_ADDR (0x2000) + PAGE_PDP_ATTR
+ mov dword[PT_ADDR (0x1008)], PT_ADDR (0x3000) + PAGE_PDP_ATTR
+ mov dword[PT_ADDR (0x1010)], PT_ADDR (0x4000) + PAGE_PDP_ATTR
+ mov dword[PT_ADDR (0x1018)], PT_ADDR (0x5000) + PAGE_PDP_ATTR
;
; Page Table Entries (2048 * 2MB entries => 4GB)
@@ -81,13 +79,13 @@ pageTableEntriesLoop:
dec eax
shl eax, 21
add eax, PAGE_2M_PDE_ATTR
- mov [ecx * 8 + 0x802000 - 8], eax
+ mov [ecx * 8 + PT_ADDR (0x2000) - 8], eax
loop pageTableEntriesLoop
;
; Set CR3 now that the paging structures are available
;
- mov eax, 0x800000
+ mov eax, PT_ADDR (0)
mov cr3, eax
OneTimeCallRet SetCr3ForPageTables64
diff --git a/OvmfPkg/ResetVector/ResetVector.nasmb b/OvmfPkg/ResetVector/ResetVector.nasmb
index 31ac06ae4a8c..65f39a7d2d52 100644
--- a/OvmfPkg/ResetVector/ResetVector.nasmb
+++ b/OvmfPkg/ResetVector/ResetVector.nasmb
@@ -53,8 +53,16 @@
%include "Ia32/SearchForSecEntry.asm"
%ifdef ARCH_X64
-%include "Ia32/Flat32ToFlat64.asm"
-%include "Ia32/PageTables64.asm"
+ #include <AutoGen.h>
+
+ %if (FixedPcdGet32 (PcdOvmfSecPageTablesSize) != 0x6000)
+ %error "This implementation inherently depends on PcdOvmfSecPageTablesSize"
+ %endif
+
+ %define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Offset))
+
+ %include "Ia32/Flat32ToFlat64.asm"
+ %include "Ia32/PageTables64.asm"
%endif
%include "Ia16/Real16ToFlat32.asm"
--
2.9.2
prev parent reply other threads:[~2016-11-03 23:32 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-03 23:32 [PATCH v3 0/2] OvmfPkg/ResetVector: replace open-coded constants with fixed PCDs Laszlo Ersek
2016-11-03 23:32 ` [PATCH v3 1/2] OvmfPkg/ResetVector: remove unused file "ResetVectorCode.asm" Laszlo Ersek
2016-11-03 23:32 ` Laszlo Ersek [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161103233218.17073-3-lersek@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox