From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PULL 12/12] docs/system: Document the arm virt board
Date: Mon, 20 Jul 2020 13:56:21 +0100 [thread overview]
Message-ID: <20200720125621.13460-13-peter.maydell@linaro.org> (raw)
In-Reply-To: <20200720125621.13460-1-peter.maydell@linaro.org>
Document the arm 'virt' board, which has been undocumented
for far too long given that it is the main recommended board
type for arm guests.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-id: 20200713175746.5936-5-peter.maydell@linaro.org
---
docs/system/arm/virt.rst | 161 +++++++++++++++++++++++++++++++++++++
docs/system/target-arm.rst | 1 +
MAINTAINERS | 1 +
3 files changed, 163 insertions(+)
create mode 100644 docs/system/arm/virt.rst
diff --git a/docs/system/arm/virt.rst b/docs/system/arm/virt.rst
new file mode 100644
index 00000000000..6621ab7205d
--- /dev/null
+++ b/docs/system/arm/virt.rst
@@ -0,0 +1,161 @@
+'virt' generic virtual platform (``virt``)
+==========================================
+
+The `virt` board is a platform which does not correspond to any
+real hardware; it is designed for use in virtual machines.
+It is the recommended board type if you simply want to run
+a guest such as Linux and do not care about reproducing the
+idiosyncrasies and limitations of a particular bit of real-world
+hardware.
+
+This is a "versioned" board model, so as well as the ``virt`` machine
+type itself (which may have improvements, bugfixes and other minor
+changes between QEMU versions) a version is provided that guarantees
+to have the same behaviour as that of previous QEMU releases, so
+that VM migration will work between QEMU versions. For instance the
+``virt-5.0`` machine type will behave like the ``virt`` machine from
+the QEMU 5.0 release, and migration should work between ``virt-5.0``
+of the 5.0 release and ``virt-5.0`` of the 5.1 release. Migration
+is not guaranteed to work between different QEMU releases for
+the non-versioned ``virt`` machine type.
+
+Supported devices
+"""""""""""""""""
+
+The virt board supports:
+
+- PCI/PCIe devices
+- Flash memory
+- One PL011 UART
+- An RTC
+- The fw_cfg device that allows a guest to obtain data from QEMU
+- A PL061 GPIO controller
+- An optional SMMUv3 IOMMU
+- hotpluggable DIMMs
+- hotpluggable NVDIMMs
+- An MSI controller (GICv2M or ITS). GICv2M is selected by default along
+ with GICv2. ITS is selected by default with GICv3 (>= virt-2.7). Note
+ that ITS is not modeled in TCG mode.
+- 32 virtio-mmio transport devices
+- running guests using the KVM accelerator on aarch64 hardware
+- large amounts of RAM (at least 255GB, and more if using highmem)
+- many CPUs (up to 512 if using a GICv3 and highmem)
+- Secure-World-only devices if the CPU has TrustZone:
+
+ - A second PL011 UART
+ - A secure flash memory
+ - 16MB of secure RAM
+
+Supported guest CPU types:
+
+- ``cortex-a7`` (32-bit)
+- ``cortex-a15`` (32-bit; the default)
+- ``cortex-a53`` (64-bit)
+- ``cortex-a57`` (64-bit)
+- ``cortex-a72`` (64-bit)
+- ``host`` (with KVM only)
+- ``max`` (same as ``host`` for KVM; best possible emulation with TCG)
+
+Note that the default is ``cortex-a15``, so for an AArch64 guest you must
+specify a CPU type.
+
+Graphics output is available, but unlike the x86 PC machine types
+there is no default display device enabled: you should select one from
+the Display devices section of "-device help". The recommended option
+is ``virtio-gpu-pci``; this is the only one which will work correctly
+with KVM. You may also need to ensure your guest kernel is configured
+with support for this; see below.
+
+Machine-specific options
+""""""""""""""""""""""""
+
+The following machine-specific options are supported:
+
+secure
+ Set ``on``/``off`` to enable/disable emulating a guest CPU which implements the
+ Arm Security Extensions (TrustZone). The default is ``off``.
+
+virtualization
+ Set ``on``/``off`` to enable/disable emulating a guest CPU which implements the
+ Arm Virtualization Extensions. The default is ``off``.
+
+highmem
+ Set ``on``/``off`` to enable/disable placing devices and RAM in physical
+ address space above 32 bits. The default is ``on`` for machine types
+ later than ``virt-2.12``.
+
+gic-version
+ Specify the version of the Generic Interrupt Controller (GIC) to provide.
+ Valid values are:
+
+ ``2``
+ GICv2
+ ``3``
+ GICv3
+ ``host``
+ Use the same GIC version the host provides, when using KVM
+ ``max``
+ Use the best GIC version possible (same as host when using KVM;
+ currently same as ``3``` for TCG, but this may change in future)
+
+its
+ Set ``on``/``off`` to enable/disable ITS instantiation. The default is ``on``
+ for machine types later than ``virt-2.7``.
+
+iommu
+ Set the IOMMU type to create for the guest. Valid values are:
+
+ ``none``
+ Don't create an IOMMU (the default)
+ ``smmuv3``
+ Create an SMMUv3
+
+ras
+ Set ``on``/``off`` to enable/disable reporting host memory errors to a guest
+ using ACPI and guest external abort exceptions. The default is off.
+
+Linux guest kernel configuration
+""""""""""""""""""""""""""""""""
+
+The 'defconfig' for Linux arm and arm64 kernels should include the
+right device drivers for virtio and the PCI controller; however some older
+kernel versions, especially for 32-bit Arm, did not have everything
+enabled by default. If you're not seeing PCI devices that you expect,
+then check that your guest config has::
+
+ CONFIG_PCI=y
+ CONFIG_VIRTIO_PCI=y
+ CONFIG_PCI_HOST_GENERIC=y
+
+If you want to use the ``virtio-gpu-pci`` graphics device you will also
+need::
+
+ CONFIG_DRM=y
+ CONFIG_DRM_VIRTIO_GPU=y
+
+Hardware configuration information for bare-metal programming
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+The ``virt`` board automatically generates a device tree blob ("dtb")
+which it passes to the guest. This provides information about the
+addresses, interrupt lines and other configuration of the various devices
+in the system. Guest code can rely on and hard-code the following
+addresses:
+
+- Flash memory starts at address 0x0000_0000
+
+- RAM starts at 0x4000_0000
+
+All other information about device locations may change between
+QEMU versions, so guest code must look in the DTB.
+
+QEMU supports two types of guest image boot for ``virt``, and
+the way for the guest code to locate the dtb binary differs:
+
+- For guests using the Linux kernel boot protocol (this means any
+ non-ELF file passed to the QEMU ``-kernel`` option) the address
+ of the DTB is passed in a register (``r2`` for 32-bit guests,
+ or ``x0`` for 64-bit guests)
+
+- For guests booting as "bare-metal" (any other kind of boot),
+ the DTB is at the start of RAM (0x4000_0000)
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
index 163ab915592..4c5b0e4aab8 100644
--- a/docs/system/target-arm.rst
+++ b/docs/system/target-arm.rst
@@ -92,6 +92,7 @@ undocumented; you can get a complete list by running
arm/collie
arm/sx1
arm/stellaris
+ arm/virt
Arm CPU features
================
diff --git a/MAINTAINERS b/MAINTAINERS
index 935ccb3ab31..5e8616821a5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -880,6 +880,7 @@ L: qemu-arm@nongnu.org
S: Maintained
F: hw/arm/virt*
F: include/hw/arm/virt.h
+F: docs/system/arm/virt.rst
Xilinx Zynq
M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
--
2.20.1
next prev parent reply other threads:[~2020-07-20 13:06 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-20 12:56 [PULL 00/12] target-arm queue Peter Maydell
2020-07-20 12:56 ` [PULL 01/12] hw/arm/virt: Enable MTE via a machine property Peter Maydell
2020-07-20 12:56 ` [PULL 02/12] hw/arm/virt: Error for MTE enabled with KVM Peter Maydell
2020-07-20 12:56 ` [PULL 03/12] hw/arm/virt: Disable memory hotplug when MTE is enabled Peter Maydell
2020-07-20 12:56 ` [PULL 04/12] util: Implement qemu_get_thread_id() for OpenBSD Peter Maydell
2020-07-20 12:56 ` [PULL 05/12] qdev: Move doc comments from qdev.c to qdev-core.h Peter Maydell
2020-07-20 12:56 ` [PULL 06/12] qdev: Document qdev_unrealize() Peter Maydell
2020-07-20 12:56 ` [PULL 07/12] qdev: Document GPIO related functions Peter Maydell
2020-07-20 12:56 ` [PULL 08/12] hw/arm/armsse: Assert info->num_cpus is in-bounds in armsse_realize() Peter Maydell
2020-07-20 12:56 ` [PULL 09/12] docs/system: Briefly document canon-a1100 board Peter Maydell
2020-07-20 12:56 ` [PULL 10/12] docs/system: Briefly document collie board Peter Maydell
2020-07-20 12:56 ` [PULL 11/12] docs/system: Briefly document gumstix boards Peter Maydell
2020-07-20 12:56 ` Peter Maydell [this message]
2020-07-20 21:24 ` [PULL 00/12] target-arm queue Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200720125621.13460-13-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).