From e78223628741b988c3a26baade6b684ac27492a7 Mon Sep 17 00:00:00 2001 From: "Yao, Jiewen" Date: Mon, 16 Nov 2015 08:07:58 +0000 Subject: Do not deadloop if Microcode not found in FspTempRamInit. We do not consider microcode not found as critical error, because Microcode might be applied later. (Sync patch r18678 from main trunk.) Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Yao, Jiewen" Reviewed-by: "Ma, Maurice" Reviewed-by: "Rangarajan, Ravi P" git-svn-id: https://svn.code.sf.net/p/edk2/code/branches/UDK2015@18809 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.S | 10 ++++++++++ .../Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.S b/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.S index 24bc36b9c4..c0b84e075c 100644 --- a/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.S +++ b/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.S @@ -210,12 +210,22 @@ FspHeaderFound: jmp *%eax TempRamInitDone: + cmp $0x8000000E, %eax #Check if EFI_NOT_FOUND returned. Error code for Microcode Update not found. + je CallSecFspInit #If microcode not found, don't hang, but continue. + cmp $0x0, %eax jnz FspApiFailed # ECX: start of range # EDX: end of range +CallSecFspInit: + xorl %eax, %eax movl %edx, %esp + + # Align the stack at DWORD + addl $3, %esp + andl $0xFFFFFFFC, %esp + pushl %edx pushl %ecx pushl %eax # zero - no hob list yet diff --git a/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm b/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm index 0e0c5c5883..3c2e43a89c 100644 --- a/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm +++ b/IntelFspWrapperPkg/Library/SecPeiFspPlatformSecLibSample/Ia32/SecEntry.asm @@ -220,12 +220,22 @@ FspHeaderFound: jmp eax TempRamInitDone: - cmp eax, 0 + cmp eax, 8000000Eh ;Check if EFI_NOT_FOUND returned. Error code for Microcode Update not found. + je CallSecFspInit ;If microcode not found, don't hang, but continue. + + cmp eax, 0 ;Check if EFI_SUCCESS retuned. jnz FspApiFailed ; ECX: start of range ; EDX: end of range +CallSecFspInit: + xor eax, eax mov esp, edx + + ; Align the stack at DWORD + add esp, 3 + and esp, 0FFFFFFFCh + push edx push ecx push eax ; zero - no hob list yet -- cgit v1.2.3