Enable Linux as payload support

This patch enabled Linux as payload support on QEMU platform. To build
Linux as payload, please follow instructions mentioned in commit:
  4a5af4f8b0
In addtion, to boot Linux payload on QEMU, please append following
into QEMU command line to set Payload ID to 'LINX' dynamically.
  -boot order=abc

Signed-off-by: Maurice Ma <maurice.ma@intel.com>
This commit is contained in:
Maurice Ma 2019-08-12 16:40:02 -07:00
parent 19a0890a54
commit 42b93e3b57
4 changed files with 15 additions and 6 deletions

View File

@ -291,6 +291,7 @@
gPlatformModuleTokenSpaceGuid.PcdPsdBiosEnabled | $(HAVE_PSD_TABLE) gPlatformModuleTokenSpaceGuid.PcdPsdBiosEnabled | $(HAVE_PSD_TABLE)
gPayloadTokenSpaceGuid.PcdGrubBootCfgEnabled | $(ENABLE_GRUB_CONFIG) gPayloadTokenSpaceGuid.PcdGrubBootCfgEnabled | $(ENABLE_GRUB_CONFIG)
gPlatformModuleTokenSpaceGuid.PcdSmbiosEnabled | $(ENABLE_SMBIOS) gPlatformModuleTokenSpaceGuid.PcdSmbiosEnabled | $(ENABLE_SMBIOS)
gPlatformModuleTokenSpaceGuid.PcdLinuxPayloadEnabled | $(ENABLE_LINUX_PAYLOAD)
!ifdef $(S3_DEBUG) !ifdef $(S3_DEBUG)
gPlatformModuleTokenSpaceGuid.PcdS3DebugEnabled | $(S3_DEBUG) gPlatformModuleTokenSpaceGuid.PcdS3DebugEnabled | $(S3_DEBUG)

View File

@ -188,6 +188,7 @@ class BaseBoard(object):
self.ENABLE_SMM_REBASE = 0 self.ENABLE_SMM_REBASE = 0
self.ENABLE_GRUB_CONFIG = 0 self.ENABLE_GRUB_CONFIG = 0
self.ENABLE_SMBIOS = 0 self.ENABLE_SMBIOS = 0
self.ENABLE_LINUX_PAYLOAD = 0
self.ACM_SIZE = 0 self.ACM_SIZE = 0
self.UCODE_SIZE = 0 self.UCODE_SIZE = 0

View File

@ -46,6 +46,7 @@ class Board(BaseBoard):
self.ENABLE_FRAMEBUFFER_INIT = 1 self.ENABLE_FRAMEBUFFER_INIT = 1
self.ENABLE_FWU = 1 self.ENABLE_FWU = 1
self.ENABLE_GRUB_CONFIG = 1 self.ENABLE_GRUB_CONFIG = 1
self.ENABLE_LINUX_PAYLOAD = 1
# To enable source debug, set 1 to self.ENABLE_SOURCE_DEBUG # To enable source debug, set 1 to self.ENABLE_SOURCE_DEBUG
# self.ENABLE_SOURCE_DEBUG = 1 # self.ENABLE_SOURCE_DEBUG = 1
@ -72,7 +73,7 @@ class Board(BaseBoard):
self.STAGE2_SIZE = 0x00018000 self.STAGE2_SIZE = 0x00018000
self.SIIPFW_SIZE = 0x00010000 self.SIIPFW_SIZE = 0x00010000
self.EPAYLOAD_SIZE = 0x0010D000 self.EPAYLOAD_SIZE = 0x0030D000
self.PAYLOAD_SIZE = 0x00020000 self.PAYLOAD_SIZE = 0x00020000
self.CFGDATA_SIZE = 0x00001000 self.CFGDATA_SIZE = 0x00001000
self.VARIABLE_SIZE = 0x00002000 self.VARIABLE_SIZE = 0x00002000
@ -84,12 +85,12 @@ class Board(BaseBoard):
self.TOP_SWAP_SIZE = 0x000000 self.TOP_SWAP_SIZE = 0x000000
self.REDUNDANT_SIZE = 0x000000 self.REDUNDANT_SIZE = 0x000000
self.NON_VOLATILE_SIZE = 0x000000 self.NON_VOLATILE_SIZE = 0x000000
self.NON_REDUNDANT_SIZE = 0x200000 self.NON_REDUNDANT_SIZE = 0x400000
else: else:
self.TOP_SWAP_SIZE = 0x010000 self.TOP_SWAP_SIZE = 0x010000
self.REDUNDANT_SIZE = 0x050000 self.REDUNDANT_SIZE = 0x050000
self.NON_VOLATILE_SIZE = 0x001000 self.NON_VOLATILE_SIZE = 0x001000
self.NON_REDUNDANT_SIZE = 0x13F000 self.NON_REDUNDANT_SIZE = 0x33F000
self.SLIMBOOTLOADER_SIZE = (self.TOP_SWAP_SIZE + self.REDUNDANT_SIZE) * 2 + \ self.SLIMBOOTLOADER_SIZE = (self.TOP_SWAP_SIZE + self.REDUNDANT_SIZE) * 2 + \

View File

@ -283,14 +283,20 @@ BoardInit (
GenericCfgData = (GEN_CFG_DATA *)FindConfigDataByTag (CDATA_GEN_TAG); GenericCfgData = (GEN_CFG_DATA *)FindConfigDataByTag (CDATA_GEN_TAG);
if (GenericCfgData != NULL) { if (GenericCfgData != NULL) {
if (GenericCfgData->PayloadId == AUTO_PAYLOAD_ID_SIGNATURE) { if (GenericCfgData->PayloadId == AUTO_PAYLOAD_ID_SIGNATURE) {
// Use QEMU bootorder to select the payload // Use QEMU 3rd bootorder to select the payload
// Add QEMU command line parameter '-boot order=??a' to enable EFI payload // Add QEMU command line parameter:
// Here ?? is the normal boot device. // default : enable OsLoader
// '-boot order=??a' : enable EFI payload
// '-boot order=??c' : enable LINUX payload
// Here ?? is the normal boot devices.
IoWrite8 (0x70, 0x38); IoWrite8 (0x70, 0x38);
BootDev = IoRead8 (0x71) >> 4; BootDev = IoRead8 (0x71) >> 4;
if (BootDev == 1) { if (BootDev == 1) {
// Boot UEFI payload // Boot UEFI payload
SetPayloadId (UEFI_PAYLOAD_ID_SIGNATURE); SetPayloadId (UEFI_PAYLOAD_ID_SIGNATURE);
} else if (BootDev == 2) {
// Boot LINUX payload
SetPayloadId (LINX_PAYLOAD_ID_SIGNATURE);
} else { } else {
// Boot OsLoader // Boot OsLoader
SetPayloadId (0); SetPayloadId (0);