public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Laszlo Ersek" <lersek@redhat.com>
To: devel@edk2.groups.io, anthony.perard@citrix.com
Cc: Jordan Justen <jordan.l.justen@intel.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Julien Grall <julien.grall@arm.com>,
	xen-devel@lists.xenproject.org
Subject: Re: [edk2-devel] [PATCH v2 08/31] OvmfPkg/XenResetVector: Allow to jumpstart from either hvmloader or PVH
Date: Thu, 11 Apr 2019 13:19:27 +0200	[thread overview]
Message-ID: <b4e0fced-13c4-1038-b325-7f9f46eb599d@redhat.com> (raw)
In-Reply-To: <20190409110844.14746-9-anthony.perard@citrix.com>

On 04/09/19 13:08, Anthony PERARD wrote:
> This patch allows the ResetVector to be run indenpendently from build
> time addresses.
> 
> The goal of the patch is to avoid having to create RAM just below 4G
> when creating a Xen PVH guest while been compatible with the way

(1) s/been/being/

> hvmloader currently load OVMF, just below 4G.
> 
> Only the new PVH entry point will do the calculation.
> 
> The ResetVector will figure out its current running address by creating
> a temporary stack, make a call and calculate the difference between the
> build time address and the address at run time.
> 
> This patch copies and make the necessary modification to some other asm
> files:
> - copy of UefiCpuPkg/.../Flat32ToFlat64.asm:
>   Allow Transition32FlatTo64Flat to been runnned from anywhere in memory

(2) s/been runned/be run/

> _ copy of UefiCpuPkg/../SearchForBfvBase.asm:

(3) please replace the underscore (_) with a hyphen (-)

>   Add a extra parameter to indicate where to start the search for the
>   boot firmware volume.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
>  OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm                                    |  3 ++
>  {UefiCpuPkg/ResetVector/Vtf0 => OvmfPkg/XenResetVector}/Ia32/Flat32ToFlat64.asm   | 25 ++++++++++++++--
>  {UefiCpuPkg/ResetVector/Vtf0 => OvmfPkg/XenResetVector}/Ia32/SearchForBfvBase.asm | 19 +++++++++----
>  OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm                                        | 30 ++++++++++++++++++--
>  4 files changed, 66 insertions(+), 11 deletions(-)

(4) For the subject line: please drop the word "to".

With those:

Acked-by: Laszlo Ersek <lersek@redhat.com>

Thanks
Laszlo

> 
> diff --git a/OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm b/OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm
> index e22e92c8a6..eebced6ced 100644
> --- a/OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm
> +++ b/OvmfPkg/XenResetVector/Ia16/Real16ToFlat32.asm
> @@ -61,6 +61,9 @@ jumpTo32BitAndLandHere:
>      mov     gs, ax
>      mov     ss, ax
>  
> +    ; parameter for Flat32SearchForBfvBase
> +    xor     eax, eax ; Start searching from top of 4GB for BfvBase
> +
>      OneTimeCallRet TransitionFromReal16To32BitFlat
>  
>  ALIGN   2
> diff --git a/UefiCpuPkg/ResetVector/Vtf0/Ia32/Flat32ToFlat64.asm b/OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm
> similarity index 69%
> copy from UefiCpuPkg/ResetVector/Vtf0/Ia32/Flat32ToFlat64.asm
> copy to OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm
> index 5b6b375330..ca03ea43e0 100644
> --- a/UefiCpuPkg/ResetVector/Vtf0/Ia32/Flat32ToFlat64.asm
> +++ b/OvmfPkg/XenResetVector/Ia32/Flat32ToFlat64.asm
> @@ -3,6 +3,8 @@
>  ; Transition from 32 bit flat protected mode into 64 bit flat protected mode
>  ;
>  ; Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
> +; Copyright (c) 2019, Citrix Systems, Inc.
> +;
>  ; This program and the accompanying materials
>  ; are licensed and made available under the terms and conditions of the BSD License
>  ; which accompanies this distribution.  The full text of the license may be found at
> @@ -16,7 +18,7 @@
>  BITS    32
>  
>  ;
> -; Modified:  EAX
> +; Modified:  EAX, EBX, ECX, EDX, ESP
>  ;
>  Transition32FlatTo64Flat:
>  
> @@ -35,10 +37,29 @@ Transition32FlatTo64Flat:
>      bts     eax, 31                     ; set PG
>      mov     cr0, eax                    ; enable paging
>  
> -    jmp     LINEAR_CODE64_SEL:ADDR_OF(jumpTo64BitAndLandHere)
> +    ; backup ESP
> +    mov     ebx, esp
> +
> +    ;; recalculate delta
> +    mov     esp, PVH_SPACE(16)
> +    call    .delta
> +.delta:
> +    pop     edx
> +    sub     edx, ADDR_OF(.delta)
> +
> +    ; push return addr and seg to the stack, then return far
> +    push    dword LINEAR_CODE64_SEL
> +    mov     eax, ADDR_OF(jumpTo64BitAndLandHere)
> +    add     eax, edx ; add delta
> +    push    eax
> +    retf
> +
>  BITS    64
>  jumpTo64BitAndLandHere:
>  
> +    ; restore ESP
> +    mov     esp, ebx
> +
>      debugShowPostCode POSTCODE_64BIT_MODE
>  
>      OneTimeCallRet Transition32FlatTo64Flat
> diff --git a/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForBfvBase.asm b/OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm
> similarity index 83%
> copy from UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForBfvBase.asm
> copy to OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm
> index d0c2d8c39c..0519e05601 100644
> --- a/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForBfvBase.asm
> +++ b/OvmfPkg/XenResetVector/Ia32/SearchForBfvBase.asm
> @@ -3,6 +3,8 @@
>  ; Search for the Boot Firmware Volume (BFV) base address
>  ;
>  ; Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.<BR>
> +; Copyright (c) 2019, Citrix Systems, Inc.
> +;
>  ; This program and the accompanying materials
>  ; are licensed and made available under the terms and conditions of the BSD License
>  ; which accompanies this distribution.  The full text of the license may be found at
> @@ -23,22 +25,26 @@
>  BITS    32
>  
>  ;
> -; Modified:  EAX, EBX
> +; Modified:  EAX, EBX, ECX
>  ; Preserved: EDI, ESP
>  ;
> +; @param[in]   EAX  Start search from here
>  ; @param[out]  EBP  Address of Boot Firmware Volume (BFV)
>  ;
>  Flat32SearchForBfvBase:
>  
> -    xor     eax, eax
> +    mov     ecx, eax
>  searchingForBfvHeaderLoop:
>      ;
> -    ; We check for a firmware volume at every 4KB address in the top 16MB
> -    ; just below 4GB.  (Addresses at 0xffHHH000 where H is any hex digit.)
> +    ; We check for a firmware volume at every 4KB address in the 16MB
> +    ; just below where we started, ECX.
>      ;
>      sub     eax, 0x1000
> -    cmp     eax, 0xff000000
> -    jb      searchedForBfvHeaderButNotFound
> +    mov     ebx, ecx
> +    sub     ebx, eax
> +    cmp     ebx, 0x01000000
> +    ; if ECX-EAX > 16MB; jump notfound
> +    ja      searchedForBfvHeaderButNotFound
>  
>      ;
>      ; Check FFS GUID
> @@ -59,6 +65,7 @@ searchingForBfvHeaderLoop:
>      jne     searchingForBfvHeaderLoop
>      mov     ebx, eax
>      add     ebx, dword [eax + 0x20]
> +    cmp     ebx, ecx
>      jnz     searchingForBfvHeaderLoop
>  
>      jmp     searchedForBfvHeaderAndItWasFound
> diff --git a/OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm b/OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
> index 4e55b0ac1f..612b2e9c44 100644
> --- a/OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
> +++ b/OvmfPkg/XenResetVector/Ia32/XenPVHMain.asm
> @@ -19,22 +19,39 @@ BITS    32
>  xenPVHMain:
>      mov     di, 'BP'
>  
> -    ; ESP -  Initial value of the EAX register (BIST: Built-in Self Test)
> -    mov     esp, eax
> +    ; EBP -  Initial value of the EAX register (BIST: Built-in Self Test)
> +    mov     ebp, eax
>  
>      ;; Store "Start of day" struct pointer for later use
>      mov     dword[PVH_SPACE (0)], ebx
>      mov     dword[PVH_SPACE (4)], 'XPVH'
>  
> +    ;; calculate delta between build-addr and run position
> +    mov     esp, PVH_SPACE(16)          ; create a temporary stack
> +    call    .delta
> +.delta:
> +    pop     edx                         ; get addr of .delta
> +    sub     edx, ADDR_OF(.delta)        ; calculate delta
> +
>      cli
>  
> +    ;; Find address of GDT and gdtr and fix the later
>      mov     ebx, ADDR_OF(gdtr)
> +    add     ebx, edx                    ; add delta gdtr
> +    mov     eax, ADDR_OF(GDT_BASE)
> +    add     eax, edx                    ; add delta to GDT_BASE
> +    mov     dword[ebx + 2], eax         ; fix GDT_BASE addr in gdtr
>      lgdt    [ebx]
>  
>      mov     eax, SEC_DEFAULT_CR0
>      mov     cr0, eax
>  
> -    jmp     LINEAR_CODE_SEL:ADDR_OF(.jmpToNewCodeSeg)
> +    ;; push return addr to the stack, then return far
> +    push    dword LINEAR_CODE_SEL       ; segment to select
> +    mov     eax, ADDR_OF(.jmpToNewCodeSeg) ; return addr
> +    add     eax, edx                    ; add delta to return addr
> +    push    eax
> +    retf
>  .jmpToNewCodeSeg:
>  
>      mov     eax, SEC_DEFAULT_CR4
> @@ -47,5 +64,12 @@ xenPVHMain:
>      mov     gs, ax
>      mov     ss, ax
>  
> +    ; ESP -  Initial value of the EAX register (BIST: Built-in Self Test)
> +    mov     esp, ebp
> +
> +    ; parameter for Flat32SearchForBfvBase
> +    mov     eax, ADDR_OF(fourGigabytes)
> +    add     eax, edx ; add delta
> +
>      ; return to the Main16
>      OneTimeCallRet TransitionFromReal16To32BitFlat
> 


  reply	other threads:[~2019-04-11 11:19 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-09 11:08 [PATCH v2 00/31] Specific platform to run OVMF in Xen PVH and HVM guests Anthony PERARD
2019-04-09 11:08 ` [PATCH v2 01/31] OvmfPkg/ResetSystemLib: Add missing dependency on PciLib Anthony PERARD
2019-04-10  8:48   ` [edk2-devel] " Laszlo Ersek
2019-04-10  9:16     ` Jordan Justen
2019-04-09 11:08 ` [PATCH v2 02/31] OvmfPkg: Create platform XenOvmf Anthony PERARD
2019-04-10  9:32   ` [edk2-devel] " Laszlo Ersek
2019-04-15 10:53     ` Anthony PERARD
2019-04-10  9:48   ` Jordan Justen
2019-04-10 14:27     ` Laszlo Ersek
2019-04-10 16:27       ` Ard Biesheuvel
2019-04-10 18:37       ` Jordan Justen
2019-04-11  7:34         ` Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 03/31] OvmfPkg: Introduce XenResetVector Anthony PERARD
2019-04-10  9:46   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 04/31] OvmfPkg: Introduce XenPlatformPei Anthony PERARD
2019-04-10 10:37   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 05/31] OvmfPkg/XenOvmf: Creating an ELF header Anthony PERARD
2019-04-11 10:43   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 06/31] OvmfPkg/XenResetVector: Add new entry point for Xen PVH Anthony PERARD
2019-04-11 10:49   ` [edk2-devel] " Laszlo Ersek
2019-04-11 12:52   ` [Xen-devel] " Andrew Cooper
2019-04-15 11:25     ` Anthony PERARD
2019-04-15 13:28       ` Andrew Cooper
2019-04-09 11:08 ` [PATCH v2 07/31] OvmfPkg/XenResetVector: Saving start of day pointer for PVH guests Anthony PERARD
2019-04-11 11:09   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 08/31] OvmfPkg/XenResetVector: Allow to jumpstart from either hvmloader or PVH Anthony PERARD
2019-04-11 11:19   ` Laszlo Ersek [this message]
2019-04-09 11:08 ` [PATCH v2 09/31] OvmfPkg/XenOvmf: use a TimerLib instance that depends only on the CPU Anthony PERARD
2019-04-11 11:25   ` [edk2-devel] " Laszlo Ersek
2019-04-11 11:33     ` Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 10/31] OvmfPkg/XenPlatformPei: Detect OVMF_INFO from hvmloader Anthony PERARD
2019-04-11 11:47   ` [edk2-devel] " Laszlo Ersek
2019-04-11 11:47     ` Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 11/31] OvmfPkg/XenPlatformPei: Use mXenHvmloaderInfo to get E820 Anthony PERARD
2019-04-11 11:49   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 12/31] OvmfPkg/XenPlatformPei: Grab RSDP from PVH guest start of day struct Anthony PERARD
2019-04-11 11:58   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 13/31] OvmfPkg/Library/XenPlatformLib: New library Anthony PERARD
2019-04-11 12:10   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 14/31] OvmfPkg/AcpiPlatformDxe: Use PVH RSDP if exist Anthony PERARD
2019-04-11 12:20   ` [edk2-devel] " Laszlo Ersek
2019-04-11 12:23     ` Laszlo Ersek
2019-04-11 12:31       ` Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 15/31] OvmfPkg/XenHypercallLib: Enable it in PEIM Anthony PERARD
2019-04-12  9:07   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 16/31] OvmfPkg/XenPlatformPei: Introduce XenHvmloaderDetected Anthony PERARD
2019-04-12  9:08   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 17/31] OvmfPkg/XenPlatformPei: Reserve hvmloader's memory only when it as runned Anthony PERARD
2019-04-12  9:09   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 18/31] OvmfPkg/XenPlatformPei: Setup HyperPages earlier Anthony PERARD
2019-04-12  9:17   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 19/31] OvmfPkg/XenPlatformPei: Introduce XenPvhDetected Anthony PERARD
2019-04-12  9:20   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 20/31] OvmfPkg: Import XENMEM_memory_map hypercall to Xen/memory.h Anthony PERARD
2019-04-12  9:22   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 21/31] OvmfPkg/XenPlatformPei: Get E820 table via hypercall Anthony PERARD
2019-04-12  9:33   ` [edk2-devel] " Laszlo Ersek
2019-04-12  9:45     ` [Xen-devel] " Andrew Cooper
2019-04-09 11:08 ` [PATCH v2 22/31] OvmfPkg/XenPlatformPei: Rework memory detection Anthony PERARD
2019-04-12 11:15   ` [edk2-devel] " Laszlo Ersek
2019-04-15 13:42     ` Anthony PERARD
2019-04-09 11:08 ` [PATCH v2 23/31] OvmfPkg/XenPlatformPei: Reserve VGA memory region, to boot Linux Anthony PERARD
2019-04-15 13:21   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 24/31] OvmfPkg/XenPlatformPei: Ignore missing PCI Host Bridge on Xen PVH Anthony PERARD
2019-04-15 13:29   ` [edk2-devel] " Laszlo Ersek
2019-04-15 13:33     ` Laszlo Ersek
2019-04-15 13:37   ` [Xen-devel] " Andrew Cooper
2019-04-09 11:08 ` [PATCH v2 25/31] OvmfPkg/PlatformBootManagerLib: Handle the absence of PCI bus " Anthony PERARD
2019-04-15 13:33   ` [edk2-devel] " Laszlo Ersek
2019-04-15 13:49     ` Laszlo Ersek
2019-04-15 14:40       ` Anthony PERARD
2019-04-15 17:57         ` Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 26/31] OvmfPkg/XenOvmf: Override PcdFSBClock to Xen vLAPIC timer frequency Anthony PERARD
2019-04-15 13:52   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 27/31] OvmfPkg/XenOvmf: Introduce XenTimerDxe Anthony PERARD
2019-04-15 14:07   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 28/31] OvmfPkg/PlatformBootManagerLib: Use a Xen console for ConOut/ConIn Anthony PERARD
2019-04-15 14:56   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 29/31] OvmfPkg: Introduce XenIoPvhDxe to initialize Grant Tables Anthony PERARD
2019-04-16  8:49   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 30/31] OvmfPkg: Move XenRealTimeClockLib from ArmVirtPkg Anthony PERARD
2019-04-16  8:53   ` [edk2-devel] " Laszlo Ersek
2019-04-09 11:08 ` [PATCH v2 31/31] OvmfPkg/XenOvmf: use RealTimeClockRuntimeDxe from EmbeddedPkg Anthony PERARD
2019-04-16  8:58   ` [edk2-devel] " 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=b4e0fced-13c4-1038-b325-7f9f46eb599d@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