From: "Chiu, Chasel" <chasel.chiu@intel.com>
To: "Kuo, Ted" <ted.kuo@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Desimone, Nathaniel L" <nathaniel.l.desimone@intel.com>,
"Zeng, Star" <star.zeng@intel.com>,
"S, Ashraf Ali" <ashraf.ali.s@intel.com>
Subject: Re: [edk2-devel][PATCH v2] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64
Date: Tue, 15 Mar 2022 03:13:00 +0000 [thread overview]
Message-ID: <BN9PR11MB54839A61C84031BF519E4E7AE6109@BN9PR11MB5483.namprd11.prod.outlook.com> (raw)
In-Reply-To: <71ee0d36a35875749f163abb4d301da63ec0853a.1647226063.git.ted.kuo@intel.com>
Thanks Ted for updating patch! Looks good to me.
Reviewed-by: Chasel Chiu <chasel.chiu@intel.com>
> -----Original Message-----
> From: Kuo, Ted <ted.kuo@intel.com>
> Sent: Monday, March 14, 2022 10:48 AM
> To: devel@edk2.groups.io
> Cc: Chiu, Chasel <chasel.chiu@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Zeng, Star <star.zeng@intel.com>; S, Ashraf
> Ali <ashraf.ali.s@intel.com>
> Subject: [edk2-devel][PATCH v2] IntelFsp2Pkg: BaseFspSwitchStackLib Support
> for X64
>
> REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3832
> Add BaseFspSwitchStackLib Support for X64.
>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Cc: Star Zeng <star.zeng@intel.com>
> Cc: Ashraf Ali S <ashraf.ali.s@intel.com>
> Signed-off-by: Ted Kuo <ted.kuo@intel.com>
> ---
> IntelFsp2Pkg/Include/PushPopRegsNasm.inc | 67 ++++++++++++++++++++
> .../BaseFspSwitchStackLib.inf | 5 +-
> .../BaseFspSwitchStackLib/FspSwitchStackLib.c | 8 +--
> .../Library/BaseFspSwitchStackLib/X64/Stack.nasm | 72
> ++++++++++++++++++++++
> 4 files changed, 147 insertions(+), 5 deletions(-) create mode 100644
> IntelFsp2Pkg/Include/PushPopRegsNasm.inc
> create mode 100644
> IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm
>
> diff --git a/IntelFsp2Pkg/Include/PushPopRegsNasm.inc
> b/IntelFsp2Pkg/Include/PushPopRegsNasm.inc
> new file mode 100644
> index 0000000000..ec103940d8
> --- /dev/null
> +++ b/IntelFsp2Pkg/Include/PushPopRegsNasm.inc
> @@ -0,0 +1,67 @@
> +;----------------------------------------------------------------------
> +--------
> +;
> +; Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> ;
> +SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Abstract:
> +;
> +; Provide macro to push/pop registers in X64
> +;
> +;----------------------------------------------------------------------
> +--------
> +
> +;-----------------------------------------------------------------------------
> +; Macro: PUSHA_64
> +;
> +; Description: Saves all registers on stack ;
> +; Input: None
> +;
> +; Output: None
> +;-----------------------------------------------------------------------------
> +%macro PUSHA_64 0
> + push r8
> + push r9
> + push r10
> + push r11
> + push r12
> + push r13
> + push r14
> + push r15
> + push rax
> + push rcx
> + push rdx
> + push rbx
> + push rsp
> + push rbp
> + push rsi
> + push rdi
> +%endmacro
> +
> +;-----------------------------------------------------------------------------
> +; Macro: POPA_64
> +;
> +; Description: Restores all registers from stack ;
> +; Input: None
> +;
> +; Output: None
> +;-----------------------------------------------------------------------------
> +%macro POPA_64 0
> + pop rdi
> + pop rsi
> + pop rbp
> + pop rsp
> + pop rbx
> + pop rdx
> + pop rcx
> + pop rax
> + pop r15
> + pop r14
> + pop r13
> + pop r12
> + pop r11
> + pop r10
> + pop r9
> + pop r8
> +%endmacro
> +
> diff --git
> a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf
> b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf
> index 3dcf3b9598..6909aec651 100644
> --- a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf
> +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.i
> +++ nf
> @@ -15,12 +15,15 @@
> VERSION_STRING = 1.0
> LIBRARY_CLASS = FspSwitchStackLib
>
> -[Sources.IA32]
> +[Sources]
> FspSwitchStackLib.c
>
> [Sources.IA32]
> Ia32/Stack.nasm
>
> +[Sources.X64]
> + X64/Stack.nasm
> +
> [Packages]
> MdePkg/MdePkg.dec
> IntelFsp2Pkg/IntelFsp2Pkg.dec
> diff --git a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c
> b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c
> index 618c25c3b0..dae4e27172 100644
> --- a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c
> +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/FspSwitchStackLib.c
> @@ -20,16 +20,16 @@
>
>
> **/
> -UINT32
> +UINTN
> SwapStack (
> - IN UINT32 NewStack
> + IN UINTN NewStack
> )
> {
> FSP_GLOBAL_DATA *FspData;
> - UINT32 OldStack;
> + UINTN OldStack;
>
> FspData = GetFspGlobalDataPointer ();
> OldStack = FspData->CoreStack;
> - FspData->CoreStack = NewStack;
> + FspData->CoreStack = (UINTN) NewStack;
> return OldStack;
> }
> diff --git a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm
> b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm
> new file mode 100644
> index 0000000000..bd36fe4b8b
> --- /dev/null
> +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm
> @@ -0,0 +1,72 @@
> +;----------------------------------------------------------------------
> +--------
> +;
> +; Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> ;
> +SPDX-License-Identifier: BSD-2-Clause-Patent ; ; Abstract:
> +;
> +; Switch the stack from temporary memory to permanent memory.
> +;
> +;----------------------------------------------------------------------
> +--------
> +
> + SECTION .text
> +
> +%include "PushPopRegsNasm.inc"
> +
> +extern ASM_PFX(SwapStack)
> +
> +;----------------------------------------------------------------------
> +--------
> +; UINT32
> +; EFIAPI
> +; Pei2LoaderSwitchStack (
> +; VOID
> +; )
> +;----------------------------------------------------------------------
> +--------
> +global ASM_PFX(Pei2LoaderSwitchStack)
> +ASM_PFX(Pei2LoaderSwitchStack):
> + xor rax, rax
> + jmp ASM_PFX(FspSwitchStack)
> +
> +;----------------------------------------------------------------------
> +--------
> +; UINT32
> +; EFIAPI
> +; Loader2PeiSwitchStack (
> +; VOID
> +; )
> +;----------------------------------------------------------------------
> +--------
> +global ASM_PFX(Loader2PeiSwitchStack)
> +ASM_PFX(Loader2PeiSwitchStack):
> + jmp ASM_PFX(FspSwitchStack)
> +
> +;----------------------------------------------------------------------
> +--------
> +; UINT32
> +; EFIAPI
> +; FspSwitchStack (
> +; VOID
> +; )
> +;----------------------------------------------------------------------
> +--------
> +global ASM_PFX(FspSwitchStack)
> +ASM_PFX(FspSwitchStack):
> + ; Save current contexts
> + push rdx ; ApiParam2
> + push rcx ; ApiParam1
> + push rax ; FspInfoHeader
> + pushfq
> + cli
> + PUSHA_64
> + sub rsp, 16
> + sidt [rsp]
> +
> + ; Load new stack
> + mov rcx, rsp
> + call ASM_PFX(SwapStack)
> + mov rsp, rax
> +
> + ; Restore previous contexts
> + lidt [rsp]
> + add rsp, 16
> + POPA_64
> + popfq
> + add rsp, 24 ; FspInfoHeader + ApiParam[2]
> + ret
> +
> --
> 2.16.2.windows.1
prev parent reply other threads:[~2022-03-15 3:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-14 2:48 [edk2-devel][PATCH v2] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Kuo, Ted
2022-03-15 3:13 ` Chiu, Chasel [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=BN9PR11MB54839A61C84031BF519E4E7AE6109@BN9PR11MB5483.namprd11.prod.outlook.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