qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Shashi Mallela <shashi.mallela@linaro.org>
To: peter.maydell@linaro.org, leif@nuviainc.com, rad@semihalf.com,
	mst@redhat.com, imammedo@redhat.com
Cc: eric.auger@redhat.com, qemu-arm@nongnu.org,
	qemu-devel@nongnu.org, narmstrong@baylibre.com
Subject: [PATCH v8 09/10] hw/arm/virt: add ITS support in virt GIC
Date: Thu, 12 Aug 2021 12:53:40 -0400	[thread overview]
Message-ID: <20210812165341.40784-10-shashi.mallela@linaro.org> (raw)
In-Reply-To: <20210812165341.40784-1-shashi.mallela@linaro.org>

Included creation of ITS as part of virt platform GIC
initialization. This Emulated ITS model now co-exists with kvm
ITS and is enabled in absence of kvm irq kernel support in a
platform.

Signed-off-by: Shashi Mallela <shashi.mallela@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
---
 hw/arm/virt.c         | 28 ++++++++++++++++++++++++++--
 include/hw/arm/virt.h |  2 ++
 target/arm/kvm_arm.h  |  4 ++--
 3 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 81eda46b0b..3cea2aa039 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -583,6 +583,12 @@ static void create_its(VirtMachineState *vms)
     const char *itsclass = its_class_name();
     DeviceState *dev;
 
+    if (!strcmp(itsclass, "arm-gicv3-its")) {
+        if (!vms->tcg_its) {
+            itsclass = NULL;
+        }
+    }
+
     if (!itsclass) {
         /* Do nothing if not supported */
         return;
@@ -620,7 +626,7 @@ static void create_v2m(VirtMachineState *vms)
     vms->msi_controller = VIRT_MSI_CTRL_GICV2M;
 }
 
-static void create_gic(VirtMachineState *vms)
+static void create_gic(VirtMachineState *vms, MemoryRegion *mem)
 {
     MachineState *ms = MACHINE(vms);
     /* We create a standalone GIC */
@@ -654,6 +660,14 @@ static void create_gic(VirtMachineState *vms)
                              nb_redist_regions);
         qdev_prop_set_uint32(vms->gic, "redist-region-count[0]", redist0_count);
 
+        if (!kvm_irqchip_in_kernel()) {
+            if (vms->tcg_its) {
+                object_property_set_link(OBJECT(vms->gic), "sysmem",
+                                         OBJECT(mem), &error_fatal);
+                qdev_prop_set_bit(vms->gic, "has-lpi", true);
+            }
+        }
+
         if (nb_redist_regions == 2) {
             uint32_t redist1_capacity =
                     vms->memmap[VIRT_HIGH_GIC_REDIST2].size / GICV3_REDIST_SIZE;
@@ -2043,7 +2057,7 @@ static void machvirt_init(MachineState *machine)
 
     virt_flash_fdt(vms, sysmem, secure_sysmem ?: sysmem);
 
-    create_gic(vms);
+    create_gic(vms, sysmem);
 
     virt_cpu_post_init(vms, sysmem);
 
@@ -2746,6 +2760,12 @@ static void virt_instance_init(Object *obj)
     } else {
         /* Default allows ITS instantiation */
         vms->its = true;
+
+        if (vmc->no_tcg_its) {
+            vms->tcg_its = false;
+        } else {
+            vms->tcg_its = true;
+        }
     }
 
     /* Default disallows iommu instantiation */
@@ -2790,6 +2810,10 @@ type_init(machvirt_machine_init);
 
 static void virt_machine_6_1_options(MachineClass *mc)
 {
+    VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
+
+    /* qemu ITS was introduced with 6.2 */
+    vmc->no_tcg_its = true;
 }
 DEFINE_VIRT_MACHINE_AS_LATEST(6, 1)
 
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
index 9661c46699..b461b8d261 100644
--- a/include/hw/arm/virt.h
+++ b/include/hw/arm/virt.h
@@ -120,6 +120,7 @@ struct VirtMachineClass {
     MachineClass parent;
     bool disallow_affinity_adjustment;
     bool no_its;
+    bool no_tcg_its;
     bool no_pmu;
     bool claim_edge_triggered_timers;
     bool smbios_old_sys_ver;
@@ -141,6 +142,7 @@ struct VirtMachineState {
     bool highmem;
     bool highmem_ecam;
     bool its;
+    bool tcg_its;
     bool virt;
     bool ras;
     bool mte;
diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h
index 34f8daa377..0613454975 100644
--- a/target/arm/kvm_arm.h
+++ b/target/arm/kvm_arm.h
@@ -525,8 +525,8 @@ static inline const char *its_class_name(void)
         /* KVM implementation requires this capability */
         return kvm_direct_msi_enabled() ? "arm-its-kvm" : NULL;
     } else {
-        /* Software emulation is not implemented yet */
-        return NULL;
+        /* Software emulation based model */
+        return "arm-gicv3-its";
     }
 }
 
-- 
2.27.0



  parent reply	other threads:[~2021-08-12 17:05 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-12 16:53 [PATCH v8 00/10] GICv3 LPI and ITS feature implementation Shashi Mallela
2021-08-12 16:53 ` [PATCH v8 01/10] hw/intc: GICv3 ITS initial framework Shashi Mallela
2021-08-12 16:53 ` [PATCH v8 02/10] hw/intc: GICv3 ITS register definitions added Shashi Mallela
2021-08-12 16:53 ` [PATCH v8 03/10] hw/intc: GICv3 ITS command queue framework Shashi Mallela
2021-08-12 16:53 ` [PATCH v8 04/10] hw/intc: GICv3 ITS Command processing Shashi Mallela
2021-08-13  7:51   ` Neil Armstrong
2021-08-12 16:53 ` [PATCH v8 05/10] hw/intc: GICv3 ITS Feature enablement Shashi Mallela
2021-08-12 16:53 ` [PATCH v8 06/10] hw/intc: GICv3 redistributor ITS processing Shashi Mallela
2021-08-19 13:21   ` Peter Maydell
2021-08-12 16:53 ` [PATCH v8 07/10] hw/arm/sbsa-ref: add ITS support in SBSA GIC Shashi Mallela
2021-08-19 13:27   ` Peter Maydell
2021-08-23 15:05     ` shashi.mallela
2021-09-02 12:42     ` Leif Lindholm
2021-09-02 12:51       ` Peter Maydell
2021-09-03 12:01         ` Leif Lindholm
2021-09-03 12:09           ` Peter Maydell
2021-09-23 16:00       ` Peter Maydell
2021-10-15 12:23         ` Leif Lindholm
2021-11-09 13:43           ` Peter Maydell
2021-11-09 20:42             ` Leif Lindholm
2021-11-09 21:21               ` Peter Maydell
2021-11-09 22:52                 ` Leif Lindholm
2021-11-11 16:55                   ` Peter Maydell
2021-11-11 18:21                     ` Leif Lindholm
2021-08-12 16:53 ` [PATCH v8 08/10] tests/data/acpi/virt: Add IORT files for ITS Shashi Mallela
2021-08-19 13:21   ` Peter Maydell
2021-08-12 16:53 ` Shashi Mallela [this message]
2021-08-12 16:53 ` [PATCH v8 10/10] tests/data/acpi/virt: Update " Shashi Mallela
2021-08-19 13:22   ` 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=20210812165341.40784-10-shashi.mallela@linaro.org \
    --to=shashi.mallela@linaro.org \
    --cc=eric.auger@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=leif@nuviainc.com \
    --cc=mst@redhat.com \
    --cc=narmstrong@baylibre.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rad@semihalf.com \
    /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).