Add dual FSP binaries support.
There are two FSP images at different locations in a flash (one factory version is read only and other in updatable version) TempRamInit, FspMemoryInit and TempRamExit are executed from factory version and FspSiliconInit/NotifyPhase will be executed from updatable version. Also update FSP specification version to v1.1. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Ma, Maurice" <maurice.ma@intel.com> Reviewed-by: "Yao, Jiewen" <Jiewen.Yao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17248 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -38,8 +38,9 @@ EXTERN FspApiCallingCheck:PROC
|
||||
; Following functions will be provided in PlatformSecLib
|
||||
;
|
||||
EXTERN GetFspBaseAddress:PROC
|
||||
EXTERN GetFspInfoHdr:PROC
|
||||
EXTERN GetBootFirmwareVolumeOffset:PROC
|
||||
EXTERN Pei2LoaderSwitchStack:PROC
|
||||
EXTERN Loader2PeiSwitchStack:PROC
|
||||
EXTERN LoadMicrocode(LoadMicrocodeDefault):PROC
|
||||
EXTERN SecPlatformInit(SecPlatformInitDefault):PROC
|
||||
EXTERN SecCarInit:PROC
|
||||
@@ -370,8 +371,7 @@ TempRamInitApi PROC NEAR PUBLIC
|
||||
jz NemInitExit
|
||||
|
||||
;
|
||||
; CPUID/DeviceID check
|
||||
; and Sec Platform Init
|
||||
; Sec Platform Init
|
||||
;
|
||||
CALL_MMX SecPlatformInit
|
||||
cmp eax, 0
|
||||
@@ -505,7 +505,9 @@ FspApiCommon PROC C PUBLIC
|
||||
jz @F
|
||||
cmp eax, 3 ; FspMemoryInit API
|
||||
jz @F
|
||||
jmp Pei2LoaderSwitchStack
|
||||
|
||||
call GetFspInfoHdr
|
||||
jmp Loader2PeiSwitchStack
|
||||
|
||||
@@:
|
||||
;
|
||||
@@ -513,9 +515,17 @@ FspApiCommon PROC C PUBLIC
|
||||
;
|
||||
|
||||
;
|
||||
; Store the address in FSP which will return control to the BL
|
||||
; Place holder to store the FspInfoHeader pointer
|
||||
;
|
||||
push offset exit
|
||||
push eax
|
||||
|
||||
;
|
||||
; Update the FspInfoHeader pointer
|
||||
;
|
||||
push eax
|
||||
call GetFspInfoHdr
|
||||
mov [esp + 4], eax
|
||||
pop eax
|
||||
|
||||
;
|
||||
; Create a Task Frame in the stack for the Boot Loader
|
||||
@@ -582,7 +592,7 @@ FspApiCommon PROC C PUBLIC
|
||||
; Pass Control into the PEI Core
|
||||
;
|
||||
call SecStartup
|
||||
|
||||
add esp, 4
|
||||
exit:
|
||||
ret
|
||||
|
||||
|
@@ -215,8 +215,10 @@ ASM_GLOBAL ASM_PFX(FspApiCallingCheck)
|
||||
#
|
||||
# Following functions will be provided in PlatformSecLib
|
||||
#
|
||||
ASM_GLOBAL ASM_PFX(GetFspBaseAddress)
|
||||
ASM_GLOBAL ASM_PFX(GetFspInfoHdr)
|
||||
ASM_GLOBAL ASM_PFX(GetBootFirmwareVolumeOffset)
|
||||
ASM_GLOBAL ASM_PFX(Pei2LoaderSwitchStack)
|
||||
ASM_GLOBAL ASM_PFX(Loader2PeiSwitchStack)
|
||||
|
||||
|
||||
#
|
||||
@@ -561,8 +563,7 @@ ASM_PFX(TempRamInitApi):
|
||||
jz NemInitExit
|
||||
|
||||
#
|
||||
# CPUID/DeviceID check
|
||||
# and Sec Platform Init
|
||||
# Sec Platform Init
|
||||
#
|
||||
movl $TempRamInitApiL1, %esi #CALL_MMX SecPlatformInit
|
||||
movd %esi, %mm7
|
||||
@@ -717,7 +718,8 @@ FspApiCommonL1:
|
||||
jz FspApiCommonL2
|
||||
cmpl $0x03, %eax # FspMemoryInit API
|
||||
jz FspApiCommonL2
|
||||
jmp Pei2LoaderSwitchStack
|
||||
call ASM_PFX(GetFspInfoHdr)
|
||||
jmp Loader2PeiSwitchStack
|
||||
|
||||
FspApiCommonL2:
|
||||
#
|
||||
@@ -725,9 +727,17 @@ FspApiCommonL2:
|
||||
#
|
||||
|
||||
#
|
||||
# Store the address in FSP which will return control to the BL
|
||||
# Place holder to store the FspInfoHeader pointer
|
||||
#
|
||||
pushl $FspApiCommonExit
|
||||
pushl %eax
|
||||
|
||||
#
|
||||
# Update the FspInfoHeader pointer
|
||||
#
|
||||
pushl %eax
|
||||
call ASM_PFX(GetFspInfoHdr)
|
||||
movl %eax, 4(%esp)
|
||||
popl %eax
|
||||
|
||||
#
|
||||
# Create a Task Frame in the stack for the Boot Loader
|
||||
@@ -796,7 +806,7 @@ FspApiCommonL2:
|
||||
# Pass Control into the PEI Core
|
||||
#
|
||||
call ASM_PFX(SecStartup)
|
||||
|
||||
addl $4, %esp
|
||||
FspApiCommonExit:
|
||||
ret
|
||||
|
||||
|
@@ -15,7 +15,7 @@
|
||||
.model flat,C
|
||||
.code
|
||||
|
||||
FspInfoHeaderRelativeOff PROC NEAR PRIVATE
|
||||
FspInfoHeaderRelativeOff PROC NEAR PUBLIC
|
||||
;
|
||||
; This value will be pached by the build script
|
||||
;
|
||||
@@ -30,4 +30,10 @@ GetFspBaseAddress PROC NEAR PUBLIC
|
||||
ret
|
||||
GetFspBaseAddress ENDP
|
||||
|
||||
GetFspInfoHdr PROC NEAR PUBLIC
|
||||
mov eax, GetFspBaseAddress
|
||||
sub eax, dword ptr [FspInfoHeaderRelativeOff]
|
||||
ret
|
||||
GetFspInfoHdr ENDP
|
||||
|
||||
END
|
@@ -31,3 +31,8 @@ ASM_PFX(GetFspBaseAddress):
|
||||
mov (%eax), %eax
|
||||
ret
|
||||
|
||||
ASM_GLOBAL ASM_PFX(GetFspInfoHdr)
|
||||
ASM_PFX(GetFspInfoHdr):
|
||||
mov $GetFspBaseAddress, %eax
|
||||
sub $FspInfoHeaderRelativeOff, %eax
|
||||
ret
|
||||
|
Reference in New Issue
Block a user