From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web12.22799.1644768197714598826 for ; Sun, 13 Feb 2022 08:03:18 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=USuDYVeo; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: ashraf.ali.s@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1644768197; x=1676304197; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=xa2U4tIa87Ju1aaqdMocSPh4goUJ112uUGPSjv53S5g=; b=USuDYVeoWZwsTzRTlc6OGGnJXzbhnKIm5PLd6EfKifgEVnkdc7bqiv8J QjlyxWgP8MIAE7pgflI192sF5JrqnWi0h/KkM3RNqzK0Q6u3yEJwtA8oG 11ijr44DcSmaf9B1TA+ZY0F1NrxnFEWkwfhpZXXMryNEDx19fEh4JEp8D pmOSh8yL/4PH2DEzGcP1QOuaxFMXeJ8ccjFiuxZew/wBUtakMhhgMSf6n T2qkCn201dsEsXwN1CwXwbqCVz8LB0omvm9+8I3Q4pQbELkbG8uI+h8ZG jpQvwLZBEHKkNqJSA9i2l+cwvLo3yrNi1N/HpNz/RcUpXAgmpOS3wfZ2O g==; X-IronPort-AV: E=McAfee;i="6200,9189,10256"; a="247551819" X-IronPort-AV: E=Sophos;i="5.88,365,1635231600"; d="scan'208";a="247551819" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Feb 2022 08:03:16 -0800 X-IronPort-AV: E=Sophos;i="5.88,365,1635231600"; d="scan'208";a="631636605" Received: from basfe004.gar.corp.intel.com ([10.66.129.57]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Feb 2022 08:03:13 -0800 From: "Ashraf Ali S" To: devel@edk2.groups.io Cc: Ashraf Ali S , Chasel Chiu , Nate DeSimone , Star Zeng , Kuo Ted , Duggapu Chinni B , Rangasai V Chaganty , Digant H Solanki , Sangeetha V Subject: [PATCH] IntelFsp2Pkg: BaseFspSwitchStackLib Support for X64 Build Date: Sun, 13 Feb 2022 21:31:45 +0530 Message-Id: <1854878485cb78c405c11f72e6ca7363587cac73.1644768023.git.ashraf.ali.s@intel.com> X-Mailer: git-send-email 2.30.2.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3832 BaseFspSwitchStackLib Currently Support for IA32 build only, adding support for X64 build, fix typecasting issues for X64 build. 0xFFFF_FFFF will be replaced by MAX_ADDRESS which is set based on the type of Library which is it building. if it's a IA32 MAX_ADDRESS = 0xFFFF_FFFF for X64 MAX_ADDRESS = 0xFFFF_FFFF_FFFF_FFFFULL Cc: Chasel Chiu Cc: Nate DeSimone Cc: Star Zeng Cc: Kuo Ted Cc: Duggapu Chinni B Cc: Rangasai V Chaganty Cc: Digant H Solanki Cc: Sangeetha V Signed-off-by: Ashraf Ali S --- IntelFsp2Pkg/FspSecCore/SecFsp.h | 3 +- IntelFsp2Pkg/FspSecCore/SecFspApiChk.c | 10 +- .../BaseFspSwitchStackLib.inf | 7 +- .../BaseFspSwitchStackLib/X64/Stack.nasm | 124 ++++++++++++++++++ 4 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm diff --git a/IntelFsp2Pkg/FspSecCore/SecFsp.h b/IntelFsp2Pkg/FspSecCore/SecFsp.h index aacd32f7f7..9a6fc14d23 100644 --- a/IntelFsp2Pkg/FspSecCore/SecFsp.h +++ b/IntelFsp2Pkg/FspSecCore/SecFsp.h @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -10,6 +10,7 @@ #include #include +#include #include #include #include diff --git a/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c b/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c index 7d6ef11fe7..b70d3ffcf1 100644 --- a/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c +++ b/IntelFsp2Pkg/FspSecCore/SecFspApiChk.c @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.
+ Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -31,7 +31,7 @@ FspApiCallingCheck ( // // NotifyPhase check // - if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) { + if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS)) { Status = EFI_UNSUPPORTED; } else { if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) { @@ -42,7 +42,7 @@ FspApiCallingCheck ( // // FspMemoryInit check // - if ((UINT32)FspData != 0xFFFFFFFF) { + if ((UINTN)FspData != MAX_ADDRESS) { Status = EFI_UNSUPPORTED; } else if (EFI_ERROR (FspUpdSignatureCheck (ApiIdx, ApiParam))) { Status = EFI_INVALID_PARAMETER; @@ -51,7 +51,7 @@ FspApiCallingCheck ( // // TempRamExit check // - if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) { + if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS)) { Status = EFI_UNSUPPORTED; } else { if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) { @@ -62,7 +62,7 @@ FspApiCallingCheck ( // // FspSiliconInit check // - if ((FspData == NULL) || ((UINT32)FspData == 0xFFFFFFFF)) { + if ((FspData == NULL) || ((UINTN)FspData == MAX_ADDRESS)) { Status = EFI_UNSUPPORTED; } else { if (FspData->Signature != FSP_GLOBAL_DATA_SIGNATURE) { diff --git a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf index 3dcf3b9598..cd7d89e43a 100644 --- a/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/BaseFspSwitchStackLib.inf @@ -1,7 +1,7 @@ ## @file # Instance of BaseFspSwitchStackLib # -# Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -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/X64/Stack.nasm b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm new file mode 100644 index 0000000000..f94f39fc13 --- /dev/null +++ b/IntelFsp2Pkg/Library/BaseFspSwitchStackLib/X64/Stack.nasm @@ -0,0 +1,124 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2022, Intel Corporation. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Abstract: +; +; Switch the stack from temporary memory to permanent memory. +; +;------------------------------------------------------------------------------ + + SECTION .text + +extern ASM_PFX(SwapStack) + +;----------------------------------------------------------------------------- +; Macro: PUSHA_64 +; +; Description: Saves all registers on stack +; +; Input: None +; +; Output: None +;----------------------------------------------------------------------------- +%macro PUSHA_64 0 + push rsp + push rbp + push rax + push rbx + push rcx + push rdx + push rsi + push rdi + push r8 + push r9 + push r10 + push r11 + push r12 + push r13 + push r14 + push r15 +%endmacro + +;----------------------------------------------------------------------------- +; Macro: POPA_64 +; +; Description: Restores all registers from stack +; +; Input: None +; +; Output: None +;----------------------------------------------------------------------------- +%macro POPA_64 0 + pop r15 + pop r14 + pop r13 + pop r12 + pop r11 + pop r10 + pop r9 + pop r8 + pop rdi + pop rsi + pop rdx + pop rcx + pop rbx + pop rax + pop rbp + pop rsp +%endmacro + +;------------------------------------------------------------------------------ +; 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 rax + pushfq + cli + PUSHA_64 + sub esp, 8 + sidt [esp] + + ; Load new stack + mov rcx, rsp + call ASM_PFX(SwapStack) + mov rsp, rax + + ; Restore previous contexts + lidt [esp] + add esp, 8 + POPA_64 + popfq + add esp, 4 + ret + -- 2.30.2.windows.1