[QEMU] Add setup support for CFGDATA
This patch added required changes to support SBL setup for QEMU. To enable this, set 'self.ENABLE_SBL_SETUP = 1' in BoardConfig.py. In QEMU command line, use '-boot order=a' to trigger launching Setup instead of normal boot flow. Signed-off-by: Maurice Ma <maurice.ma@intel.com>
This commit is contained in:
parent
d6a4598869
commit
bf24ae424b
|
@ -62,6 +62,7 @@ class Board(BaseBoard):
|
||||||
self.ENABLE_CRYPTO_SHA_OPT = 0
|
self.ENABLE_CRYPTO_SHA_OPT = 0
|
||||||
|
|
||||||
self.ENABLE_SMBIOS = 1
|
self.ENABLE_SMBIOS = 1
|
||||||
|
self.ENABLE_SBL_SETUP = 0
|
||||||
|
|
||||||
self.CPU_MAX_LOGICAL_PROCESSOR_NUMBER = 255
|
self.CPU_MAX_LOGICAL_PROCESSOR_NUMBER = 255
|
||||||
|
|
||||||
|
@ -109,6 +110,7 @@ class Board(BaseBoard):
|
||||||
self.VARIABLE_SIZE = 0x00002000
|
self.VARIABLE_SIZE = 0x00002000
|
||||||
self.SBLRSVD_SIZE = 0x00001000
|
self.SBLRSVD_SIZE = 0x00001000
|
||||||
self.FWUPDATE_SIZE = 0x00018000 if self.ENABLE_FWU else 0
|
self.FWUPDATE_SIZE = 0x00018000 if self.ENABLE_FWU else 0
|
||||||
|
self.SETUP_SIZE = 0x00020000 if self.ENABLE_SBL_SETUP else 0
|
||||||
|
|
||||||
self._REDUNDANT_LAYOUT = 1
|
self._REDUNDANT_LAYOUT = 1
|
||||||
if not self._REDUNDANT_LAYOUT:
|
if not self._REDUNDANT_LAYOUT:
|
||||||
|
@ -234,12 +236,32 @@ class Board(BaseBoard):
|
||||||
('TST5', '', 'Dummy', container_list_auth_type, 'KEY_ID_CONTAINER_COMP'+'_'+self._RSA_SIGN_TYPE, 0, 0x3000, 0), # Component 5
|
('TST5', '', 'Dummy', container_list_auth_type, 'KEY_ID_CONTAINER_COMP'+'_'+self._RSA_SIGN_TYPE, 0, 0x3000, 0), # Component 5
|
||||||
('TST6', '', '', '', '', 0, 0x1000, 0), # Component 6
|
('TST6', '', '', '', '', 0, 0x1000, 0), # Component 6
|
||||||
])
|
])
|
||||||
|
|
||||||
|
if self.ENABLE_SBL_SETUP:
|
||||||
|
def_auth = container_list_auth_type
|
||||||
|
cont_key = 'KEY_ID_CONTAINER'+'_'+self._RSA_SIGN_TYPE
|
||||||
|
mpy_efi = 'PayloadPkg/PayloadBins/MicroPython.efi'
|
||||||
|
if not os.path.isfile(mpy_efi):
|
||||||
|
raise Exception ("MicroPython.efi is required under 'PayloadPkg/PayloadBins', please build MicroPython payload module separately !")
|
||||||
|
mpy_path = '../../../' + mpy_efi
|
||||||
|
sbl_setup = '../../../BootloaderCorePkg/Tools/SblSetup.py'
|
||||||
|
container_list.append ([
|
||||||
|
# Name | Image File | CompressAlg | AuthType | Key File | Region Align | Region Size | Svn Info
|
||||||
|
# ==================================================================================================================================================================
|
||||||
|
('SETP', 'SETP.bin', '', def_auth, cont_key, 0, 0, 0), # Container Header
|
||||||
|
('MPYM', mpy_path, 'Lzma', 'SHA2_384', '', 0, 0x12000, 0), # Component 1
|
||||||
|
('STPY', sbl_setup, 'Lz4', 'SHA2_384', '', 0, 0x06000, 0), # Component 2
|
||||||
|
('CFGJ', 'CfgDataDef.json', 'Lzma', 'SHA2_384', '', 0, 0x06000, 0), # Component 3
|
||||||
|
('CFGD', '', 'Dummy', '', '', 0, 0x01000, 0), # Component 4
|
||||||
|
])
|
||||||
|
|
||||||
return container_list
|
return container_list
|
||||||
|
|
||||||
def GetImageLayout (self):
|
def GetImageLayout (self):
|
||||||
|
|
||||||
compress = '' if self.STAGE1B_XIP else 'Lz4'
|
compress = '' if self.STAGE1B_XIP else 'Lz4'
|
||||||
fwu_mode = STITCH_OPS.MODE_FILE_PAD if self.ENABLE_FWU else STITCH_OPS.MODE_FILE_IGNOR
|
fwu_mode = STITCH_OPS.MODE_FILE_PAD if self.ENABLE_FWU else STITCH_OPS.MODE_FILE_IGNOR
|
||||||
|
setup_mode = STITCH_OPS.MODE_FILE_PAD if self.ENABLE_SBL_SETUP else STITCH_OPS.MODE_FILE_IGNOR
|
||||||
|
|
||||||
img_list = []
|
img_list = []
|
||||||
|
|
||||||
|
@ -271,6 +293,7 @@ class Board(BaseBoard):
|
||||||
('EPAYLOAD.bin' , '' , self.EPAYLOAD_SIZE, STITCH_OPS.MODE_FILE_PAD, STITCH_OPS.MODE_POS_TAIL),
|
('EPAYLOAD.bin' , '' , self.EPAYLOAD_SIZE, STITCH_OPS.MODE_FILE_PAD, STITCH_OPS.MODE_POS_TAIL),
|
||||||
('SIIPFW.bin' , '' , self.SIIPFW_SIZE, STITCH_OPS.MODE_FILE_PAD, STITCH_OPS.MODE_POS_TAIL),
|
('SIIPFW.bin' , '' , self.SIIPFW_SIZE, STITCH_OPS.MODE_FILE_PAD, STITCH_OPS.MODE_POS_TAIL),
|
||||||
('PTEST.bin' , '' , self.TEST_SIZE, STITCH_OPS.MODE_FILE_PAD, STITCH_OPS.MODE_POS_TAIL),
|
('PTEST.bin' , '' , self.TEST_SIZE, STITCH_OPS.MODE_FILE_PAD, STITCH_OPS.MODE_POS_TAIL),
|
||||||
|
('SETP.bin' , '' , self.SETUP_SIZE, setup_mode, STITCH_OPS.MODE_POS_TAIL),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
('REDUNDANT_A.bin', [
|
('REDUNDANT_A.bin', [
|
||||||
|
|
|
@ -204,13 +204,15 @@ GpioInit (
|
||||||
GpioTable = (UINT8 *)AllocateTemporaryMemory (0); //allocate new buffer
|
GpioTable = (UINT8 *)AllocateTemporaryMemory (0); //allocate new buffer
|
||||||
GpioCfgDataBuffer = GpioTable;
|
GpioCfgDataBuffer = GpioTable;
|
||||||
|
|
||||||
for (Index = 0; Index < GpioCfgHdr->GpioItemCount; Index++) {
|
if (GpioCfgBaseHdr != NULL) {
|
||||||
if (GpioCfgCurrHdr->GpioBaseTableBitMask[Index >> 3] & (1 << (Index & 7))) {
|
for (Index = 0; Index < GpioCfgHdr->GpioItemCount; Index++) {
|
||||||
CopyMem (GpioTable, GpioCfgHdr->GpioTableData + Offset, GpioCfgHdr->GpioItemSize);
|
if (GpioCfgCurrHdr->GpioBaseTableBitMask[Index >> 3] & (1 << (Index & 7))) {
|
||||||
GpioTable += GpioCfgHdr->GpioItemSize;
|
CopyMem (GpioTable, GpioCfgHdr->GpioTableData + Offset, GpioCfgHdr->GpioItemSize);
|
||||||
GpioEntries++;
|
GpioTable += GpioCfgHdr->GpioItemSize;
|
||||||
|
GpioEntries++;
|
||||||
|
}
|
||||||
|
Offset += GpioCfgHdr->GpioItemSize;
|
||||||
}
|
}
|
||||||
Offset += GpioCfgHdr->GpioItemSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GpioCfgCurrHdr != NULL) {
|
if (GpioCfgCurrHdr != NULL) {
|
||||||
|
@ -414,6 +416,7 @@ UpdateOsBootMediumInfo (
|
||||||
// Use '-boot order=c' or default to boot from eMMC
|
// Use '-boot order=c' or default to boot from eMMC
|
||||||
// Use '-boot order=d' to boot from SATA
|
// Use '-boot order=d' to boot from SATA
|
||||||
// Use '-boot order=n' to boot from NVMe
|
// Use '-boot order=n' to boot from NVMe
|
||||||
|
// Use '-boot order=a' to boot to setup
|
||||||
//
|
//
|
||||||
IoWrite8 (0x70, 0x3D);
|
IoWrite8 (0x70, 0x3D);
|
||||||
BootOrder = IoRead8 (0x71);
|
BootOrder = IoRead8 (0x71);
|
||||||
|
@ -424,9 +427,20 @@ UpdateOsBootMediumInfo (
|
||||||
} else if ((BootOrder & 0x0F) == 4) {
|
} else if ((BootOrder & 0x0F) == 4) {
|
||||||
// NVMe boot first
|
// NVMe boot first
|
||||||
OsBootOptionList->CurrentBoot = 2;
|
OsBootOptionList->CurrentBoot = 2;
|
||||||
} else {
|
} else if ((BootOrder & 0x0F) == 2) {
|
||||||
// SD boot first
|
// SD boot first
|
||||||
OsBootOptionList->CurrentBoot = 0;
|
OsBootOptionList->CurrentBoot = 0;
|
||||||
|
} else if ((BootOrder & 0x0F) == 1) {
|
||||||
|
// Build setup boot option
|
||||||
|
if (FeaturePcdGet (PcdEnableSetup)) {
|
||||||
|
OsBootOptionList->OsBootOptionCount = 1;
|
||||||
|
OsBootOptionList->CurrentBoot = 0;
|
||||||
|
OsBootOptionList->RestrictedBoot = 1;
|
||||||
|
ZeroMem (OsBootOptionList->OsBootOption, sizeof(OS_BOOT_OPTION));
|
||||||
|
OsBootOptionList->OsBootOption[0].DevType = OsBootDeviceMemory;
|
||||||
|
OsBootOptionList->OsBootOption[0].FsType = EnumFileSystemTypeAuto;
|
||||||
|
CopyMem (OsBootOptionList->OsBootOption[0].Image[0].FileName, "!SETP/MPYM", 11);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,4 +63,4 @@
|
||||||
gPlatformModuleTokenSpaceGuid.PcdSmramTsegBase
|
gPlatformModuleTokenSpaceGuid.PcdSmramTsegBase
|
||||||
gPlatformModuleTokenSpaceGuid.PcdSmramTsegSize
|
gPlatformModuleTokenSpaceGuid.PcdSmramTsegSize
|
||||||
gPlatformModuleTokenSpaceGuid.PcdStage1BXip
|
gPlatformModuleTokenSpaceGuid.PcdStage1BXip
|
||||||
|
gPlatformModuleTokenSpaceGuid.PcdEnableSetup
|
||||||
|
|
Loading…
Reference in New Issue