From: Laszlo Ersek <lersek@redhat.com>
To: "Marvin Häuser" <Marvin.Haeuser@outlook.com>,
"edk2-devel@lists.01.org" <edk2-devel@ml01.01.org>
Cc: "jordan.l.justen@intel.com" <jordan.l.justen@intel.com>
Subject: Re: [PATCH v4] OvmfPkg/ResetVector: Depend on PCD values of the page tables.
Date: Fri, 4 Nov 2016 23:27:48 +0100 [thread overview]
Message-ID: <53f2a4d0-84b6-6831-9f13-6e1b53d4303a@redhat.com> (raw)
In-Reply-To: <AM5PR0601MB2579D0C2643D8E5DAE2A386980A20@AM5PR0601MB2579.eurprd06.prod.outlook.com>
On 11/04/16 14:32, Marvin Häuser wrote:
> Currently, the value of the page tables' address is hard-coded in the
> ResetVector. This patch replaces these values with a PCD dependency.
>
> A check for the size has 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>
> ---
> OvmfPkg/ResetVector/Ia32/PageTables64.asm | 23 ++++++++++----------
> OvmfPkg/ResetVector/ResetVector.inf | 5 +++++
> OvmfPkg/ResetVector/ResetVector.nasmb | 7 ++++++
> 3 files changed, 24 insertions(+), 11 deletions(-)
>
> diff --git a/OvmfPkg/ResetVector/Ia32/PageTables64.asm b/OvmfPkg/ResetVector/Ia32/PageTables64.asm
> index b5a4cf8d7187..6201cad1f5dc 100644
> --- a/OvmfPkg/ResetVector/Ia32/PageTables64.asm
> +++ b/OvmfPkg/ResetVector/Ia32/PageTables64.asm
> @@ -44,10 +44,11 @@ BITS 32
> SetCr3ForPageTables64:
>
> ;
> - ; For OVMF, build some initial page tables at 0x800000-0x806000.
> + ; For OVMF, build some initial page tables at
> + ; PcdOvmfSecPageTablesBase - (PcdOvmfSecPageTablesBase + 0x6000).
> ;
> - ; This range should match with PcdOvmfSecPageTablesBase and
> - ; PcdOvmfSecPageTablesSize which are declared in the FDF files.
> + ; This range should match with PcdOvmfSecPageTablesSize which is
> + ; declared in the FDF files.
> ;
> ; At the end of PEI, the pages tables will be rebuilt into a
> ; more permanent location by DxeIpl.
> @@ -56,21 +57,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 +82,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.inf b/OvmfPkg/ResetVector/ResetVector.inf
> index 46610d243ecf..d1e5d4d9bdea 100644
> --- a/OvmfPkg/ResetVector/ResetVector.inf
> +++ b/OvmfPkg/ResetVector/ResetVector.inf
> @@ -29,9 +29,14 @@ [Sources]
> ResetVector.nasmb
>
> [Packages]
> + OvmfPkg/OvmfPkg.dec
> MdePkg/MdePkg.dec
> UefiCpuPkg/UefiCpuPkg.dec
>
> [BuildOptions]
> *_*_IA32_NASMB_FLAGS = -I$(WORKSPACE)/UefiCpuPkg/ResetVector/Vtf0/
> *_*_X64_NASMB_FLAGS = -I$(WORKSPACE)/UefiCpuPkg/ResetVector/Vtf0/
> +
> +[Pcd]
> + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase
> + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
> diff --git a/OvmfPkg/ResetVector/ResetVector.nasmb b/OvmfPkg/ResetVector/ResetVector.nasmb
> index 31ac06ae4a8c..29cbad367711 100644
> --- a/OvmfPkg/ResetVector/ResetVector.nasmb
> +++ b/OvmfPkg/ResetVector/ResetVector.nasmb
> @@ -53,6 +53,13 @@
> %include "Ia32/SearchForSecEntry.asm"
>
> %ifdef ARCH_X64
> + #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
>
I compared this patch to the one that I worked out / simplified from
your v2 patch and posted as our shared v3:
https://lists.01.org/pipermail/edk2-devel/2016-November/004140.html
The differences are cosmetic.
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
I could commit & push this now (I could even find the energy in me for
that), but I'd like Jordan to okay the patch as well, in this form.
Thanks!
Laszlo
next prev parent reply other threads:[~2016-11-04 22:27 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-04 13:32 [PATCH v4] OvmfPkg/ResetVector: Depend on PCD values of the page tables Marvin Häuser
2016-11-04 22:27 ` Laszlo Ersek [this message]
2016-11-04 22:38 ` Jordan Justen
2016-11-04 22:50 ` Laszlo Ersek
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=53f2a4d0-84b6-6831-9f13-6e1b53d4303a@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