This adds ARM support to the ArmVirtXen platform. As is the case for AARCH64, the ARM port adheres to the ARM Linux boot protocol, i.e., it expects the address of a DTB describing the platform to be passed in r2, and relocates itself at runtime to the actual load time memory offset.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org> --- ArmVirtPkg/ArmVirtXen.dsc | 7 +++---- ArmVirtPkg/ArmVirtXen.fdf | 21 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/ArmVirtPkg/ArmVirtXen.dsc b/ArmVirtPkg/ArmVirtXen.dsc index ac37cd2a4345..4a40987bd3e7 100644 --- a/ArmVirtPkg/ArmVirtXen.dsc +++ b/ArmVirtPkg/ArmVirtXen.dsc @@ -23,7 +23,7 @@ [Defines] PLATFORM_VERSION = 0.1 DSC_SPECIFICATION = 0x00010005 OUTPUT_DIRECTORY = Build/ArmVirtXen-$(ARCH) - SUPPORTED_ARCHITECTURES = AARCH64 + SUPPORTED_ARCHITECTURES = AARCH64|ARM BUILD_TARGETS = DEBUG|RELEASE SKUID_IDENTIFIER = DEFAULT FLASH_DEFINITION = ArmVirtPkg/ArmVirtXen.fdf @@ -64,10 +64,10 @@ [LibraryClasses.common.UEFI_DRIVER] UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf [LibraryClasses.AARCH64.SEC] - ArmLib|ArmPkg/Library/ArmLib/AArch64/AArch64LibSec.inf + ArmLib|ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf [LibraryClasses.ARM.SEC] - ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf + ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibPrePi.inf [BuildOptions] RVCT:*_*_ARM_PLATFORM_FLAGS == --cpu Cortex-A15 -I$(WORKSPACE)/ArmVirtPkg/Include @@ -166,7 +166,6 @@ [Components.common] PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf - ArmLib|ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf ArmPlatformGlobalVariableLib|ArmPlatformPkg/Library/ArmPlatformGlobalVariableLib/PrePi/PrePiArmPlatformGlobalVariableLib.inf SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf diff --git a/ArmVirtPkg/ArmVirtXen.fdf b/ArmVirtPkg/ArmVirtXen.fdf index 97cab4b058f2..f955f7860a6d 100644 --- a/ArmVirtPkg/ArmVirtXen.fdf +++ b/ArmVirtPkg/ArmVirtXen.fdf @@ -52,11 +52,12 @@ [FD.XEN_EFI] # # Implement the Linux kernel header layout so that the Xen loader will identify -# it as something bootable, and execute it with a FDT pointer in x0. This area -# will be reused to store a copy of the FDT so round it up to 8 KB. +# it as something bootable, and execute it with a FDT pointer in x0 or r2. +# This area will be reused to store a copy of the FDT so round it up to 8 KB. # 0x00000000|0x00002000 DATA = { +!if $(ARCH) == AARCH64 0x01, 0x00, 0x00, 0x10, # code0: adr x1, . 0xff, 0x07, 0x00, 0x14, # code1: b 0x2000 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB @@ -67,6 +68,22 @@ [FD.XEN_EFI] 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # res4 0x41, 0x52, 0x4d, 0x64, # magic: "ARM\x64" 0x00, 0x00, 0x00, 0x00 # res5 +!else + 0x08, 0x10, 0x4f, 0xe2, # adr r1, . + 0x02, 0x00, 0xa0, 0xe1, # mov r0, r2 (DTB) + 0x00, 0x00, 0xa0, 0xe1, # nop + 0x00, 0x00, 0xa0, 0xe1, # nop + 0x00, 0x00, 0xa0, 0xe1, # nop + 0x00, 0x00, 0xa0, 0xe1, # nop + 0x00, 0x00, 0xa0, 0xe1, # nop + 0x00, 0x00, 0xa0, 0xe1, # nop + + 0xf6, 0x07, 0x00, 0xea, # b 0x2000 + 0x18, 0x28, 0x6f, 0x01, # magic + 0x00, 0x00, 0x00, 0x00, # start + 0x00, 0x00, 0x20, 0x00, # image size: 2 MB + 0x01, 0x02, 0x03, 0x04 # endiannness flag +!endif } 0x00002000|0x001fe000 -- 1.9.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel