Xen ARM with Virtualization Extensions/ESPRESSObin
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>.