All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Laurent Vivier <lvivier@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Thomas Huth <thuth@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	Sergio Lopez <slp@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Shannon Zhao <shannon.zhaosl@gmail.com>,
	qemu-arm@nongnu.org, Gerd Hoffmann <kraxel@redhat.com>,
	Igor Mammedov <imammedo@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Richard Henderson <rth@twiddle.net>
Subject: [PATCH v7 09/21] microvm/acpi: add acpi_dsdt_add_virtio() for x86
Date: Tue,  8 Sep 2020 14:10:38 +0200	[thread overview]
Message-ID: <20200908121050.1162-10-kraxel@redhat.com> (raw)
In-Reply-To: <20200908121050.1162-1-kraxel@redhat.com>

Makes x86 linux kernel find virtio-mmio devices automatically.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Sergio Lopez <slp@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/i386/acpi-microvm.c | 52 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
index 06ef33949f5f..b9ce3768b263 100644
--- a/hw/i386/acpi-microvm.c
+++ b/hw/i386/acpi-microvm.c
@@ -21,6 +21,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu/cutils.h"
 #include "qapi/error.h"
 
 #include "exec/memory.h"
@@ -32,10 +33,60 @@
 #include "hw/boards.h"
 #include "hw/i386/fw_cfg.h"
 #include "hw/i386/microvm.h"
+#include "hw/virtio/virtio-mmio.h"
 
 #include "acpi-common.h"
 #include "acpi-microvm.h"
 
+static void acpi_dsdt_add_virtio(Aml *scope,
+                                 MicrovmMachineState *mms)
+{
+    gchar *separator;
+    long int index;
+    BusState *bus;
+    BusChild *kid;
+
+    bus = sysbus_get_default();
+    QTAILQ_FOREACH(kid, &bus->children, sibling) {
+        DeviceState *dev = kid->child;
+        Object *obj = object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MMIO);
+
+        if (obj) {
+            VirtIOMMIOProxy *mmio = VIRTIO_MMIO(obj);
+            VirtioBusState *mmio_virtio_bus = &mmio->bus;
+            BusState *mmio_bus = &mmio_virtio_bus->parent_obj;
+
+            if (QTAILQ_EMPTY(&mmio_bus->children)) {
+                continue;
+            }
+            separator = g_strrstr(mmio_bus->name, ".");
+            if (!separator) {
+                continue;
+            }
+            if (qemu_strtol(separator + 1, NULL, 10, &index) != 0) {
+                continue;
+            }
+
+            uint32_t irq = mms->virtio_irq_base + index;
+            hwaddr base = VIRTIO_MMIO_BASE + index * 512;
+            hwaddr size = 512;
+
+            Aml *dev = aml_device("VR%02u", (unsigned)index);
+            aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005")));
+            aml_append(dev, aml_name_decl("_UID", aml_int(index)));
+            aml_append(dev, aml_name_decl("_CCA", aml_int(1)));
+
+            Aml *crs = aml_resource_template();
+            aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE));
+            aml_append(crs,
+                       aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH,
+                                     AML_EXCLUSIVE, &irq, 1));
+            aml_append(dev, aml_name_decl("_CRS", crs));
+            aml_append(scope, dev);
+        }
+    }
+}
+
 static void
 build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
                    MicrovmMachineState *mms)
@@ -60,6 +111,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
     build_ged_aml(sb_scope, GED_DEVICE, HOTPLUG_HANDLER(mms->acpi_dev),
                   GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
     acpi_dsdt_add_power_button(sb_scope);
+    acpi_dsdt_add_virtio(sb_scope, mms);
     aml_append(dsdt, sb_scope);
 
     /* ACPI 5.0: Table 7-209 System State Package */
-- 
2.27.0



  parent reply	other threads:[~2020-09-08 12:23 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-08 12:10 [PATCH v7 00/21] microvm: add acpi support Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 01/21] microvm: name qboot binary qboot.rom Gerd Hoffmann
2020-09-08 12:17   ` Philippe Mathieu-Daudé
2020-09-08 12:10 ` [PATCH v7 02/21] seabios: add microvm config, update build rules Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 03/21] seabios: add bios-microvm.bin binary Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 04/21] acpi: ged: add control regs Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 05/21] acpi: ged: add x86 device variant Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 06/21] acpi: move acpi_dsdt_add_power_button() to ged Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 07/21] microvm: make virtio irq base runtime configurable Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 08/21] microvm/acpi: add minimal acpi support Gerd Hoffmann
2020-09-08 12:10 ` Gerd Hoffmann [this message]
2020-09-08 12:10 ` [PATCH v7 10/21] microvm/acpi: use GSI 16-23 for virtio Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 11/21] microvm/acpi: use seabios with acpi=on Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 12/21] microvm/acpi: disable virtio-mmio cmdline hack Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 13/21] x86: constify x86_machine_is_*_enabled Gerd Hoffmann
2020-09-08 12:17   ` Philippe Mathieu-Daudé
2020-09-08 12:10 ` [PATCH v7 14/21] x86: move acpi_dev from pc/microvm Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 15/21] x86: move cpu hotplug from pc to x86 Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 16/21] microvm: wire up hotplug Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 17/21] tests/acpi: allow microvm test data updates Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 18/21] tests/acpi: allow override blkdev Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 19/21] tests/acpi: add microvm test Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 20/21] tests/acpi: update expected data files for microvm Gerd Hoffmann
2020-09-08 12:10 ` [PATCH v7 21/21] microvm: enable ramfb Gerd Hoffmann

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=20200908121050.1162-10-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=shannon.zhaosl@gmail.com \
    --cc=slp@redhat.com \
    --cc=thuth@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.