Browse Source

UefiCpuPkg: Update BFV searching algorithm in VTF0

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3870
The new algorithm searches FFS3 GUID first and then FFS2 GUID at
every 4KB address in the top 16MB just below 4GB.

Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Debkumar De <debkumar.de@intel.com>
Cc: Harry Han <harry.han@intel.com>
Cc: Catharine West <catharine.west@intel.com>
Reviewed-by: Min Xu <min.m.xu@intel.com>
Signed-off-by: Ted Kuo <ted.kuo@intel.com>
Kuo, Ted 2 years ago
parent
commit
3ef2071927

BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/IA32/ResetVector.ia32.port80.raw


BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/IA32/ResetVector.ia32.raw


BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/IA32/ResetVector.ia32.serial.raw


BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/X64/PageTable1G/ResetVector.x64.port80.raw


BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/X64/PageTable1G/ResetVector.x64.raw


BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/X64/PageTable1G/ResetVector.x64.serial.raw


BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/X64/PageTable2M/ResetVector.x64.port80.raw


BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/X64/PageTable2M/ResetVector.x64.raw


BIN
UefiCpuPkg/ResetVector/Vtf0/Bin/X64/PageTable2M/ResetVector.x64.serial.raw


+ 6 - 15
UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForBfvBase.asm

@@ -2,7 +2,7 @@
 ; @file
 ; Search for the Boot Firmware Volume (BFV) base address
 ;
-; Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.<BR>
+; Copyright (c) 2008 - 2022, Intel Corporation. All rights reserved.<BR>
 ; SPDX-License-Identifier: BSD-2-Clause-Patent
 ;
 ;------------------------------------------------------------------------------
@@ -32,7 +32,6 @@ BITS    32
 Flat32SearchForBfvBase:
 
     xor     eax, eax
-    mov     ecx, 3    ; 3: FFS3 GUID, 2: FFS2 GUID, 1: Not Found
 searchingForBfvHeaderLoop:
     ;
     ; We check for a firmware volume at every 4KB address in the top 16MB
@@ -40,21 +39,19 @@ searchingForBfvHeaderLoop:
     ;
     sub     eax, 0x1000
     cmp     eax, 0xff000000
-    jb      searchingForBfvWithOtherFfsGuid
-    cmp     ecx, 3
-    jne     searchingForFfs2Guid
+    jb      searchedForBfvHeaderButNotFound
 
     ;
     ; Check FFS3 GUID
     ;
     cmp     dword [eax + 0x10], FFS3_GUID_DWORD0
-    jne     searchingForBfvHeaderLoop
+    jne     searchingForFfs2Guid
     cmp     dword [eax + 0x14], FFS3_GUID_DWORD1
-    jne     searchingForBfvHeaderLoop
+    jne     searchingForFfs2Guid
     cmp     dword [eax + 0x18], FFS3_GUID_DWORD2
-    jne     searchingForBfvHeaderLoop
+    jne     searchingForFfs2Guid
     cmp     dword [eax + 0x1c], FFS3_GUID_DWORD3
-    jne     searchingForBfvHeaderLoop
+    jne     searchingForFfs2Guid
     jmp     checkingFvLength
 
 searchingForFfs2Guid:
@@ -82,12 +79,6 @@ checkingFvLength:
 
     jmp     searchedForBfvHeaderAndItWasFound
 
-searchingForBfvWithOtherFfsGuid:
-    xor     eax, eax
-    dec     ecx
-    cmp     ecx, 1
-    jne     searchingForBfvHeaderLoop
-
 searchedForBfvHeaderButNotFound:
     ;
     ; Hang if the SEC entry point was not found