summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmos Bu <amos.bu@newfw.com>2024-09-26 10:19:13 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2025-02-24 12:31:47 +0000
commitf0a20153731073799cde14da8d362fa9d6529f6b (patch)
treee99d1bc51bbfe14149a1cda56ab11535143943cc
parent9757ffaa3854e6980257d8ca8c88f3d6736b5a23 (diff)
downloadedk2-f0a20153731073799cde14da8d362fa9d6529f6b.tar.gz
edk2-f0a20153731073799cde14da8d362fa9d6529f6b.tar.bz2
edk2-f0a20153731073799cde14da8d362fa9d6529f6b.zip
UefiPayloadPkg: Add AARCH64 support
Add basic support for FIT image on the AARCH64 architecture, reuse exsitting DSC and FDF files for IA32, X64 and AARCH64 architectures. Introduce new PCD: PcdUseUniversalPayloadSerialPort to indicate which serial port module is used due to some serial port parameters are fixed for ARM SoC and Platform. Please use following command to build AARCH64 UPL FIT image: " export GCC5_AARCH64_PREFIX=aarch64-linux-gnu- python UefiPayloadPkg/UniversalPayloadBuild.py -a AARCH64 -t GCC5 -b DEBUG --Fit " Signed-off-by: Amos Bu <amos.bu@newfw.com> Signed-off-by: Ajan Zhong <ajan.zhong@newfw.com>
-rw-r--r--UefiPayloadPkg/Library/PciSegmentInfoLibAcpiBoardInfo/PciSegmentInfoLibAcpiBoardInfo.inf1
-rw-r--r--UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c4
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/AArch64/DxeHandoff.c68
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/AArch64/DxeLoadFuncFit.c26
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf9
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/PrintHob.c2
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h6
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf8
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf7
-rw-r--r--UefiPayloadPkg/UefiPayloadPkg.dec5
-rw-r--r--UefiPayloadPkg/UefiPayloadPkg.dsc275
-rw-r--r--UefiPayloadPkg/UefiPayloadPkg.fdf50
-rw-r--r--UefiPayloadPkg/UniversalPayloadBuild.py5
13 files changed, 417 insertions, 49 deletions
diff --git a/UefiPayloadPkg/Library/PciSegmentInfoLibAcpiBoardInfo/PciSegmentInfoLibAcpiBoardInfo.inf b/UefiPayloadPkg/Library/PciSegmentInfoLibAcpiBoardInfo/PciSegmentInfoLibAcpiBoardInfo.inf
index 2ec700e08c..273287a247 100644
--- a/UefiPayloadPkg/Library/PciSegmentInfoLibAcpiBoardInfo/PciSegmentInfoLibAcpiBoardInfo.inf
+++ b/UefiPayloadPkg/Library/PciSegmentInfoLibAcpiBoardInfo/PciSegmentInfoLibAcpiBoardInfo.inf
@@ -39,6 +39,7 @@
[Guids]
gUefiAcpiBoardInfoGuid
gUplPciSegmentInfoHobGuid
+ gUniversalPayloadPciRootBridgeInfoGuid
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration
diff --git a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
index efaab326bb..962ebd6664 100644
--- a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
+++ b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
@@ -89,11 +89,15 @@ PlatformHookSerialPortInitialize (
return Status;
}
+ #if FixedPcdGetBool (PcdUseUniversalPayloadSerialPort) == 1
+
Status = PcdSet32S (PcdSerialBaudRate, SerialPortInfo->BaudRate);
if (RETURN_ERROR (Status)) {
return Status;
}
+ #endif
+
return RETURN_SUCCESS;
}
diff --git a/UefiPayloadPkg/UefiPayloadEntry/AArch64/DxeHandoff.c b/UefiPayloadPkg/UefiPayloadEntry/AArch64/DxeHandoff.c
new file mode 100644
index 0000000000..f54cc82109
--- /dev/null
+++ b/UefiPayloadPkg/UefiPayloadEntry/AArch64/DxeHandoff.c
@@ -0,0 +1,68 @@
+/** @file
+ Generic version of arch-specific functionality for DxeLoad.
+
+ Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
+ Copyright 2024 Google LLC
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/PcdLib.h>
+#include <Library/HobLib.h>
+
+#include "UefiPayloadEntry.h"
+
+#define STACK_SIZE 0x20000
+
+/**
+ Transfers control to DxeCore.
+
+ This function performs a CPU architecture specific operations to execute
+ the entry point of DxeCore with the parameters of HobList.
+ It also installs EFI_END_OF_PEI_PPI to signal the end of PEI phase.
+
+ @param DxeCoreEntryPoint The entry point of DxeCore.
+ @param HobList The start of HobList passed to DxeCore.
+
+**/
+VOID
+HandOffToDxeCore (
+ IN EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint,
+ IN EFI_PEI_HOB_POINTERS HobList
+ )
+{
+ VOID *BaseOfStack;
+ VOID *TopOfStack;
+
+ //
+ // Allocate 128KB for the Stack
+ //
+ BaseOfStack = AllocatePages (EFI_SIZE_TO_PAGES (STACK_SIZE));
+ ASSERT (BaseOfStack != NULL);
+
+ //
+ // Compute the top of the stack we were allocated. Pre-allocate a UINTN
+ // for safety.
+ //
+ TopOfStack = (VOID *)((UINTN)BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT);
+ TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);
+
+ //
+ // Update the contents of BSP stack HOB to reflect the real stack info passed to DxeCore.
+ //
+ UpdateStackHob ((EFI_PHYSICAL_ADDRESS)(UINTN)BaseOfStack, STACK_SIZE);
+
+ //
+ // Transfer the control to the entry point of DxeCore.
+ //
+ SwitchStack (
+ (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,
+ HobList.Raw,
+ NULL,
+ TopOfStack
+ );
+}
diff --git a/UefiPayloadPkg/UefiPayloadEntry/AArch64/DxeLoadFuncFit.c b/UefiPayloadPkg/UefiPayloadEntry/AArch64/DxeLoadFuncFit.c
new file mode 100644
index 0000000000..a2782207c7
--- /dev/null
+++ b/UefiPayloadPkg/UefiPayloadEntry/AArch64/DxeLoadFuncFit.c
@@ -0,0 +1,26 @@
+/** @file
+ aarch64-specifc functionality for Module Entry Point.
+
+ Copyright 2024 Google LLC
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include "UefiPayloadEntry.h"
+
+/**
+ Entry point to the C language phase of UEFI payload.
+ @param[in] FdtBaseAddr Pointer to the FDT
+ @param[in] AdditionalPara Not used yet
+ @retval It will not return if SUCCESS, and return error
+ when passing bootloader parameter.
+**/
+EFI_STATUS
+EFIAPI
+_ModuleEntryPoint (
+ IN UINTN FdtBaseAddr,
+ IN UINTN AddtionalPara
+ )
+{
+ return FitUplEntryPoint (FdtBaseAddr);
+}
diff --git a/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf b/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf
index 456385d9af..8fb223ecd5 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf
+++ b/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf
@@ -2,6 +2,7 @@
# This is the first module for UEFI payload.
#
# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+# Copyright 2024 Google LLC
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -17,7 +18,7 @@
#
# The following information is for reference only and not required by the build tools.
#
-# VALID_ARCHITECTURES = IA32 X64
+# VALID_ARCHITECTURES = IA32 X64 AARCH64
#
[Sources]
@@ -42,6 +43,10 @@
RiscV64/DxeLoadFunc.c
RiscV64/DxeLoadFuncFit.c
+[Sources.AARCH64]
+ AArch64/DxeHandoff.c
+ AArch64/DxeLoadFuncFit.c
+
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
@@ -87,7 +92,7 @@
[FeaturePcd.X64]
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables ## CONSUMES
-[Pcd.IA32,Pcd.X64,Pcd.RISCV64]
+[Pcd.IA32,Pcd.X64,Pcd.RISCV64,Pcd.AARCH64]
gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile
gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable ## SOMETIMES_CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask ## CONSUMES
diff --git a/UefiPayloadPkg/UefiPayloadEntry/PrintHob.c b/UefiPayloadPkg/UefiPayloadEntry/PrintHob.c
index 44c99774ee..2211c6690e 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/PrintHob.c
+++ b/UefiPayloadPkg/UefiPayloadEntry/PrintHob.c
@@ -271,7 +271,9 @@ PrintMemoryTypeInfoGuidHob (
//
GUID_HOB_PRINT_HANDLE GuidHobPrintHandleTable[] = {
{ &gUniversalPayloadAcpiTableGuid, PrintAcpiGuidHob, "gUniversalPayloadAcpiTableGuid(ACPI table Guid)" },
+ #if FixedPcdGetBool (PcdUseUniversalPayloadSerialPort) == 1
{ &gUniversalPayloadSerialPortInfoGuid, PrintSerialGuidHob, "gUniversalPayloadSerialPortInfoGuid(Serial Port Info)" },
+ #endif
{ &gUniversalPayloadSmbios3TableGuid, PrintSmbios3GuidHob, "gUniversalPayloadSmbios3TableGuid(SmBios Guid)" },
{ &gUniversalPayloadSmbiosTableGuid, PrintSmbiosTablGuidHob, "gUniversalPayloadSmbiosTableGuid(SmBios Guid)" },
{ &gUefiAcpiBoardInfoGuid, PrintAcpiBoardInfoGuidHob, "gUefiAcpiBoardInfoGuid(Acpi Guid)" },
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
index 09fce8dbcf..077e526ea8 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
+++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
@@ -274,4 +274,10 @@ UplEntryPoint (
IN UINTN BootloaderParameter
);
+VOID
+EFIAPI
+InitializeFloatingPointUnits (
+ VOID
+ );
+
#endif
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
index 4aa52d7b53..1ed319f5ff 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
+++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
@@ -18,7 +18,7 @@
#
# The following information is for reference only and not required by the build tools.
#
-# VALID_ARCHITECTURES = IA32 X64
+# VALID_ARCHITECTURES = IA32 X64 AARCH64
#
[Sources]
@@ -38,6 +38,10 @@
X64/VirtualMemory.c
X64/DxeLoadFunc.c
+[Sources.AARCH64]
+ AArch64/DxeHandoff.c
+ AArch64/DxeLoadFuncFit.c
+
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
@@ -75,7 +79,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables ## CONSUMES
-[Pcd.IA32,Pcd.X64]
+[Pcd.IA32,Pcd.X64,Pcd.AARCH64]
gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable ## SOMETIMES_CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask ## CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdNullPointerDetectionPropertyMask ## CONSUMES
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
index e2b3715853..2cd46c4438 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
+++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
@@ -15,7 +15,7 @@
#
# The following information is for reference only and not required by the build tools.
#
-# VALID_ARCHITECTURES = IA32 X64
+# VALID_ARCHITECTURES = IA32 X64 AARCH64
#
[Sources]
UniversalPayloadEntry.c
@@ -32,6 +32,9 @@
X64/VirtualMemory.h
X64/VirtualMemory.c
X64/DxeLoadFunc.c
+[Sources.AARCH64]
+ AArch64/DxeHandoff.c
+ AArch64/DxeLoadFuncFit.c
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
@@ -69,7 +72,7 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## CONSUMES
[FeaturePcd.X64]
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables ## CONSUMES
-[Pcd.IA32,Pcd.X64]
+[Pcd.IA32,Pcd.X64,Pcd.AARCH64]
gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile
gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable ## SOMETIMES_CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask ## CONSUMES
diff --git a/UefiPayloadPkg/UefiPayloadPkg.dec b/UefiPayloadPkg/UefiPayloadPkg.dec
index 900642bc11..a6ab2dd815 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.dec
+++ b/UefiPayloadPkg/UefiPayloadPkg.dec
@@ -103,3 +103,8 @@ gUefiPayloadPkgTokenSpaceGuid.PcdPciReservedPMemAbove4GBLimit|0x0000000000000000
gUefiPayloadPkgTokenSpaceGuid.SizeOfIoSpace|0|UINT8|0x0000002B
gUefiPayloadPkgTokenSpaceGuid.PcdFDTPageSize|8|UINT8|0x0000002C
+
+## Indicates if Universal Payload Serial Port feature is used
+#- PcdUseUniversalPayloadSerialPort is TRUE, Serial Port parameters will be updated
+#- PcdUseUniversalPayloadSerialPort is FALSE, Serial Port parameters are fixed
+gUefiPayloadPkgTokenSpaceGuid.PcdUseUniversalPayloadSerialPort|TRUE|BOOLEAN|0x0000002D
diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayloadPkg.dsc
index b55a9daa56..f26f91948c 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkg.dsc
@@ -5,6 +5,7 @@
#
# Copyright (c) 2014 - 2023, Intel Corporation. All rights reserved.<BR>
# Copyright (c) Microsoft Corporation.
+# Copyright 2024 Google LLC
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -19,7 +20,7 @@
PLATFORM_GUID = F71608AB-D63D-4491-B744-A99998C8CD96
PLATFORM_VERSION = 0.1
DSC_SPECIFICATION = 0x00010005
- SUPPORTED_ARCHITECTURES = IA32|X64
+ SUPPORTED_ARCHITECTURES = IA32|X64|AARCH64
BUILD_TARGETS = DEBUG|RELEASE|NOOPT
SKUID_IDENTIFIER = DEFAULT
OUTPUT_DIRECTORY = Build/UefiPayloadPkg$(BUILD_ARCH)
@@ -167,6 +168,9 @@
MSFT:RELEASE_*_*_CC_FLAGS = /D MDEPKG_NDEBUG
!endif
+[BuildOptions.AARCH64]
+ GCC:*_*_*_CC_FLAGS = -mcmodel=tiny -mstrict-align
+
[BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER]
GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
XCODE:*_*_*_DLINK_FLAGS = -seg1addr 0x1000 -segalign 0x1000
@@ -174,6 +178,12 @@
CLANGPDB:*_*_*_DLINK_FLAGS = /ALIGN:4096
MSFT:*_*_*_DLINK_FLAGS = /ALIGN:4096
+[BuildOptions.IA32.EDKII.DXE_RUNTIME_DRIVER, BuildOptions.X64.EDKII.DXE_RUNTIME_DRIVER]
+ GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
+
+[BuildOptions.AARCH64.EDKII.DXE_RUNTIME_DRIVER]
+ GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x10000
+
################################################################################
#
# SKU Identification section - list of all SKU IDs supported by this Platform.
@@ -364,6 +374,55 @@
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
+[LibraryClasses.AARCH64]
+ ArmHvcLib|ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf
+ ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
+ ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
+ ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
+
+ BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
+ CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
+ EfiResetSystemLib|ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.inf
+ PL011UartLib|ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.inf
+ PL011UartClockLib|ArmPlatformPkg/Library/PL011UartClockLib/PL011UartClockLib.inf
+ SerialPortLib|ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
+
+ QemuFwCfgLib|OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgMmioDxeLib.inf
+ QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/BaseQemuFwCfgS3LibNull.inf
+ QemuFwCfgSimpleParserLib|OvmfPkg/Library/QemuFwCfgSimpleParserLib/QemuFwCfgSimpleParserLib.inf
+ QemuLoadImageLib|OvmfPkg/Library/GenericQemuLoadImageLib/GenericQemuLoadImageLib.inf
+
+ TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
+ VirtNorFlashPlatformLib|OvmfPkg/Library/FdtNorFlashQemuLib/FdtNorFlashQemuLib.inf
+
+ # ARM Architectural Libraries
+ ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
+ CpuExceptionHandlerLib|ArmPkg/Library/ArmExceptionLib/ArmExceptionLib.inf
+ DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
+
+ # ARM PL031 RTC Driver
+ RealTimeClockLib|ArmPlatformPkg/Library/PL031RealTimeClockLib/PL031RealTimeClockLib.inf
+ TimeBaseLib|EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.inf
+
+ DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
+ DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
+ DebugAgentTimerLib|EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf
+
+ OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
+ PeiHardwareInfoLib|OvmfPkg/Library/HardwareInfoLib/PeiHardwareInfoLib.inf
+ QemuBootOrderLib|OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf
+
+ # PCI Libraries
+ DxeHardwareInfoLib|OvmfPkg/Library/HardwareInfoLib/DxeHardwareInfoLib.inf
+ PciCapLib|OvmfPkg/Library/BasePciCapLib/BasePciCapLib.inf
+ PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
+ PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
+ PciPcdProducerLib|OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.inf
+
+ ArmPlatformLib|ArmVirtPkg/Library/ArmPlatformLibQemu/ArmPlatformLibQemu.inf
+ VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceLib.inf
+ VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
+
[LibraryClasses.common.SEC]
HobLib|UefiPayloadPkg/Library/PayloadEntryHobLib/HobLib.inf
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
@@ -550,12 +609,70 @@
gEfiSecurityPkgTokenSpaceGuid.PcdRemovableMediaImageVerificationPolicy|0x04
!endif
-[PcdsPatchableInModule.X64]
+[PcdsFixedAtBuild.AARCH64]
+ gArmTokenSpaceGuid.PcdVFPEnabled|1
+
+ # System Memory Base -- fixed at 0x4000_0000
+ gArmTokenSpaceGuid.PcdSystemMemoryBase|0x40000000
+
+ gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x4007c000
+ gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x4000
+
+ # Size of the region used by UEFI in permanent memory (Reserved 64MB)
+ gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000
+
+ # ARM General Interrupt Controller
+ gArmTokenSpaceGuid.PcdGicDistributorBase|0x8000000
+ gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x80a0000
+ gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0x8080000
+
+ # Enable NX memory protection for all non-code regions, including OEM and OS
+ # reserved ones, with the exception of LoaderData regions, of which OS loaders
+ # (i.e., GRUB) may assume that its contents are executable.
+ gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy|0xC000000000007FD1
+
+ # initial location of the device tree blob passed by QEMU -- base of DRAM
+ gUefiOvmfPkgTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress|0x40000000
+
+ # The maximum physical I/O addressability of the processor, set with BuildCpuHob().
+ gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize|16
+
+ # Enable the non-executable DXE stack. (This gets set up by DxeIpl)
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|TRUE
+
+ # Shadowing PEI modules is absolutely pointless when the NOR flash is emulated
+ gEfiMdeModulePkgTokenSpaceGuid.PcdShadowPeimOnBoot|FALSE
+
+ # System Memory Size -- 128 MB initially, actual size will be fetched from DT
+ gArmTokenSpaceGuid.PcdSystemMemorySize|0x8000000
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize | 0x40000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize | 0x40000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize | 0x40000
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|TRUE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x9000000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|1
+ gEfiMdeModulePkgTokenSpaceGuid.PcdPciSerialParameters|$(PCI_SERIAL_PARAMETERS)
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosEntryPointProvideMethod|0x2
+
+ # AARCH64 use PL011 Serial Port device instead of UniversalPayload Serial
+ gUefiPayloadPkgTokenSpaceGuid.PcdUseUniversalPayloadSerialPort|FALSE
+
+[PcdsPatchableInModule.IA32, PcdsPatchableInModule.X64]
!if $(NETWORK_DRIVER_ENABLE) == TRUE
gEfiNetworkPkgTokenSpaceGuid.PcdAllowHttpConnections|TRUE
!endif
gUefiPayloadPkgTokenSpaceGuid.SizeOfIoSpace|16
gUefiPayloadPkgTokenSpaceGuid.PcdFDTPageSize|8
+ #
+ # The following parameters are set by Library/PlatformHookLib
+ #
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|FALSE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x3F8
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate|$(BAUD_RATE)
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|1
[PcdsPatchableInModule.common]
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 }
@@ -575,13 +692,6 @@
!endif
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule|$(MAX_SIZE_NON_POPULATE_CAPSULE)
- #
- # The following parameters are set by Library/PlatformHookLib
- #
- gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|FALSE
- gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x3F8
- gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate|$(BAUD_RATE)
- gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|1
#
# Enable these parameters to be set on the command line
@@ -598,6 +708,20 @@
gUefiCpuPkgTokenSpaceGuid.PcdCpuNumberOfReservedVariableMtrrs|0
gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter|0
+[PcdsPatchableInModule.AARCH64]
+ gUefiPayloadPkgTokenSpaceGuid.SizeOfIoSpace|16
+ gUefiPayloadPkgTokenSpaceGuid.PcdFDTPageSize|8
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|TRUE
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x9000000
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|1
+
+!if $(TARGET) == DEBUG
+ gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x07
+!else
+ gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x03
+!endif
+
################################################################################
#
# Pcd DynamicEx Section - list of all EDK II PCD Entries defined by this Platform
@@ -608,10 +732,6 @@
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|$(PLATFORM_BOOT_TIMEOUT)
[PcdsDynamicExDefault]
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|$(UART_DEFAULT_BAUD_RATE)
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits|$(UART_DEFAULT_DATA_BITS)
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity|$(UART_DEFAULT_PARITY)
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits|$(UART_DEFAULT_STOP_BITS)
gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|$(DEFAULT_TERMINAL_TYPE)
gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport|TRUE
gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport|FALSE
@@ -662,9 +782,51 @@
gUefiCpuPkgTokenSpaceGuid.PcdSevEsIsEnabled|0
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|TRUE
+[PcdsDynamicExDefault.IA32, PcdsDynamicExDefault.X64]
gPcAtChipsetPkgTokenSpaceGuid.PcdRtcIndexRegister|$(RTC_INDEX_REGISTER)
gPcAtChipsetPkgTokenSpaceGuid.PcdRtcTargetRegister|$(RTC_TARGET_REGISTER)
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|$(UART_DEFAULT_BAUD_RATE)
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits|$(UART_DEFAULT_DATA_BITS)
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity|$(UART_DEFAULT_PARITY)
+ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits|$(UART_DEFAULT_STOP_BITS)
+
+[PcdsDynamicExDefault.AARCH64]
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase | 0
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64 | 0
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 | 0
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase | 0
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase | 0
+ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64 | 0
+
+ # Timer IRQs
+ gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum|29
+ gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|30
+ # Not used in QEMU platform
+ gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|0
+ gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum|26
+ gArmTokenSpaceGuid.PcdArmArchTimerHypVirtIntrNum|0x0
+
+ # PL031 RealTimeClock
+ gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x9010000
+
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress|0x4010000000
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseSize|0xfffffff
+ gEfiMdePkgTokenSpaceGuid.PcdPciIoTranslation|0x0
+
+ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|1280
+ gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|800
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution|640
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480
+ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow|0
+ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn|0
+
+ # SMBIOS entry point version
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosVersion|0x0300
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSmbiosDocRev|0x0
+ gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated|FALSE
+
################################################################################
#
# Components Section - list of all EDK II Modules needed by this Platform.
@@ -693,7 +855,7 @@
UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
!endif
!else
- [Components.X64]
+ [Components.X64, Components.AARCH64]
!if $(UNIVERSAL_PAYLOAD) == TRUE
!if $(UNIVERSAL_PAYLOAD_FORMAT) == "ELF"
UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
@@ -724,7 +886,7 @@
!include NetworkPkg/Network.dsc.inc
!endif
-[Components.X64]
+[Components.X64, Components.AARCH64]
#
# DXE Core
#
@@ -753,7 +915,6 @@
SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf
!endif
- UefiCpuPkg/CpuDxe/CpuDxe.inf
MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
!if $(BOOTSPLASH_IMAGE)
MdeModulePkg/Logo/LogoDxe.inf
@@ -767,17 +928,6 @@
MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf
-!if $(TIMER_SUPPORT) == "HPET"
- PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
-!elseif $(TIMER_SUPPORT) == "LAPIC"
- OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf {
- <LibraryClasses>
- NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
- }
-!else
- !error "Invalid TIMER_SUPPORT"
-!endif
-
MdeModulePkg/Universal/Metronome/Metronome.inf
MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
@@ -954,6 +1104,75 @@
!endif
!endif
+[Components.X64]
+ UefiCpuPkg/CpuDxe/CpuDxe.inf
+
+!if $(TIMER_SUPPORT) == "HPET"
+ PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+!elseif $(TIMER_SUPPORT) == "LAPIC"
+ OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf {
+ <LibraryClasses>
+ NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
+ }
+!else
+ !error "Invalid TIMER_SUPPORT"
+!endif
+
+[Components.AARCH64]
+ ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf
+ ArmPkg/Drivers/CpuDxe/CpuDxe.inf
+ ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
+
+ EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
+ EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
+
+ ArmPkg/Drivers/ArmGicDxe/ArmGicDxe.inf
+ ArmPkg/Drivers/TimerDxe/TimerDxe.inf
+ OvmfPkg/VirtNorFlashDxe/VirtNorFlashDxe.inf {
+ <LibraryClasses>
+ # don't use unaligned CopyMem () on the UEFI varstore NOR flash region
+ BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
+ }
+
+ SecurityPkg/RandomNumberGenerator/RngDxe/RngDxe.inf
+
+ OvmfPkg/PlatformDxe/Platform.inf
+ OvmfPkg/Fdt/VirtioFdtDxe/VirtioFdtDxe.inf
+ OvmfPkg/Fdt/HighMemDxe/HighMemDxe.inf
+ OvmfPkg/VirtioBlkDxe/VirtioBlk.inf
+ OvmfPkg/VirtioScsiDxe/VirtioScsi.inf
+ OvmfPkg/VirtioNetDxe/VirtioNet.inf
+ OvmfPkg/VirtioRngDxe/VirtioRng.inf
+ OvmfPkg/VirtioSerialDxe/VirtioSerial.inf
+
+ MdeModulePkg/Universal/Disk/UdfDxe/UdfDxe.inf
+ OvmfPkg/VirtioFsDxe/VirtioFsDxe.inf
+
+ # SMBIOS Support
+ MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf {
+ <LibraryClasses>
+ NULL|OvmfPkg/Library/SmbiosVersionLib/DetectSmbiosVersionLib.inf
+ }
+
+ # PCI support
+ UefiCpuPkg/CpuMmio2Dxe/CpuMmio2Dxe.inf {
+ <LibraryClasses>
+ NULL|OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.inf
+ }
+ OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf
+ OvmfPkg/VirtioPciDeviceDxe/VirtioPciDeviceDxe.inf
+ OvmfPkg/Virtio10Dxe/Virtio10.inf
+
+ # Video support
+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
+ OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
+
+ # Hash2 Protocol Support
+ SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.inf
+
+ # ACPI Support
+ OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf
+
#------------------------------
# Build the shell
#------------------------------
@@ -970,7 +1189,7 @@
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
!include NetworkPkg/NetworkLibs.dsc.inc
-[Components.X64]
+[Components.X64, Components.AARCH64]
ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf {
<PcdsFixedAtBuild>
## This flag is used to control initialization of the shell library
diff --git a/UefiPayloadPkg/UefiPayloadPkg.fdf b/UefiPayloadPkg/UefiPayloadPkg.fdf
index e788f27cc1..954901918b 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.fdf
+++ b/UefiPayloadPkg/UefiPayloadPkg.fdf
@@ -4,6 +4,7 @@
# Provides drivers and definitions to create uefi payload for bootloaders.
#
# Copyright (c) 2014 - 2020, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2024, Google LLC.
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -153,31 +154,52 @@ INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
INF MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf
INF MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf
-!if $(CRYPTO_PROTOCOL_SUPPORT) == TRUE
-!if $(CRYPTO_DRIVER_EXTERNAL_SUPPORT) == FALSE
-INF CryptoPkg/Driver/CryptoDxe.inf
-!endif
+!if "X64" IN "$(ARCH)"
+ INF UefiCpuPkg/CpuDxe/CpuDxe.inf
+ INF MdeModulePkg/Universal/Metronome/Metronome.inf
+ INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
+
+ !if $(CRYPTO_PROTOCOL_SUPPORT) == TRUE
+ !if $(CRYPTO_DRIVER_EXTERNAL_SUPPORT) == FALSE
+ INF CryptoPkg/Driver/CryptoDxe.inf
+ !endif
+ !endif
+
+ !if $(TIMER_SUPPORT) == "HPET"
+ INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
+ !elseif $(TIMER_SUPPORT) == "LAPIC"
+ INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf
+ !endif
+!elseif "AARCH64" IN "$(ARCH)"
+ INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf
+ INF ArmPkg/Drivers/ArmGicDxe/ArmGicDxe.inf
+ INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf
+
+ INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
+ INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
+ INF OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf
+ INF UefiCpuPkg/CpuMmio2Dxe/CpuMmio2Dxe.inf
+ INF OvmfPkg/Virtio10Dxe/Virtio10.inf
+ INF OvmfPkg/VirtioPciDeviceDxe/VirtioPciDeviceDxe.inf
+ INF OvmfPkg/VirtioBlkDxe/VirtioBlk.inf
+ INF OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
+
+ INF OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
+ INF OvmfPkg/PlatformDxe/Platform.inf
!endif
+
!if $(SECURITY_STUB_ENABLE) == TRUE
-INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
+ INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
!endif
-INF UefiCpuPkg/CpuDxe/CpuDxe.inf
-!if $(TIMER_SUPPORT) == "HPET"
-INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
-!elseif $(TIMER_SUPPORT) == "LAPIC"
-INF OvmfPkg/LocalApicTimerDxe/LocalApicTimerDxe.inf
-!endif
-INF MdeModulePkg/Universal/Metronome/Metronome.inf
-INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
+INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
!if $(DISABLE_RESET_SYSTEM) == FALSE
INF MdeModulePkg/Universal/ResetSystemRuntimeDxe/ResetSystemRuntimeDxe.inf
!endif
-INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf
!if $(PERFORMANCE_MEASUREMENT_ENABLE)
INF MdeModulePkg/Universal/Acpi/FirmwarePerformanceDataTableDxe/FirmwarePerformanceDxe.inf
!endif
diff --git a/UefiPayloadPkg/UniversalPayloadBuild.py b/UefiPayloadPkg/UniversalPayloadBuild.py
index c56194e231..e8b7624635 100644
--- a/UefiPayloadPkg/UniversalPayloadBuild.py
+++ b/UefiPayloadPkg/UniversalPayloadBuild.py
@@ -137,6 +137,9 @@ def BuildUniversalPayload(Args):
elif Args.Arch == 'RISCV64':
BuildArch = "RISCV64"
FitArch = "RISCV64"
+ elif Args.Arch == 'AARCH64':
+ BuildArch = "AARCH64"
+ FitArch = "AARCH64"
else:
print("Incorrect arch option provided")
@@ -312,7 +315,7 @@ def main():
parser = argparse.ArgumentParser(description='For building Universal Payload')
parser.add_argument('-t', '--ToolChain')
parser.add_argument('-b', '--Target', default='DEBUG')
- parser.add_argument('-a', '--Arch', choices=['IA32', 'X64', 'RISCV64'], help='Specify the ARCH for payload entry module. Default build X64 image.', default ='X64')
+ parser.add_argument('-a', '--Arch', choices=['IA32', 'X64', 'RISCV64', 'AARCH64'], help='Specify the ARCH for payload entry module. Default build X64 image.', default ='X64')
parser.add_argument("-D", "--Macro", action="append", default=["UNIVERSAL_PAYLOAD=TRUE"])
parser.add_argument('-i', '--ImageId', type=str, help='Specify payload ID (16 bytes maximal).', default ='UEFI')
parser.add_argument('-q', '--Quiet', action='store_true', help='Disable all build messages except FATAL ERRORS.')