On Fri, Oct 11, 2024 at 5:05 AM Daniel Henrique Barboza <[email protected]> wrote: > > Also add a new page, docs/specs/riscv-aia.rst, where we're documenting > the state of AIA support in QEMU w.r.t the controllers being emulated or > not depending on the AIA and accelerator settings. > > Signed-off-by: Daniel Henrique Barboza <[email protected]>
Reviewed-by: Alistair Francis <[email protected]> Alistair > --- > docs/specs/index.rst | 1 + > docs/specs/riscv-aia.rst | 83 ++++++++++++++++++++++++++++++++++++++ > docs/system/riscv/virt.rst | 7 ++++ > 3 files changed, 91 insertions(+) > create mode 100644 docs/specs/riscv-aia.rst > > diff --git a/docs/specs/index.rst b/docs/specs/index.rst > index 6495ed5ed9..9a7d61161f 100644 > --- a/docs/specs/index.rst > +++ b/docs/specs/index.rst > @@ -36,3 +36,4 @@ guest hardware that is specific to QEMU. > vmgenid > rapl-msr > rocker > + riscv-aia > diff --git a/docs/specs/riscv-aia.rst b/docs/specs/riscv-aia.rst > new file mode 100644 > index 0000000000..8097e2f897 > --- /dev/null > +++ b/docs/specs/riscv-aia.rst > @@ -0,0 +1,83 @@ > +.. _riscv-aia: > + > +RISC-V AIA support for RISC-V machines > +====================================== > + > +AIA (Advanced Interrupt Architecture) support is implemented in the ``virt`` > +RISC-V machine for TCG and KVM accelerators. > + > +The support consists of two main modes: > + > +- "aia=aplic": adds one or more APLIC (Advanced Platform Level Interrupt > Controller) > + devices > +- "aia=aplic-imsic": adds one or more APLIC device and an IMSIC (Incoming MSI > + Controller) device for each CPU > + > +From an user standpoint, these modes will behave the same regardless of the > accelerator > +used. From a developer standpoint the accelerator settings will change what > it being > +emulated in userspace versus what is being emulated by an in-kernel irqchip. > + > +When running TCG, all controllers are emulated in userspace, including > machine mode > +(m-mode) APLIC and IMSIC (when applicable). > + > +When running KVM: > + > +- no m-mode is provided, so there is no m-mode APLIC or IMSIC emulation > regardless of > + the AIA mode chosen > +- with "aia=aplic", s-mode APLIC will be emulated by userspace > +- with "aia=aplic-imsic" there are two possibilities. If no additional KVM > option > + is provided there will be no APLIC or IMSIC emulation in userspace, and > the virtual > + machine will use the provided in-kernel APLIC and IMSIC controllers. If > the user > + chooses to use the irqchip in split mode via "-accel > kvm,kernel-irqchip=split", > + s-mode APLIC will be emulated while using the s-mode IMSIC from the irqchip > + > +The following table summarizes how the AIA and accelerator options defines > what > +we will emulate in userspace: > + > + > +.. list-table:: How AIA and accel options changes controller emulation > + :widths: 25 25 25 25 25 25 25 > + :header-rows: 1 > + > + * - Accel > + - Accel props > + - AIA type > + - APLIC m-mode > + - IMSIC m-mode > + - APLIC s-mode > + - IMSIC s-mode > + * - tcg > + - --- > + - aplic > + - emul > + - n/a > + - emul > + - n/a > + * - tcg > + - --- > + - aplic-imsic > + - emul > + - emul > + - emul > + - emul > + * - kvm > + - --- > + - aplic > + - n/a > + - n/a > + - emul > + - n/a > + * - kvm > + - none > + - aplic-imsic > + - n/a > + - n/a > + - in-kernel > + - in-kernel > + * - kvm > + - irqchip=split > + - aplic-imsic > + - n/a > + - n/a > + - emul > + - in-kernel > diff --git a/docs/system/riscv/virt.rst b/docs/system/riscv/virt.rst > index 9a06f95a34..8cbedf73ef 100644 > --- a/docs/system/riscv/virt.rst > +++ b/docs/system/riscv/virt.rst > @@ -110,6 +110,13 @@ The following machine-specific options are supported: > MSIs. When not specified, this option is assumed to be "none" which selects > SiFive PLIC to handle wired interrupts. > > + This option also interacts with '-accel kvm'. When using "aia=aplic-imsic" > + with KVM, it is possible to set the use of the kernel irqchip in split mode > + by using "-accel kvm,kernel-irqchip=split". In this case the ``virt`` > machine > + will emulate the APLIC controller instead of using the APLIC controller > from > + the irqchip. See :ref:`riscv-aia` for more details on all available AIA > + modes. > + > - aia-guests=nnn > > The number of per-HART VS-level AIA IMSIC pages to be emulated for a guest > -- > 2.45.2 > >
