ArmVirtPkg/ArmVirtXen: add ARM support

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.biesheuvel@linaro.org>
Acked-by: Laszlo Ersek <lersek@redhat.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19333 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Ard Biesheuvel 2015-12-17 17:11:33 +00:00 committed by abiesheuvel
parent 4008259841
commit f7de74afdd
2 changed files with 22 additions and 6 deletions

View File

@ -24,7 +24,7 @@
PLATFORM_VERSION = 0.1 PLATFORM_VERSION = 0.1
DSC_SPECIFICATION = 0x00010005 DSC_SPECIFICATION = 0x00010005
OUTPUT_DIRECTORY = Build/ArmVirtXen-$(ARCH) OUTPUT_DIRECTORY = Build/ArmVirtXen-$(ARCH)
SUPPORTED_ARCHITECTURES = AARCH64 SUPPORTED_ARCHITECTURES = AARCH64|ARM
BUILD_TARGETS = DEBUG|RELEASE BUILD_TARGETS = DEBUG|RELEASE
SKUID_IDENTIFIER = DEFAULT SKUID_IDENTIFIER = DEFAULT
FLASH_DEFINITION = ArmVirtPkg/ArmVirtXen.fdf FLASH_DEFINITION = ArmVirtPkg/ArmVirtXen.fdf
@ -65,10 +65,10 @@
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
[LibraryClasses.AARCH64.SEC] [LibraryClasses.AARCH64.SEC]
ArmLib|ArmPkg/Library/ArmLib/AArch64/AArch64LibSec.inf ArmLib|ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf
[LibraryClasses.ARM.SEC] [LibraryClasses.ARM.SEC]
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibSec.inf ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7LibPrePi.inf
[BuildOptions] [BuildOptions]
RVCT:*_*_ARM_PLATFORM_FLAGS == --cpu Cortex-A15 -I$(WORKSPACE)/ArmVirtPkg/Include RVCT:*_*_ARM_PLATFORM_FLAGS == --cpu Cortex-A15 -I$(WORKSPACE)/ArmVirtPkg/Include
@ -167,7 +167,6 @@
PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf
HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
ArmLib|ArmPkg/Library/ArmLib/AArch64/AArch64LibPrePi.inf
MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf
SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf SerialPortLib|OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
} }

View File

@ -53,11 +53,12 @@ NumBlocks = 0x200
# #
# Implement the Linux kernel header layout so that the Xen loader will identify # 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 # it as something bootable, and execute it with a FDT pointer in x0 or r2.
# will be reused to store a copy of the FDT so round it up to 8 KB. # This area will be reused to store a copy of the FDT so round it up to 8 KB.
# #
0x00000000|0x00002000 0x00000000|0x00002000
DATA = { DATA = {
!if $(ARCH) == AARCH64
0x01, 0x00, 0x00, 0x10, # code0: adr x1, . 0x01, 0x00, 0x00, 0x10, # code0: adr x1, .
0xff, 0x07, 0x00, 0x14, # code1: b 0x2000 0xff, 0x07, 0x00, 0x14, # code1: b 0x2000
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB
@ -68,6 +69,22 @@ DATA = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # res4 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # res4
0x41, 0x52, 0x4d, 0x64, # magic: "ARM\x64" 0x41, 0x52, 0x4d, 0x64, # magic: "ARM\x64"
0x00, 0x00, 0x00, 0x00 # res5 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 0x00002000|0x001fe000