Hello,
This series brings support for the AMD Versal Gen 2 (versal2) SoC in
QEMU. This SoC is the next iteration of the existing Versal SoC.
It is organized as follows:
- The first patch is a fix in the Cadence GEM model. Some registers
were badly initialized when the device was built with a number of
priority queues greater than 2. This was confusing the Linux driver.
- The next and biggest part of the series performs refactoring of the
existing versal SoC implementation. This consists in:
- splitting existing device types into base/concrete classes,
- moving from an in-place to dynamic device creation approach in
the SoC code for flexibility,
- describing the SoC using a new structure called VersalMap,
- moving the DTB creation logic in the SoC code itself alongside
device creation.
Patches are split such that each device is individually converted to
use this new approach. Behaviour changes are minimal and are
emphasised in the commit messages. This gets the SoC code ready for
versal2 addition and leverage the fact that Versal family SoCs are
quite similar in term of architecture.
- versal2 SoC support is then added by adding the corresponding
VersalMap description. This allows to reuse the existing code
without duplication and almost no special case.
- The amd-versal2-virt machine is finally added, following the same
idea as amd-versal-virt. The documentation and tests are updated
accordingly.
Note that the xlnx-versal-virt machine is renamed amd-versal-virt to
follow current branding guidelines and stay coherent with the new
amd-versal2-virt machine. The xlnx-versal-virt name is kept as an alias
to amd-versal-virt for command line backward compatibility.
Thanks
Luc
Francisco Iglesias (1):
hw/intc/arm_gicv3: Introduce a 'first-cpu-index' property
Luc Michel (47):
hw/net/cadence_gem: fix register mask initialization
hw/arm/xlnx-versal: split the xlnx-versal type
hw/arm/xlnx-versal: prepare for FDT creation
hw/arm/xlnx-versal: uart: refactor creation
hw/arm/xlnx-versal: canfd: refactor creation
hw/arm/xlnx-versal: sdhci: refactor creation
hw/arm/xlnx-versal: gem: refactor creation
hw/arm/xlnx-versal: adma: refactor creation
hw/arm/xlnx-versal: xram: refactor creation
hw/arm/xlnx-versal: usb: refactor creation
hw/arm/xlnx-versal: efuse: refactor creation
hw/arm/xlnx-versal: ospi: refactor creation
hw/arm/xlnx-versal: VersalMap: add support for OR'ed IRQs
hw/arm/xlnx-versal: PMC IOU SCLR: refactor creation
hw/arm/xlnx-versal: bbram: refactor creation
hw/arm/xlnx-versal: trng: refactor creation
hw/arm/xlnx-versal: rtc: refactor creation
hw/arm/xlnx-versal: cfu: refactor creation
hw/arm/xlnx-versal: crl: refactor creation
hw/arm/xlnx-versal-virt: virtio: refactor creation
hw/arm/xlnx-versal: refactor CPU cluster creation
hw/arm/xlnx-versal: add the mp_affinity property to the CPU mapping
hw/arm/xlnx-versal: instantiate the GIC ITS in the APU
hw/arm/xlnx-versal: add support for multiple GICs
hw/arm/xlnx-versal: add support for GICv2
hw/arm/xlnx-versal: rpu: refactor creation
hw/arm/xlnx-versal: ocm: refactor creation
hw/arm/xlnx-versal: ddr: refactor creation
hw/arm/xlnx-versal: add the versal_get_num_cpu accessor
hw/misc/xlnx-versal-crl: remove unnecessary include directives
hw/misc/xlnx-versal-crl: split into base/concrete classes
hw/misc/xlnx-versal-crl: refactor device reset logic
hw/arm/xlnx-versal: reconnect the CRL to the other devices
hw/arm/xlnx-versal: use hw/arm/bsa.h for timer IRQ indices
hw/arm/xlnx-versal: tidy up
hw/misc/xlnx-versal-crl: add the versal2 version
hw/arm/xlnx-versal: add a per_cluster_gic switch to
VersalCpuClusterMap
hw/arm/xlnx-versal: add the target field in IRQ descriptor
target/arm/tcg/cpu64: add the cortex-a78ae CPU
hw/arm/xlnx-versal: add versal2 SoC
hw/arm/xlnx-versal-virt: rename the machine to amd-versal-virt
hw/arm/xlnx-versal-virt: split into base/concrete classes
hw/arm/xlnx-versal-virt: tidy up
docs/system/arm/xlnx-versal-virt: update supported devices
docs/system/arm/xlnx-versal-virt: add a note about dumpdtb
hw/arm/xlnx-versal-virt: add the xlnx-versal2-virt machine
tests/functional/test_aarch64_xlnx_versal: test the versal2 machine
docs/system/arm/xlnx-versal-virt.rst | 80 +-
include/hw/arm/xlnx-versal-version.h | 16 +
include/hw/arm/xlnx-versal.h | 341 +--
include/hw/intc/arm_gicv3_common.h | 1 +
include/hw/misc/xlnx-versal-crl.h | 378 ++-
hw/arm/xlnx-versal-virt.c | 742 ++----
hw/arm/xlnx-versal.c | 2460 +++++++++++++-----
hw/intc/arm_gicv3_common.c | 3 +-
hw/intc/arm_gicv3_cpuif.c | 2 +-
hw/misc/xlnx-versal-crl.c | 602 ++++-
hw/net/cadence_gem.c | 2 +-
target/arm/tcg/cpu64.c | 75 +
tests/functional/test_aarch64_xlnx_versal.py | 10 +-
13 files changed, 3051 insertions(+), 1661 deletions(-)
create mode 100644 include/hw/arm/xlnx-versal-version.h
--
2.50.0