public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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


  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