mirror of https://github.com/acidanthera/audk.git
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:
parent
2bf87d82e9
commit
3b17b24587
|
@ -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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/** @file
|
||||
Intel FSP API definition from Intel Firmware Support Package External
|
||||
Architecture Specification, April 2014, revision 001.
|
||||
Architecture Specification v1.1, April 2015, revision 001.
|
||||
|
||||
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/** @file
|
||||
Intel FSP Info Header definition from Intel Firmware Support Package External
|
||||
Architecture Specification, April 2014, revision 001.
|
||||
Architecture Specification v1.1, April 2015, revision 001.
|
||||
|
||||
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/** @file
|
||||
Intel FSP Header File Guid definition from Intel Firmware Support Package External
|
||||
Architecture Specification, April 2014, revision 001.
|
||||
Architecture Specification v1.1, April 2015, revision 001.
|
||||
|
||||
Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/** @file
|
||||
Intel FSP Hob Guid definition from Intel Firmware Support Package External
|
||||
Architecture Specification, April 2014, revision 001.
|
||||
Architecture Specification v1.1, April 2015, revision 001.
|
||||
|
||||
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
|
|
|
@ -181,6 +181,17 @@ GetFspInfoHeader (
|
|||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
This function gets the FSP info header pointer from the API context.
|
||||
|
||||
@retval FspInfoHeader FSP info header pointer
|
||||
**/
|
||||
FSP_INFO_HEADER *
|
||||
EFIAPI
|
||||
GetFspInfoHeaderFromApiContext (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
This function gets the VPD data pointer.
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
// API Parameter +0x34
|
||||
// API return address +0x30
|
||||
//
|
||||
// push offset exit +0x2C
|
||||
// push FspInfoHeader +0x2C
|
||||
// pushfd +0x28
|
||||
// cli
|
||||
// pushad +0x24
|
||||
|
@ -47,7 +47,7 @@ typedef struct {
|
|||
UINT32 Ecx;
|
||||
UINT32 Eax;
|
||||
UINT16 Flags[2];
|
||||
UINT32 ExitOff;
|
||||
UINT32 FspInfoHeader;
|
||||
UINT32 ApiRet;
|
||||
UINT32 ApiParam;
|
||||
} CONTEXT_STACK;
|
||||
|
@ -331,6 +331,23 @@ GetFspInfoHeader (
|
|||
return GetFspGlobalDataPointer()->FspInfoHeader;
|
||||
}
|
||||
|
||||
/**
|
||||
This function gets the FSP info header pointer using the API stack context.
|
||||
|
||||
@retval FspInfoHeader FSP info header pointer using the API stack context
|
||||
**/
|
||||
FSP_INFO_HEADER *
|
||||
EFIAPI
|
||||
GetFspInfoHeaderFromApiContext (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
FSP_GLOBAL_DATA *FspData;
|
||||
|
||||
FspData = GetFspGlobalDataPointer ();
|
||||
return (FSP_INFO_HEADER *)(*(UINT32 *)(UINTN)(FspData->CoreStack + CONTEXT_STACK_OFFSET(FspInfoHeader)));
|
||||
}
|
||||
|
||||
/**
|
||||
This function gets the VPD data pointer.
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
|
||||
; Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
; This program and the accompanying materials
|
||||
; are licensed and made available under the terms and conditions of the BSD License
|
||||
; which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -28,7 +28,8 @@
|
|||
;------------------------------------------------------------------------------
|
||||
EXTERNDEF C MeasurePoint:PROC
|
||||
Pei2LoaderSwitchStack PROC C PUBLIC
|
||||
jmp Loader2PeiSwitchStack
|
||||
xor eax, eax
|
||||
jmp FspSwitchStack
|
||||
Pei2LoaderSwitchStack ENDP
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
|
@ -38,10 +39,21 @@ Pei2LoaderSwitchStack ENDP
|
|||
; VOID
|
||||
; )
|
||||
;------------------------------------------------------------------------------
|
||||
EXTERNDEF C SwapStack:PROC
|
||||
Loader2PeiSwitchStack PROC C PUBLIC
|
||||
jmp FspSwitchStack
|
||||
Loader2PeiSwitchStack ENDP
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; UINT32
|
||||
; EFIAPI
|
||||
; FspSwitchStack (
|
||||
; VOID
|
||||
; )
|
||||
;------------------------------------------------------------------------------
|
||||
EXTERNDEF C SwapStack:PROC
|
||||
FspSwitchStack PROC C PUBLIC
|
||||
; Save current contexts
|
||||
push offset exit
|
||||
push eax
|
||||
pushfd
|
||||
cli
|
||||
pushad
|
||||
|
@ -58,8 +70,8 @@ Loader2PeiSwitchStack PROC C PUBLIC
|
|||
add esp, 8
|
||||
popad
|
||||
popfd
|
||||
exit:
|
||||
add esp, 4
|
||||
ret
|
||||
Loader2PeiSwitchStack ENDP
|
||||
FspSwitchStack ENDP
|
||||
|
||||
END
|
||||
|
|
|
@ -25,20 +25,33 @@
|
|||
#------------------------------------------------------------------------------
|
||||
ASM_GLOBAL ASM_PFX(Pei2LoaderSwitchStack)
|
||||
ASM_PFX(Pei2LoaderSwitchStack):
|
||||
jmp ASM_PFX(Loader2PeiSwitchStack)
|
||||
xorl %eax, %eax
|
||||
jmp ASM_PFX(FspSwitchStack)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# UINT32
|
||||
# EFIAPI
|
||||
# Loader2PeiSwitchStack (
|
||||
# VOID
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_GLOBAL ASM_PFX(Loader2PeiSwitchStack)
|
||||
ASM_PFX(Loader2PeiSwitchStack):
|
||||
jmp ASM_PFX(FspSwitchStack)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# UINT32
|
||||
# EFIAPI
|
||||
# FspSwitchStack (
|
||||
# VOID
|
||||
# )
|
||||
#------------------------------------------------------------------------------
|
||||
ASM_GLOBAL ASM_PFX(FspSwitchStack)
|
||||
ASM_PFX(FspSwitchStack):
|
||||
#
|
||||
#Save current contexts
|
||||
#
|
||||
push $exit
|
||||
push %eax
|
||||
pushf
|
||||
cli
|
||||
pusha
|
||||
|
@ -59,7 +72,7 @@ ASM_PFX(Loader2PeiSwitchStack):
|
|||
add $0x08,%esp
|
||||
popa
|
||||
popf
|
||||
exit:
|
||||
add $0x04,%esp
|
||||
ret
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue