aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2020-08-24 12:13:09 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-08-24 12:13:09 +0100
commit07d914cb9489f7acbd91ed675355674c8a5545b0 (patch)
tree97c1e898a78cddac7c3e1e12aa11f2fbb5694cc2 /docs
parentdd8014e4e904e895435aae9f11a686f072762782 (diff)
parentb34aa5129e9c3aff890b4f4bcc84962e94185629 (diff)
downloadqemu-07d914cb9489f7acbd91ed675355674c8a5545b0.zip
qemu-07d914cb9489f7acbd91ed675355674c8a5545b0.tar.gz
qemu-07d914cb9489f7acbd91ed675355674c8a5545b0.tar.bz2
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20200824' into staging
target-arm queue: * hw/cpu/a9mpcore: Verify the machine use Cortex-A9 cores * hw/arm/smmuv3: Implement SMMUv3.2 range-invalidation * docs/system/arm: Document the Xilinx Versal Virt board * target/arm: Make M-profile NOCP take precedence over UNDEF * target/arm: Use correct FPST for VCMLA, VCADD on fp16 * target/arm: Various cleanups preparing for fp16 support # gpg: Signature made Mon 24 Aug 2020 10:47:14 BST # gpg: using RSA key E1A5C593CD419DE28E8315CF3C2525ED14360CDE # gpg: issuer "peter.maydell@linaro.org" # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" [ultimate] # gpg: aka "Peter Maydell <pmaydell@gmail.com>" [ultimate] # gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" [ultimate] # Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83 15CF 3C25 25ED 1436 0CDE * remotes/pmaydell/tags/pull-target-arm-20200824: (27 commits) target/arm: Use correct FPST for VCMLA, VCADD on fp16 target/arm: Implement FPST_STD_F16 fpstatus target/arm: Make A32/T32 use new fpstatus_ptr() API target/arm: Replace A64 get_fpstatus_ptr() with generic fpstatus_ptr() target/arm: Delete unused ARM_FEATURE_CRC target/arm/translate.c: Delete/amend incorrect comments target/arm: Delete unused VFP_DREG macros target/arm: Remove ARCH macro target/arm: Convert T32 coprocessor insns to decodetree target/arm: Do M-profile NOCP checks early and via decodetree target/arm: Tidy up disas_arm_insn() target/arm: Convert A32 coprocessor insns to decodetree target/arm: Separate decode from handling of coproc insns target/arm: Pull handling of XScale insns out of disas_coproc_insn() docs/system/arm: Document the Xilinx Versal Virt board hw/arm/smmuv3: Advertise SMMUv3.2 range invalidation hw/arm/smmuv3: Support HAD and advertise SMMUv3.1 support hw/arm/smmuv3: Let AIDR advertise SMMUv3.0 support hw/arm/smmuv3: Fix IIDR offset hw/arm/smmuv3: Get prepared for range invalidation ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'docs')
-rw-r--r--docs/system/arm/xlnx-versal-virt.rst176
-rw-r--r--docs/system/target-arm.rst1
2 files changed, 177 insertions, 0 deletions
diff --git a/docs/system/arm/xlnx-versal-virt.rst b/docs/system/arm/xlnx-versal-virt.rst
new file mode 100644
index 0000000..2602d0f
--- /dev/null
+++ b/docs/system/arm/xlnx-versal-virt.rst
@@ -0,0 +1,176 @@
+Xilinx Versal Virt (``xlnx-versal-virt``)
+=========================================
+
+Xilinx Versal is a family of heterogeneous multi-core SoCs
+(System on Chip) that combine traditional hardened CPUs and I/O
+peripherals in a Processing System (PS) with runtime programmable
+FPGA logic (PL) and an Artificial Intelligence Engine (AIE).
+
+More details here:
+https://www.xilinx.com/products/silicon-devices/acap/versal.html
+
+The family of Versal SoCs share a single architecture but come in
+different parts with different speed grades, amounts of PL and
+other differences.
+
+The Xilinx Versal Virt board in QEMU is a model of a virtual board
+(does not exist in reality) with a virtual Versal SoC without I/O
+limitations. Currently, we support the following cores and devices:
+
+Implemented CPU cores:
+
+- 2 ACPUs (ARM Cortex-A72)
+
+Implemented devices:
+
+- Interrupt controller (ARM GICv3)
+- 2 UARTs (ARM PL011)
+- An RTC (Versal built-in)
+- 2 GEMs (Cadence MACB Ethernet MACs)
+- 8 ADMA (Xilinx zDMA) channels
+- 2 SD Controllers
+- OCM (256KB of On Chip Memory)
+- DDR memory
+
+QEMU does not yet model any other devices, including the PL and the AI Engine.
+
+Other differences between the hardware and the QEMU model:
+
+- QEMU allows the amount of DDR memory provided to be specified with the
+ ``-m`` argument. If a DTB is provided on the command line then QEMU will
+ edit it to include suitable entries describing the Versal DDR memory ranges.
+
+- QEMU provides 8 virtio-mmio virtio transports; these start at
+ address ``0xa0000000`` and have IRQs from 111 and upwards.
+
+Running
+"""""""
+If the user provides an Operating System to be loaded, we expect users
+to use the ``-kernel`` command line option.
+
+Users can load firmware or boot-loaders with the ``-device loader`` options.
+
+When loading an OS, QEMU generates a DTB and selects an appropriate address
+where it gets loaded. This DTB will be passed to the kernel in register x0.
+
+If there's no ``-kernel`` option, we generate a DTB and place it at 0x1000
+for boot-loaders or firmware to pick it up.
+
+If users want to provide their own DTB, they can use the ``-dtb`` option.
+These DTBs will have their memory nodes modified to match QEMU's
+selected ram_size option before they get passed to the kernel or FW.
+
+When loading an OS, we turn on QEMU's PSCI implementation with SMC
+as the PSCI conduit. When there's no ``-kernel`` option, we assume the user
+provides EL3 firmware to handle PSCI.
+
+A few examples:
+
+Direct Linux boot of a generic ARM64 upstream Linux kernel:
+
+.. code-block:: bash
+
+ $ qemu-system-aarch64 -M xlnx-versal-virt -m 2G \
+ -serial mon:stdio -display none \
+ -kernel arch/arm64/boot/Image \
+ -nic user -nic user \
+ -device virtio-rng-device,bus=virtio-mmio-bus.0 \
+ -drive if=none,index=0,file=hd0.qcow2,id=hd0,snapshot \
+ -drive file=qemu_sd.qcow2,if=sd,index=0,snapshot \
+ -device virtio-blk-device,drive=hd0 -append root=/dev/vda
+
+Direct Linux boot of PetaLinux 2019.2:
+
+.. code-block:: bash
+
+ $ qemu-system-aarch64 -M xlnx-versal-virt -m 2G \
+ -serial mon:stdio -display none \
+ -kernel petalinux-v2019.2/Image \
+ -append "rdinit=/sbin/init console=ttyAMA0,115200n8 earlycon=pl011,mmio,0xFF000000,115200n8" \
+ -net nic,model=cadence_gem,netdev=net0 -netdev user,id=net0 \
+ -device virtio-rng-device,bus=virtio-mmio-bus.0,rng=rng0 \
+ -object rng-random,filename=/dev/urandom,id=rng0
+
+Boot PetaLinux 2019.2 via ARM Trusted Firmware (2018.3 because the 2019.2
+version of ATF tries to configure the CCI which we don't model) and U-boot:
+
+.. code-block:: bash
+
+ $ qemu-system-aarch64 -M xlnx-versal-virt -m 2G \
+ -serial stdio -display none \
+ -device loader,file=petalinux-v2018.3/bl31.elf,cpu-num=0 \
+ -device loader,file=petalinux-v2019.2/u-boot.elf \
+ -device loader,addr=0x20000000,file=petalinux-v2019.2/Image \
+ -nic user -nic user \
+ -device virtio-rng-device,bus=virtio-mmio-bus.0,rng=rng0 \
+ -object rng-random,filename=/dev/urandom,id=rng0
+
+Run the following at the U-Boot prompt:
+
+.. code-block:: bash
+
+ Versal>
+ fdt addr $fdtcontroladdr
+ fdt move $fdtcontroladdr 0x40000000
+ fdt set /timer clock-frequency <0x3dfd240>
+ setenv bootargs "rdinit=/sbin/init maxcpus=1 console=ttyAMA0,115200n8 earlycon=pl011,mmio,0xFF000000,115200n8"
+ booti 20000000 - 40000000
+ fdt addr $fdtcontroladdr
+
+Boot Linux as DOM0 on Xen via U-Boot:
+
+.. code-block:: bash
+
+ $ qemu-system-aarch64 -M xlnx-versal-virt -m 4G \
+ -serial stdio -display none \
+ -device loader,file=petalinux-v2019.2/u-boot.elf,cpu-num=0 \
+ -device loader,addr=0x30000000,file=linux/2018-04-24/xen \
+ -device loader,addr=0x40000000,file=petalinux-v2019.2/Image \
+ -nic user -nic user \
+ -device virtio-rng-device,bus=virtio-mmio-bus.0,rng=rng0 \
+ -object rng-random,filename=/dev/urandom,id=rng0
+
+Run the following at the U-Boot prompt:
+
+.. code-block:: bash
+
+ Versal>
+ fdt addr $fdtcontroladdr
+ fdt move $fdtcontroladdr 0x20000000
+ fdt set /timer clock-frequency <0x3dfd240>
+ fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=/uart@ff000000 dom0_mem=640M bootscrub=0 maxcpus=1 timer_slop=0"
+ fdt set /chosen xen,dom0-bootargs "rdinit=/sbin/init clk_ignore_unused console=hvc0 maxcpus=1"
+ fdt mknode /chosen dom0
+ fdt set /chosen/dom0 compatible "xen,multiboot-module"
+ fdt set /chosen/dom0 reg <0x00000000 0x40000000 0x0 0x03100000>
+ booti 30000000 - 20000000
+
+Boot Linux as Dom0 on Xen via ARM Trusted Firmware and U-Boot:
+
+.. code-block:: bash
+
+ $ qemu-system-aarch64 -M xlnx-versal-virt -m 4G \
+ -serial stdio -display none \
+ -device loader,file=petalinux-v2018.3/bl31.elf,cpu-num=0 \
+ -device loader,file=petalinux-v2019.2/u-boot.elf \
+ -device loader,addr=0x30000000,file=linux/2018-04-24/xen \
+ -device loader,addr=0x40000000,file=petalinux-v2019.2/Image \
+ -nic user -nic user \
+ -device virtio-rng-device,bus=virtio-mmio-bus.0,rng=rng0 \
+ -object rng-random,filename=/dev/urandom,id=rng0
+
+Run the following at the U-Boot prompt:
+
+.. code-block:: bash
+
+ Versal>
+ fdt addr $fdtcontroladdr
+ fdt move $fdtcontroladdr 0x20000000
+ fdt set /timer clock-frequency <0x3dfd240>
+ fdt set /chosen xen,xen-bootargs "console=dtuart dtuart=/uart@ff000000 dom0_mem=640M bootscrub=0 maxcpus=1 timer_slop=0"
+ fdt set /chosen xen,dom0-bootargs "rdinit=/sbin/init clk_ignore_unused console=hvc0 maxcpus=1"
+ fdt mknode /chosen dom0
+ fdt set /chosen/dom0 compatible "xen,multiboot-module"
+ fdt set /chosen/dom0 reg <0x00000000 0x40000000 0x0 0x03100000>
+ booti 30000000 - 20000000
+
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
index 4c5b0e4..afdb37e 100644
--- a/docs/system/target-arm.rst
+++ b/docs/system/target-arm.rst
@@ -93,6 +93,7 @@ undocumented; you can get a complete list by running
arm/sx1
arm/stellaris
arm/virt
+ arm/xlnx-versal-virt
Arm CPU features
================