[Pkg-xen-devel] What's missing for arm64 Xen boot with FDT via Grub in Debian Bullseye?

Alex Bennée alex.bennee at linaro.org
Fri May 28 13:49:14 BST 2021


Hi,

I'm currently trying to pull together the threads for booting Xen on
Debian. I'm currently doing this within QEMU's TCG emulation and the
"virt" machine model:

  -machine type=virt,virtualization=on,gic-version=3 \
  -cpu max,pauth-impdef=on

with the firmware on my Ubuntu machine:

  -drive if=pflash,file=/usr/share/AAVMF/AAVMF_CODE.fd,format=raw,readonly=on -drive if=pflash,file=$HOME/images/AAVMF_VARS.fd,format=raw

(qemu-efi-aarch64 Version: 0~20180205.c0d9813c-2ubuntu0.3)

When booting this way I get the Grub menu and Xen is loaded by Grub but
falls over later:

  (XEN) MODULE[0]: 00000000f5869000 - 00000000f59b60c8 Xen
  (XEN) MODULE[1]: 000000013857d000 - 0000000138580000 Device Tree
  (XEN) MODULE[2]: 00000000f73a1000 - 00000000f8da0780 Kernel
  (XEN) MODULE[3]: 00000000f59b7000 - 00000000f739f99b Ramdisk
  (XEN)
  (XEN) CMDLINE[00000000f73a1000]:chosen placeholder root=UUID=435201aa-c5cf-4e7a-8107-5eef28844188 ro console=hvc0
  (XEN)
  (XEN) Command line: placeholder dom0_mem=2G loglvl=all guest_loglvl=all no-real-mode edd=off
  (XEN) parameter "placeholder" unknown!
  (XEN) parameter "no-real-mode" unknown!
  (XEN) parameter "edd" unknown!
  (XEN) Domain heap initialised
  (XEN) Booting using Device Tree
  (XEN) Platform: Generic System
  (XEN)
  (XEN) ****************************************
  (XEN) Panic on CPU 0:
  (XEN) Unable to find a compatible timer in the device tree
  (XEN) ****************************************

It seems like there are bits of the DT missing. I can however
successfully boot Xen with the Linux guest using the guest-loader device
and bypassing the firmware/boot code step. This gives:

  (XEN) MODULE[0]: 0000000040200000 - 000000004034d0c8 Xen
  (XEN) MODULE[1]: 0000000048000000 - 0000000048100000 Device Tree
  (XEN) MODULE[2]: 0000000046000000 - 0000000046eb2200 Kernel
  (XEN)
  (XEN) CMDLINE[0000000046000000]:chosen root=/dev/sda2 console=hvc0 earlyprintk=xen
  (XEN)
  (XEN) Command line: dom0_mem=4G dom0_max_vcpus=4
  (XEN) Domain heap initialised
  (XEN) Booting using Device Tree
  (XEN) Platform: Generic System
  (XEN) Taking dtuart configuration from /chosen/stdout-path
  (XEN) Looking for dtuart at "/pl011 at 9000000", options ""
   Xen 4.15.1-pre
  (XEN) Xen version 4.15.1-pre (alex.bennee@) (aarch64-linux-gnu-gcc (Debian 8.3.0-2) 8.3.0) debug=y Tue May 18 09:34:55 UTC 2021
  (XEN) Latest ChangeSet:
  (XEN) build-id: a50d8f03a1a15662ac7c4e5f73f2f544a6739df2
  (XEN) Processor: 411fd070: "ARM Limited", variant: 0x1, part 0xd07, rev 0x0
  (XEN) 64-bit Execution:
  (XEN)   Processor Features: 0000000001000222 0000000000000000
  (XEN)     Exception Levels: EL3:No EL2:64+32 EL1:64+32 EL0:64+32
  (XEN)     Extensions: FloatingPoint AdvancedSIMD GICv3-SysReg
  (XEN)   Debug Features: 0000000010305106 0000000000000000
  (XEN)   Auxiliary Features: 0000000000000000 0000000000000000
  (XEN)   Memory Model Features: 0000000000001124 0000000000000000
  (XEN)   ISA Features:  0000000000011120 0000000000000000
  (XEN) 32-bit Execution:
  (XEN)   Processor Features: 00000131:10011001
  (XEN)     Instruction Sets: AArch32 A32 Thumb Thumb-2 Jazelle
  (XEN)     Extensions: GenericTimer
  (XEN)   Debug Features: 03010066
  (XEN)   Auxiliary Features: 00000000
  (XEN)   Memory Model Features: 10101105 40000000 01260000 02102211
  (XEN)  ISA Features: 02101110 13112111 21232042 01112131 00011142 00011121
  (XEN) Using SMC Calling Convention v1.0
  (XEN) Using PSCI v0.2
  (XEN) SMP: Allowing 8 CPUs
  (XEN) enabled workaround for: ARM erratum 832075
  (XEN) enabled workaround for: ARM erratum 834220
  (XEN) enabled workaround for: ARM erratum 1319367
  (XEN) Generic Timer IRQ: phys=30 hyp=26 virt=27 Freq: 62500 KHz
  (XEN) GICv3 initialization:
  (XEN)       gic_dist_addr=0x00000008000000
  (XEN)       gic_maintenance_irq=25
  (XEN)       gic_rdist_stride=0
  (XEN)       gic_rdist_regions=1
  (XEN)       redistributor regions:
  (XEN)         - region 0: 0x000000080a0000 - 0x00000009000000
  (XEN) GICv3: 256 lines, (IID 0000043b).
  (XEN) GICv3: CPU0: Found redistributor in region 0 @000000004001c000

Attempting to boot with acpi=on still sees Grub attempt to use DT to
boot the hypervisor. However selecting the kernel directly boots with
ACPI (which is a shame as I'd like to see what FDT it gets presented
with).

The full command line for booting via the guest-loader is:

  ./qemu-system-aarch64 \
    -machine virt,virtualization=on,gic-version=3 \
    -cpu max,pauth-impdef=on \
    -serial mon:stdio \
    -netdev user,id=net1,hostfwd=tcp::2222-:22 \
    -device virtio-net-pci,netdev=net1 \
    -device virtio-scsi-pci \
    -drive file=/dev/zvol/hackpool-0/debian-buster-arm64,id=hd0,index=0,if=none,format=raw \
    -device scsi-hd,drive=hd0 \
    -display none \
    -m 16384 \
    -kernel ~/lsrc/xen/xen.build.arm64-xen/xen/xen \
    -append "dom0_mem=4G dom0_max_vcpus=4" \
    -device guest-loader,addr=0x46000000,kernel=$HOME/lsrc/linux.git/builds/arm64/arch/arm64/boot/Image,bootargs="root=/dev/sda2 console=hvc0 earlyprintk=xen" \
    -smp 8

So some questions:

  - is Xen on arm64 tested on Debian Bullseye? If so what platform?
  - how do I tell Grub to do a straight FDT boot with the DT from the firmware?
  - are there any missing pieces I should be aware of?

I appreciate that ACPI is the preferred enterprise way of booting but at
the moment I think FDT is probably preferred because:

  - lack of real HW with decent ACPI (my MachiatoBin only boots with DT)
  - I want to try additional hypervisors who don't have ACPI aware implementations

That said if I can get an ACPI version of Xen booting via Grub that
would be an improvement.

-- 
Alex Bennée



More information about the Pkg-xen-devel mailing list