forked from tianocore/edk2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
IntelFsp2Pkg: Support Multi-Phase SiInit and debug handlers.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2698 To enhance FSP silicon initialization flexibility an optional Multi-Phase API is introduced and FSP header needs update for new API offset. Also new SecCore module created for FspMultiPhaseSiInit API New ARCH_UPD introduced for enhancing FSP debug message flexibility now bootloader can pass its own debug handler function pointer and FSP will call the function to handle debug message. To support calling bootloader functions, a FspGlobalData field added to indicate if FSP needs to switch stack when FSP running on separate stack from bootloader. Cc: Maurice Ma <[email protected]> Cc: Nate DeSimone <[email protected]> Cc: Star Zeng <[email protected]> Signed-off-by: Chasel Chiu <[email protected]> Reviewed-by: Nate DeSimone <[email protected]>
- Loading branch information
1 parent
ceacd9e
commit f2cdb26
Showing
11 changed files
with
352 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
## @file | ||
# Sec Core for FSP to support MultiPhase (SeparatePhase) SiInitialization. | ||
# | ||
# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> | ||
# | ||
# SPDX-License-Identifier: BSD-2-Clause-Patent | ||
# | ||
## | ||
|
||
[Defines] | ||
INF_VERSION = 0x00010005 | ||
BASE_NAME = Fsp22SecCoreS | ||
FILE_GUID = DF0FCD70-264A-40BF-BBD4-06C76DB19CB1 | ||
MODULE_TYPE = SEC | ||
VERSION_STRING = 1.0 | ||
|
||
# | ||
# The following information is for reference only and not required by the build tools. | ||
# | ||
# VALID_ARCHITECTURES = IA32 | ||
# | ||
|
||
[Sources] | ||
SecFspApiChk.c | ||
SecFsp.h | ||
|
||
[Sources.IA32] | ||
Ia32/Stack.nasm | ||
Ia32/Fsp22ApiEntryS.nasm | ||
Ia32/FspApiEntryCommon.nasm | ||
Ia32/FspHelper.nasm | ||
|
||
[Binaries.Ia32] | ||
RAW|Vtf0/Bin/ResetVec.ia32.raw |GCC | ||
|
||
[Packages] | ||
MdePkg/MdePkg.dec | ||
IntelFsp2Pkg/IntelFsp2Pkg.dec | ||
|
||
[LibraryClasses] | ||
BaseMemoryLib | ||
DebugLib | ||
BaseLib | ||
PciCf8Lib | ||
SerialPortLib | ||
FspSwitchStackLib | ||
FspCommonLib | ||
FspSecPlatformLib | ||
|
||
[Ppis] | ||
gEfiTemporaryRamSupportPpiGuid ## PRODUCES | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
;; @file | ||
; Provide FSP API entry points. | ||
; | ||
; Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> | ||
; SPDX-License-Identifier: BSD-2-Clause-Patent | ||
;; | ||
|
||
SECTION .text | ||
|
||
; | ||
; Following functions will be provided in C | ||
; | ||
extern ASM_PFX(FspApiCommon) | ||
extern ASM_PFX(FspMultiPhaseSiInitApiHandler) | ||
|
||
;---------------------------------------------------------------------------- | ||
; NotifyPhase API | ||
; | ||
; This FSP API will notify the FSP about the different phases in the boot | ||
; process | ||
; | ||
;---------------------------------------------------------------------------- | ||
global ASM_PFX(NotifyPhaseApi) | ||
ASM_PFX(NotifyPhaseApi): | ||
mov eax, 2 ; FSP_API_INDEX.NotifyPhaseApiIndex | ||
jmp ASM_PFX(FspApiCommon) | ||
|
||
;---------------------------------------------------------------------------- | ||
; FspSiliconInit API | ||
; | ||
; This FSP API initializes the CPU and the chipset including the IO | ||
; controllers in the chipset to enable normal operation of these devices. | ||
; | ||
;---------------------------------------------------------------------------- | ||
global ASM_PFX(FspSiliconInitApi) | ||
ASM_PFX(FspSiliconInitApi): | ||
mov eax, 5 ; FSP_API_INDEX.FspSiliconInitApiIndex | ||
jmp ASM_PFX(FspApiCommon) | ||
|
||
;---------------------------------------------------------------------------- | ||
; FspMultiPhaseSiInitApi API | ||
; | ||
; This FSP API provides multi-phase silicon initialization, which brings greater | ||
; modularity beyond the existing FspSiliconInit() API. | ||
; Increased modularity is achieved by adding an extra API to FSP-S. | ||
; This allows the bootloader to add board specific initialization steps throughout | ||
; the SiliconInit flow as needed. | ||
; | ||
;---------------------------------------------------------------------------- | ||
global ASM_PFX(FspMultiPhaseSiInitApi) | ||
ASM_PFX(FspMultiPhaseSiInitApi): | ||
mov eax, 6 ; FSP_API_INDEX.FspMultiPhaseSiInitApiIndex | ||
jmp ASM_PFX(FspApiCommon) | ||
|
||
;---------------------------------------------------------------------------- | ||
; FspApiCommonContinue API | ||
; | ||
; This is the FSP API common entry point to resume the FSP execution | ||
; | ||
;---------------------------------------------------------------------------- | ||
global ASM_PFX(FspApiCommonContinue) | ||
ASM_PFX(FspApiCommonContinue): | ||
; | ||
; Handle FspMultiPhaseSiInitApiIndex API | ||
; | ||
cmp eax, 6 | ||
jnz NotMultiPhaseSiInitApi | ||
|
||
pushad | ||
push DWORD [esp + (4 * 8 + 4)] ; push ApiParam | ||
push eax ; push ApiIdx | ||
call ASM_PFX(FspMultiPhaseSiInitApiHandler) | ||
add esp, 8 | ||
mov dword [esp + (4 * 7)], eax | ||
popad | ||
ret | ||
|
||
NotMultiPhaseSiInitApi: | ||
jmp $ | ||
ret | ||
|
||
;---------------------------------------------------------------------------- | ||
; TempRamInit API | ||
; | ||
; Empty function for WHOLEARCHIVE build option | ||
; | ||
;---------------------------------------------------------------------------- | ||
global ASM_PFX(TempRamInitApi) | ||
ASM_PFX(TempRamInitApi): | ||
jmp $ | ||
ret | ||
|
||
;---------------------------------------------------------------------------- | ||
; Module Entrypoint API | ||
;---------------------------------------------------------------------------- | ||
global ASM_PFX(_ModuleEntryPoint) | ||
ASM_PFX(_ModuleEntryPoint): | ||
jmp $ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.