ICE_TEA_BIOS/Board/Oem/L05AlderLakePMultiBoardPkg/CapsuleUpdate/BuildCapsule.bat
LCFC\AiXia.Jiang a870bff2f4 1.Frist commit
2022-09-30 14:59:06 +08:00

337 lines
12 KiB
Batchfile

@REM
@REM This bat file is used to generate EDK2 standard capsule image for Intel Chasm Falls
@REM
@REM ******************************************************************************
@REM * Copyright (c) 2020 - 2021, Insyde Software Corp. All Rights Reserved.
@REM *
@REM * You may not reproduce, distribute, publish, display, perform, modify, adapt,
@REM * transmit, broadcast, present, recite, release, license or otherwise exploit
@REM * any part of this publication in any form, by any means, without the prior
@REM * written permission of Insyde Software Corporation.
@REM *
@REM ******************************************************************************
@echo off
@REM ====================== ME setting ===============================
@REM
@REM ME_VERSION = 0xMMHHBBBB
@REM ex: Intel CSME 16.0.10.1450 -> 0x000A05AA
@REM
set ME_VERSION=0x000A05AA
@REM
@REM ESRT GUID:
@REM Adl_LP_Cons = 23192307-d667-4bdf-af1a-6059db171246
@REM Adl_LP_Corp = 4e78ce68-5389-4a95-bf10-e3568c30caf8
@REM Adl_H_Cons = 7aa69739-8f78-41cb-bf44-854e2cb516bd
@REM Adl_H_Corp = 347efe23-9f9a-4b26-b4db-e2414872dd14
@REM
set ME_ESRT_GUID=23192307-d667-4bdf-af1a-6059db171246
set ME_LSV=0x00000001
@REM ===================== Micdoeocde setting ========================
set SLOT_SIZE=0x3B000
set FW_VERSION=0x0002
set LSV=0x0001
set FW_VERSION_STRING="Version 0.0.0.2"
@REM
@REM UC0DE_MODE = (ucodefull | ucodeslot)
@REM If bios guard enable, the UC0DE_MODE only support ucodefull mode.
@REM
set UCODE_MODE=ucodefull
@REM =================================================================
@REM
@REM Environment setting
@REM
@set PROJECT_FOLDER=%WORKSPACE%\%PROJECT_REL_PATH%\%PROJECT_PKG%
@for /f "tokens=3" %%a in ('find "TARGET " %WORKSPACE%\Conf\target.txt') do set TARGET=%%a
@if exist %WORKSPACE%\Build\%PROJECT_PKG%\%TARGET%_%TOOL_CHAIN%\FV\Ffs (
@pushd %WORKSPACE%\Build\%PROJECT_PKG%\%TARGET%_%TOOL_CHAIN%\FV\Ffs
@dir /a:d /b > temp.log
@for /f "tokens=1" %%a in ('findstr "CAPSULEPAYLOADBIOS" temp.log') do rd /s /q %%a
@for /f "tokens=1" %%a in ('findstr "CAPSULEPAYLOADBTGACM" temp.log') do rd /s /q %%a
@del /q temp.log
@if exist CAPSULEPAYLOADBIOS.inf del /q CAPSULEPAYLOADBIOS.inf
@if exist FvAddress.inf del /q FvAddress.inf
@if exist CAPSULEPAYLOADBTGACM.inf del /q CAPSULEPAYLOADBTGACM.inf
@popd
)
@if not exist %WORKSPACE%\Build\%PROJECT_PKG%\%TARGET%_%TOOL_CHAIN% mkdir %WORKSPACE%\Build\%PROJECT_PKG%\%TARGET%_%TOOL_CHAIN%
set PLATFORMSAMPLE_PACKAGE=AlderLakePlatSamplePkg
set BUILD_BIOS_CAPSULE=FALSE
set BUILD_GEN1_CAPSULE=FALSE
set BUILD_GEN2_CAPSULE=FALSE
set BUILD_ME_CAPSULE=FALSE
set BUILD_BTGACM_CAPSULE=FALSE
set BIOS_GUARD_NEED=FALSE
@REM ============================= Main ==============================
@if /I "gen1" == "%1" (
set BUILD_GEN1_CAPSULE=TRUE
set BUILD_BIOS_CAPSULE=TRUE
goto GenCapsule
)else if /I "gen2" == "%1" (
set BUILD_GEN2_CAPSULE=TRUE
set BUILD_BIOS_CAPSULE=TRUE
goto GenCapsule
)else if /I "me" == "%1" (
set BUILD_ME_CAPSULE=TRUE
goto Setpath
)else if /I "ucode" == "%1" (
goto GenUcode
)else if /I "btgacm" == "%1" (
set BUILD_BTGACM_CAPSULE=TRUE
goto GenBtGAcm
)else if /I "btgacmbg" == "%1" (
set BUILD_BTGACM_CAPSULE=TRUE
set BIOS_GUARD_NEED=TRUE
set ERROR_OCCUR=FALSE
goto GenBtGAcm
)else (
goto CapsuleHelp
)
:GenBtGAcm
@REM
@REM Make BtGAcm binary 4K aligned for SPI flash update.
@REM
set FIRMWARE_BINARY=%PROJECT_FOLDER%\CapsuleUpdate\Binary
call %WORKSPACE%\%CHIPSET_REL_PATH%\%PLATFORMSAMPLE_PACKAGE%\Features\CapsuleUpdate\Tools\NewGenCap\PyScript\GenAligned.exe -a 4K -i %FIRMWARE_BINARY%\BIOSAC.bin -o %FIRMWARE_BINARY%\BtGAcm_pad.bin
if %BIOS_GUARD_NEED% EQU FALSE goto BtgAcmSkipBiosgaurd
set BIOSGUARD_SETTING_PATH=%PROJECT_FOLDER%\PlatformConfig\BiosGuard
set CHIPSET_PKG_TOOLS_PATH=%WORKSPACE%\%CHIPSET_REL_PATH%\AlderLakeChipsetPkg\Tools\Bin\Win32
@REM
@REM check Signtool exist.
@REM
set SIGNER_CHIPSET_PATH=%WORKSPACE%\%CHIPSET_REL_PATH%\%CHIPSET_PKG%\Tools\Bin\Win32\Signer
set SIGNER_PATH=DEVTLS\SignTool
set SIGNER_PRESET_PATH=C:\%SIGNER_PATH%;D:\%SIGNER_PATH%;E:\%SIGNER_PATH%;F:\%SIGNER_PATH%;G:\%SIGNER_PATH%;H:\%SIGNER_PATH%;%SIGNER_CHIPSET_PATH%
set PATH=%SIGNER_PRESET_PATH%;%PATH%
signtool /? 2>nul
if errorlevel 1 goto SignTool_NotFound
@REM
@REM Get information (BiosAcm Base Address and Padding file size)
@REM
for /f "tokens=3" %%a in ('find "BaseAddress" BtGAcmUpdateConfig.ini') do set BtgAcmBaseAddress=%%a
for /f "usebackq" %%A in ('%FIRMWARE_BINARY%\BtGAcm_pad.bin') do set BtgAcmLenght=%%~zA
cd %FIRMWARE_BINARY%
@REM
@REM Gen BiosGuard Header and Certificate
@REM
%CHIPSET_PKG_TOOLS_PATH%\GenBiosGuardHdr.exe -i %BIOSGUARD_SETTING_PATH%\BiosGuardSetting.ini -p %BIOSGUARD_SETTING_PATH%\BGSL\InsydeBiosGuardScript.bin -f %FIRMWARE_BINARY%\BtGAcm_pad.bin -m 5 -d %BtgAcmBaseAddress% -l %BtgAcmLenght% -o BtGAcm_BG_HDR.bin
Copy /y /b BtGAcm_BG_HDR.bin+BtGAcm_pad.bin BtgAcm_BG_Sign.bin
%CHIPSET_PKG_TOOLS_PATH%\Signer\iEFIFlashSigner.exe engineer -signbiosguard %FIRMWARE_BINARY%\BtgAcm_BG_Sign.bin -n "QA Certificate."
Copy /y /b %CHIPSET_PKG_TOOLS_PATH%\Signer\*_Sign.bin.p7.cer *_Sign.cer
if errorlevel 1 goto BGSignError
del %CHIPSET_PKG_TOOLS_PATH%\Signer\*_Sign.bin*
copy /y /b BtGAcm_BG_HDR.bin + BtgAcm_BG_Sign.cer BiosGuard_BtgAcm.bin
del BtGAcm_BG_*.*
cd ..
:BtgAcmSkipBiosgaurd
:GenCapsule
@echo.
@echo "#### Generate Chasm Falls capsule fv ####"
@echo.
@if %BUILD_GEN1_CAPSULE% EQU TRUE (
call genfds.exe ^
-f %PROJECT_PKG%\CapsuleUpdate\CapsulePkg.fdf ^
-p %PROJECT_PKG%\CapsuleUpdate\CapsulePkg.dsc ^
-i CapsulePayloadBios
)else if %BUILD_GEN2_CAPSULE% EQU TRUE (
call genfds.exe ^
-f %PROJECT_PKG%\CapsuleUpdate\CapsulePkgRes.fdf ^
-p %PROJECT_PKG%\CapsuleUpdate\CapsulePkgRes.dsc ^
-i CapsulePayloadBios
)else if %BUILD_BTGACM_CAPSULE% EQU TRUE (
@REM
@REM Update BtGAcmUpdateConfig.ini
@REM Prepare BtGAcm Payload.
@REM
if %BIOS_GUARD_NEED% EQU TRUE (
call %WORKSPACE%\%CHIPSET_REL_PATH%\%PLATFORMSAMPLE_PACKAGE%\Features\CapsuleUpdate\Tools\GenBiosUpdateImages\CapsuleRecoveryGen\SplitFv.exe btgaacmbgconfig -p %FIRMWARE_BINARY%\BtGAcm_pad.bin -b %FIRMWARE_BINARY%\BiosGuard_BtgAcm.bin -i BtGAcmUpdateConfig.ini
call genfds.exe ^
-f %PROJECT_PKG%\CapsuleUpdate\BtGAcm_BiosGuardCapsulePkg.fdf ^
-p %PROJECT_PKG%\CapsuleUpdate\BtGAcmCapsulePkg.dsc ^
-i CapsulePayloadBtGAcm
del %FIRMWARE_BINARY%\BiosGuard_BtgAcm.bin
)else (
call %WORKSPACE%\%CHIPSET_REL_PATH%\%PLATFORMSAMPLE_PACKAGE%\Features\CapsuleUpdate\Tools\GenBiosUpdateImages\CapsuleRecoveryGen\SplitFv.exe btgaacmconfig -p %FIRMWARE_BINARY%\BtGAcm_pad.bin -i BtGAcmUpdateConfig.ini
call genfds.exe ^
-f %PROJECT_PKG%\CapsuleUpdate\BtGAcmCapsulePkg.fdf ^
-p %PROJECT_PKG%\CapsuleUpdate\BtGAcmCapsulePkg.dsc ^
-i CapsulePayloadBtGAcm
)
)else (
@echo "Wrong cmd"
goto CapsuleBuildDone
)
:Setpath
@REM
@REM Set path
@REM
set TOOLS_PATH=%WORKSPACE%\%CHIPSET_REL_PATH%\%PLATFORMSAMPLE_PACKAGE%\Features\CapsuleUpdate\Tools\GenerateCapsule
set FIRMWARE_BINARY=%PROJECT_FOLDER%\CapsuleUpdate\Binary
@if %BUILD_BIOS_CAPSULE% EQU TRUE (
copy /y %WORKSPACE%\Build\%PROJECT_PKG%\%TARGET%_%TOOL_CHAIN%\FV\CAPSULEPAYLOADBIOS.Fv %TOOLS_PATH%\CapsulePayloadBios.fv > NUL
)
@if %BUILD_ME_CAPSULE% EQU TRUE (
set FIRMWARE_BINARY=%PROJECT_FOLDER%\CapsuleUpdate\Binary\FWUpdate.bin
)
@if %BUILD_BTGACM_CAPSULE% EQU TRUE (
copy /y %WORKSPACE%\Build\%PROJECT_PKG%\%TARGET%_%TOOL_CHAIN%\FV\CAPSULEPAYLOADBTGACM.Fv %TOOLS_PATH%\CapsulePayloadBtGAcm.fv > NUL
)
pushd %TOOLS_PATH%
@echo.
@echo "#### Sign capsule image ####"
@echo.
@REM @if not exist %SIGN_TOOL% (
@REM @echo.
@REM @echo "*****ERROR: No OpenSSL in %PLATFORMSAMPLE_PACKAGE%\Features\CapsuleUpdate\Tools\GenerateCapsule\OpenSSL. Fail to sign capsule image.*****"
@REM goto EndGenCapsule
@REM )
@REM
@REM Sign Bios capsule
@REM
@if %BUILD_BIOS_CAPSULE% EQU TRUE (
call GenCapsuleSysFwBios.bat CAPSULEPAYLOADBIOS.Fv %TOOLS_PATH%
@if %BUILD_GEN1_CAPSULE% EQU TRUE (
copy /y SystemFwBios.Cap %PROJECT_FOLDER%\CapsuleUpdate\OutPut\SystemFwBiosGen1.Cap > NUL
)
@if %BUILD_GEN2_CAPSULE% EQU TRUE (
copy /y SystemFwBios.Cap %PROJECT_FOLDER%\CapsuleUpdate\OutPut\SystemFwBiosGen2.Cap > NUL
)
if exist CapsulePayloadBios.fv del CapsulePayloadBios.fv
if exist SystemFwBios.Cap del SystemFwBios.Cap
@REM
@REM Sign ME capsule
@REM
)else if %BUILD_ME_CAPSULE% EQU TRUE (
@if not exist %FIRMWARE_BINARY% (
@echo.
@echo "*****ERROR: No FWUpdate.bin in %PROJECT_PKG%\CapsuleUpdate\Binary. Fail to sign ME capsule image.*****"
goto EndGenCapsule
)
call GenCapsuleSysFwMe.bat %FIRMWARE_BINARY% %ME_VERSION% %ME_ESRT_GUID% %ME_LSV% %TOOLS_PATH%
copy /y SystemMeFw.Cap %PROJECT_FOLDER%\CapsuleUpdate\OutPut > NUL
if exist SystemMeFw.Cap del SystemMeFw.Cap
@REM
@REM Sign BtG ACM capsule
@REM
)else if %BUILD_BTGACM_CAPSULE% EQU TRUE (
call GenCapsuleSysFwBtGAcm.bat CapsulePayloadBtGAcm.Fv %TOOLS_PATH%
copy /y SystemFwBtGAcm.Cap %PROJECT_FOLDER%\CapsuleUpdate\OutPut > NUL
if exist CapsulePayloadBtGAcm.fv del CapsulePayloadBtGAcm.fv
if exist SystemFwBtGAcm.Cap del SystemFwBtGAcm.Cap
@REM
@REM Error
@REM
)else (
@echo "Wrong cmd"
goto CapsuleBuildDone
)
:EndGenCapsule
popd
goto CapsuleBuildDone
:GenUcode
set TOOLS_PATH=%WORKSPACE%\%CHIPSET_REL_PATH%\%PLATFORMSAMPLE_PACKAGE%\Features\CapsuleUpdate\Tools\GenerateCapsule
set MICROCODE_TOOLS_PATH=%WORKSPACE%\%CHIPSET_REL_PATH%\%PLATFORMSAMPLE_PACKAGE%\Features\CapsuleUpdate\Tools\NewGenCap
set MICROCODE_PATH=%PROJECT_PKG%\CapsuleUpdate\Binary
set WORKSPACE_PLATFORM=%WORKSPACE%\%PROJECT_REL_PATH%
set PROJECT_BOARD_PACKAGE=%PROJECT_REL_PATH%\%PROJECT_PKG%
pushd %MICROCODE_TOOLS_PATH%
call NewGenCap.exe
popd
@REM
@REM UcodeFullModeFv.bin is Insyde ucode FV image with full mode.
@REM UcodeSlotModeFv.bin is Insyde ucode FV image with slot mode.
@REM
cd Temp
if %UCODE_MODE% == ucodefull (
copy /y XdrMicrocodeFv.data %PROJECT_FOLDER%\CapsuleUpdate\OutPut\UcodeFullModeFv.bin > NUL
) else if %UCODE_MODE% == ucodeslot (
copy /y XdrSlotVersionXdrSlotuCodeArray.data %PROJECT_FOLDER%\CapsuleUpdate\OutPut\UcodeSlotModeFv.bin > NUL
)
@REM
@REM BiosGuardUcodeFv.bin is Insyde ucode FV image with bios guard enable.
@REM Put this binary to %PROJECT_FOLDER%\PlatformConfig\BiosGuard,
@REM and run BiosGuardImage.bat to generate ucode FV image with bios guard header.
@REM
cd FV
if %UCODE_MODE% == ucodefull (
copy /y CAPSULEPAYLOADUCODE.Fv %PROJECT_FOLDER%\CapsuleUpdate\OutPut\BiosGuardUcodeFv.bin > NUL
)
cd ..
cd ..
if exist Temp rd /s /q Temp
pushd Binary
if exist *.mcb_backup del *.mcb /q
if exist *.mcb_backup ren *.mcb_backup *.mcb
if exist MicrocodeVersion.data del MicrocodeVersion.data /q
popd
goto CapsuleBuildDone
:BGSignError
del %PROJECT_FOLDER%\CapsuleUpdate\Binary\*_BG_*.bin
echo.
echo !!! ERROR !!!
echo Create Capsule with Bios Guard process has been terminated
echo Please check iEFIFlashSigner.exe command is correct in BuildCapsule.bat
echo !!! ERROR !!!
echo.
pushd %PROJECT_FOLDER%\CapsuleUpdate
goto CapsuleBuildDone
:SignTool_NotFound
start /WAIT %PROJECT_FOLDER%\CautionSiger.bat
echo.
echo "!!! ERROR !!! Create capsule image process has been terminated due to SignTool is missing!"
echo.
exit /b
:CapsuleHelp
@echo.
@echo. Generate Edk2 capsule image.
@echo Run ProjectBuild.bat to initialize environment.
@echo Cmd: BuildCapsule.bat [target:gen1/gen2/me/ucode/btgacm/btgacmbg]
@echo target Assign Capsule build target: gen1/gen2/me/ucode/btgacm/btgacmbg
@echo gen1 : Build Intel GEN1 BIOS Capsule
@echo gen2 : Build Intel GEN2 BIOS Capsule
@echo me : Build Intel ME Capsule
@echo ucode : Build Intel Ucode Capsule and Insyde Ucode payload
@echo btgacm : Build Intel BtG ACM Capsule
@echo btgacmbg : Build Intel BtG ACM Capsule with Bios Guard
@echo.
:CapsuleBuildDone