Topics

回复: [edk2-devel] [Patch V2 1/1] Tools\FitGen: Add extra parameter to input the Higher Flash Address


gaoliming
 

Chinni:
Can you introduce the real usage case with this enhancement? After this
case, how will you use FitGen tool in your case?

Thanks
Liming
-----邮件原件-----
发件人: bounce+27952+65439+4905953+8761045@groups.io
<bounce+27952+65439+4905953+8761045@groups.io> 代表 cbduggap
发送时间: 2020年9月22日 18:36
收件人: devel@edk2.groups.io
抄送: cbduggap <chinni.b.duggapu@...>; Bob Feng
<bob.c.feng@...>; Liming Gao <gaoliming@...>
主题: [edk2-devel] [Patch V2 1/1] Tools\FitGen: Add extra parameter to
input the
Higher Flash Address

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2981

Add extra parameter to the Fit Gen Tool to input the Higher Address.
Default Address should be 4GB and if some one inputs new address,
tool must consume that address instead of Default address (4GB).

Signed-off-by: cbduggap <chinni.b.duggapu@...>
Cc: Bob Feng <bob.c.feng@...>
Cc: Liming Gao <gaoliming@...>
---
Silicon/Intel/Tools/FitGen/FitGen.c | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/Silicon/Intel/Tools/FitGen/FitGen.c
b/Silicon/Intel/Tools/FitGen/FitGen.c
index c4006e69c8..c17a0fabc0 100644
--- a/Silicon/Intel/Tools/FitGen/FitGen.c
+++ b/Silicon/Intel/Tools/FitGen/FitGen.c
@@ -209,10 +209,12 @@ typedef struct {
#define DEFAULT_FIT_TABLE_POINTER_OFFSET 0x40

#define DEFAULT_FIT_ENTRY_VERSION 0x0100



+#define HIGHER_FLASH_ADDRESS
(gFitTableContext.HigherAddressRemapValue)

+

#define MEMORY_TO_FLASH(FileBuffer, FvBuffer, FvSize) \

- (UINTN)(0x100000000 - ((UINTN)(FvBuffer) +
(UINTN)(FvSize) - (UINTN)(FileBuffer)))

+ (UINTN)(HIGHER_FLASH_ADDRESS - ((UINTN)(FvBuffer) +
(UINTN)(FvSize) - (UINTN)(FileBuffer)))

#define FLASH_TO_MEMORY(Address, FvBuffer, FvSize) \

- (VOID *)(UINTN)((UINTN)(FvBuffer) + (UINTN)(FvSize) -
(0x100000000 - (UINTN)(Address)))

+ (VOID *)(UINTN)((UINTN)(FvBuffer) + (UINTN)(FvSize) -
(HIGHER_FLASH_ADDRESS - (UINTN)(Address)))



#define FIT_TABLE_TYPE_HEADER 0

#define FIT_TABLE_TYPE_MICROCODE 1

@@ -268,6 +270,7 @@ typedef struct {
UINT32 MicrocodeVersion;

FIT_TABLE_CONTEXT_ENTRY OptionalModule[MAX_OPTIONAL_ENTRY];

FIT_TABLE_CONTEXT_ENTRY PortModule[MAX_PORT_ENTRY];

+ UINT64 HigherAddressRemapValue;

} FIT_TABLE_CONTEXT;



FIT_TABLE_CONTEXT gFitTableContext = {0};

@@ -330,6 +333,7 @@ Returns:
"\t[-F <FitTablePointerOffset>] [-F <FitTablePointerOffset>]
[-V
<FitHeaderVersion>]\n"

"\t[-NA]\n"

"\t[-A <MicrocodeAlignment>]\n"

+ "\t[-REMAP <FlashHigherAddress>\n"

"\t[-CLEAR]\n"

"\t[-L <MicrocodeSlotSize> <MicrocodeFfsGuid>]\n"

"\t[-I <BiosInfoGuid>]\n"

@@ -986,6 +990,21 @@ Returns:
Index += 2;

}



+ if ((Index >= argc) ||

+ ((strcmp (argv[Index], "-REMAP") == 0) ||

+ (strcmp (argv[Index], "-remap") == 0)) ) {

+ //

+ // by pass

+ //

+ gFitTableContext.HigherAddressRemapValue = xtoi (argv[Index + 1]);

+ Index += 2;

+ } else {

+ //

+ // no remapping

+ //

+ gFitTableContext.HigherAddressRemapValue = 0x100000000;

+ }

+ printf ("Higher Address Value : 0x%llx\n",
gFitTableContext.HigherAddressRemapValue);

//

// 0.4 Clear FIT table related memory

//

--
2.26.2.windows.1



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#65439): https://edk2.groups.io/g/devel/message/65439
Mute This Topic: https://groups.io/mt/77010246/4905953
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub
[gaoliming@...]
-=-=-=-=-=-=


cbduggap
 

Use case :

For Boot from Block device feature, As Block device is not Memory mapped, we need some agent to load the Initial firmware to Host memory. CSE takes care of it by mapping CSE internal SRAM to host memory of 4GB to 4 GB – 256 KB.

Boot from Block Configuration Host Memory Map :

 

 

Current Implementation

Future Recommendation

POC on Current Implementation

CSE Mapped host memory

 

4GB to 4GB – 256 KB

 

 

4GB to 4GB – 512KB

4GB to 4GB – 256 KB

 

BIOS Flash Map Definition

4GB to 4GB – 256 KB à Empty Firmware volume (hole in flash map)

4GB – 256KB to 4GB – 10 MB ( BIOS Firmware Volumes)

4GB to 4GB – 512KB à Empty Firmware volume (hole in flash map)

4GB – 512 KB to 4GB – 10 MB ( BIOS Firmware Volumes)

Eliminate the Empty Firmware volume /hole in flash memory.

(by shifting flash range by 256 KB as shown below)

Flash Map range

4GB to 4GB – 10 MB

For 10 MB BIOS.

4GB to 4GB – 10 MB

For 10 MB BIOS.

4GB – 256 KB to 4GB – 10 MB – 256 KB

For 10 MB BIOS

 


Below is the usage of this addition. 
@if "%BFX_BUILD%" == "TRUE" (
%WORKSPACE_PLATFORM%\%PLATFORM_FULL_PACKAGE%\Tools\FitGen_Split_Boot\FitGen.exe ^
-D ^
%BUILD_DIR%\FV\ClientBios.fd ^
%BUILD_DIR%\FV\ClientBios.fd ^
-F 0x40 ^
-NA ^
-REMAP 0xFFF80000 ^
-L %SLOT_SIZE% %MICROCODE_ARRAY_FFS_GUID% ^
-I %BIOS_INFO_GUID% ^
%STARTUP_AC_PARA% ^
-O 0x0C RESERVE 0x600 ^
-O 0x0B RESERVE 0x400 ^
-P 0xA 0x70 0x71 0x1 0x4 0x2a
)
%STARTUP_AC_PARA% ^
-O 0x0C RESERVE 0x600 ^
-O 0x0B RESERVE 0x400 ^
-P 0xA 0x70 0x71 0x1 0x4 0x2a