Xen ARM with Virtualization Extensions/ESPRESSObin

From Xen

The EspressoBin is a single board computer with a Marvell Armada 3720 SoC, driven by two Cortex-A53 cores (64-bit ARMv8). In comparison to other SBCs it is I/O oriented, with three Gb-Ethernet ports, a SATA port and a mini-PCIe slot. Unfortunately it has no SMMU. There is a 1GB and a 2G DRAM version.

The board is well supported in mainline Linux, most peripherals works well since Linux v4.12. The arm64 Linux defconfig enables support for both the SoC and Xen. The device tree name is armada-3720-espressobin.dtb.

Xen support

The SoC features a non-standard UART, which is supported since Xen 4.11-rc1. It should work on an older Xen release by backporting commits 33fcfac4ee76 (UART driver) and 16a31ca73516 (GICv3 DT fix).

With a supported Xen version, the standard compilation instructions work fine. When support for Xen earlyprintk is required, add CONFIG_EARLY_PRINTK=mvebu to your build command line. The resulting image will only work on that SoC then.

Booting Xen

The board comes with a usable U-Boot in SPI flash, so it boots without any SD card inserted or without the need to supply a special firmware image. You can load Xen from SD card, USB or via TFTP. If in doubt, use the following load addresses:

Marvell>> setenv xen_addr_r 0x0
Marvell>> setenv fdt_addr_r 0x780000
Marvell>> setenv kernel_addr_r 0x800000
Marvell>> setenv ramdisk_addr_r 0x4000000

Load the Xen image, the .dtb file, the Dom0 kernel and optionally an initrd image file to the respective locations (via fatload, ext4load or via tftpboot). Then setup the Xen device tree node:

Marvell>> fdt addr $fdt_addr_r
Marvell>> fdt resize
Marvell>> fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=serial0 dom0_mem=384M"
Marvell>> fdt set /chosen \#address-cells <1>
Marvell>> fdt set /chosen \#size-cells <1>
Marvell>> fdt mknod /chosen module@0
Marvell>> fdt resize
Marvell>> fdt set /chosen/module@0 compatible "xen,linux-zimage" "xen,multiboot-module"
Marvell>> fdt set /chosen/module@0 reg <$kernel_addr_r 0x1800000>
Marvell>> setenv bootargs "console=hvc0 ro root=/dev/mmcblk0p2 clk_ignore_unused rootwait earlycon=xenboot"

Adjust the Linux command line and the Dom0 memory size to your needs. Finally boot Xen:

Marvell>> booti $xen_addr_r - $fdt_addr_r

Although the shipped U-Boot does not support the "source" command, you can store those commands in the environment and save it with "saveenv".

For general usage instructions please refer to the generic Xen ARM with Virtualization Extensions page.

The initial EspressoBin Xen support and this wiki page were created by Amit Singh Tomar <amittomer25@gmail.com>.