summaryrefslogtreecommitdiff
path: root/IntelFspPkg/FspSecCore
diff options
context:
space:
mode:
authorMa, Maurice <maurice.ma@intel.com>2015-04-29 03:10:24 +0000
committerjyao1 <jyao1@Edk2>2015-04-29 03:10:24 +0000
commit3b17b2458726bf7e2cf640d29ebe14f8af587905 (patch)
tree464090a50dabe9adb1f014067c6aa78349fab9ad /IntelFspPkg/FspSecCore
parent2bf87d82e95ed812504783468da26ea425b2a58b (diff)
downloadedk2-platforms-3b17b2458726bf7e2cf640d29ebe14f8af587905.tar.xz
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
Diffstat (limited to 'IntelFspPkg/FspSecCore')
-rw-r--r--IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm24
-rw-r--r--IntelFspPkg/FspSecCore/Ia32/FspApiEntry.s24
-rw-r--r--IntelFspPkg/FspSecCore/Ia32/FspHelper.asm8
-rw-r--r--IntelFspPkg/FspSecCore/Ia32/FspHelper.s5
4 files changed, 46 insertions, 15 deletions
diff --git a/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm b/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm
index 01b0bfab31..d736f80358 100644
--- a/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm
+++ b/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.asm
@@ -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
diff --git a/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.s b/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.s
index 1d8fe0bcd2..d0f5b20b96 100644
--- a/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.s
+++ b/IntelFspPkg/FspSecCore/Ia32/FspApiEntry.s
@@ -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
diff --git a/IntelFspPkg/FspSecCore/Ia32/FspHelper.asm b/IntelFspPkg/FspSecCore/Ia32/FspHelper.asm
index 51fd365c95..655481c14f 100644
--- a/IntelFspPkg/FspSecCore/Ia32/FspHelper.asm
+++ b/IntelFspPkg/FspSecCore/Ia32/FspHelper.asm
@@ -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 \ No newline at end of file
diff --git a/IntelFspPkg/FspSecCore/Ia32/FspHelper.s b/IntelFspPkg/FspSecCore/Ia32/FspHelper.s
index 40b822ac87..5d1bf74c30 100644
--- a/IntelFspPkg/FspSecCore/Ia32/FspHelper.s
+++ b/IntelFspPkg/FspSecCore/Ia32/FspHelper.s
@@ -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