* [PATCH 0/2] microvm: add usb support
@ 2020-09-21 11:45 Gerd Hoffmann
2020-09-21 11:45 ` [PATCH 1/2] microvm: add irq table Gerd Hoffmann
2020-09-21 11:45 ` [PATCH 2/2] microvm: add usb support Gerd Hoffmann
0 siblings, 2 replies; 3+ messages in thread
From: Gerd Hoffmann @ 2020-09-21 11:45 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
Sai Pavan Boddu, Gerd Hoffmann, Paolo Bonzini, Richard Henderson
This depends on the xhci sysfs patch series by
Sai Pavan Boddu <sai.pavan.boddu@xilinx.com>
Gerd Hoffmann (2):
microvm: add irq table
microvm: add usb support
include/hw/i386/microvm.h | 25 +++++++++++++++++++++++++
hw/i386/acpi-microvm.c | 20 ++++++++++++++++++++
hw/i386/microvm.c | 12 ++++++++++++
3 files changed, 57 insertions(+)
--
2.27.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/2] microvm: add irq table
2020-09-21 11:45 [PATCH 0/2] microvm: add usb support Gerd Hoffmann
@ 2020-09-21 11:45 ` Gerd Hoffmann
2020-09-21 11:45 ` [PATCH 2/2] microvm: add usb support Gerd Hoffmann
1 sibling, 0 replies; 3+ messages in thread
From: Gerd Hoffmann @ 2020-09-21 11:45 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
Sai Pavan Boddu, Gerd Hoffmann, Paolo Bonzini, Richard Henderson
Add a comment with a table listing the IRQs,
both legacy pc and microvm side-by-side.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/hw/i386/microvm.h | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
index be2d95af4d74..27eadd6c535c 100644
--- a/include/hw/i386/microvm.h
+++ b/include/hw/i386/microvm.h
@@ -27,6 +27,28 @@
#include "hw/acpi/acpi_dev_interface.h"
#include "qom/object.h"
+/*
+ * IRQ | pc | microvm (acpi=on)
+ * --------+------------+------------------
+ * 0 | pit |
+ * 1 | kbd |
+ * 2 | cascade |
+ * 3 | serial 1 |
+ * 4 | serial 0 | serial
+ * 5 | - |
+ * 6 | floppy |
+ * 7 | parallel |
+ * 8 | rtc | rtc (rtc=on)
+ * 9 | acpi | acpi (ged)
+ * 10 | pci lnk |
+ * 11 | pci lnk |
+ * 12 | ps2 |
+ * 13 | fpu |
+ * 14 | ide 0 |
+ * 15 | ide 1 |
+ * 16-23 | pci gsi | virtio
+ */
+
/* Platform virtio definitions */
#define VIRTIO_MMIO_BASE 0xfeb00000
#define VIRTIO_NUM_TRANSPORTS 8
--
2.27.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] microvm: add usb support
2020-09-21 11:45 [PATCH 0/2] microvm: add usb support Gerd Hoffmann
2020-09-21 11:45 ` [PATCH 1/2] microvm: add irq table Gerd Hoffmann
@ 2020-09-21 11:45 ` Gerd Hoffmann
1 sibling, 0 replies; 3+ messages in thread
From: Gerd Hoffmann @ 2020-09-21 11:45 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Sergio Lopez, Michael S. Tsirkin,
Sai Pavan Boddu, Gerd Hoffmann, Paolo Bonzini, Richard Henderson
Wire up "usb=on" machine option. When enabled add a sysbus xhci
controller with 8 ports. Declare it in the ACPI DSDT table so the
guest OS finds it.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/hw/i386/microvm.h | 5 ++++-
hw/i386/acpi-microvm.c | 20 ++++++++++++++++++++
hw/i386/microvm.c | 12 ++++++++++++
3 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
index 27eadd6c535c..e255e787b6d5 100644
--- a/include/hw/i386/microvm.h
+++ b/include/hw/i386/microvm.h
@@ -40,7 +40,7 @@
* 7 | parallel |
* 8 | rtc | rtc (rtc=on)
* 9 | acpi | acpi (ged)
- * 10 | pci lnk |
+ * 10 | pci lnk | xhci (usb=on)
* 11 | pci lnk |
* 12 | ps2 |
* 13 | fpu |
@@ -59,6 +59,9 @@
#define GED_MMIO_BASE_REGS (GED_MMIO_BASE + 0x200)
#define GED_MMIO_IRQ 9
+#define MICROVM_XHCI_BASE 0xfe900000
+#define MICROVM_XHCI_IRQ 10
+
/* Machine type options */
#define MICROVM_MACHINE_PIT "pit"
#define MICROVM_MACHINE_PIC "pic"
diff --git a/hw/i386/acpi-microvm.c b/hw/i386/acpi-microvm.c
index df39c5d3bd90..a2b6c4478f3b 100644
--- a/hw/i386/acpi-microvm.c
+++ b/hw/i386/acpi-microvm.c
@@ -87,6 +87,25 @@ static void acpi_dsdt_add_virtio(Aml *scope,
}
}
+static void acpi_dsdt_add_xhci(Aml *scope, MicrovmMachineState *mms)
+{
+ if (!machine_usb(MACHINE(mms))) {
+ return;
+ }
+
+ Aml *dev = aml_device("XHCI");
+ aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0D10")));
+
+ uint32_t irq = MICROVM_XHCI_IRQ;
+ Aml *crs = aml_resource_template();
+ aml_append(crs, aml_memory32_fixed(MICROVM_XHCI_BASE, 0x4000,
+ 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)
@@ -112,6 +131,7 @@ build_dsdt_microvm(GArray *table_data, BIOSLinker *linker,
GED_MMIO_IRQ, AML_SYSTEM_MEMORY, GED_MMIO_BASE);
acpi_dsdt_add_power_button(sb_scope);
acpi_dsdt_add_virtio(sb_scope, mms);
+ acpi_dsdt_add_xhci(sb_scope, mms);
aml_append(dsdt, sb_scope);
/* ACPI 5.0: Table 7-209 System State Package */
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index 60d32722301f..592dc51ce7bf 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -147,6 +147,18 @@ static void microvm_devices_init(MicrovmMachineState *mms)
x86ms->acpi_dev = HOTPLUG_HANDLER(dev);
}
+ if (x86_machine_is_acpi_enabled(x86ms) && machine_usb(MACHINE(mms))) {
+ DeviceState *dev = qdev_new("sysbus-xhci");
+ qdev_prop_set_uint32(dev, "intrs", 1);
+ qdev_prop_set_uint32(dev, "slots", 64); /* MAXSLOTS */
+ qdev_prop_set_uint32(dev, "p2", 8);
+ qdev_prop_set_uint32(dev, "p3", 8);
+ sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
+ sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, MICROVM_XHCI_BASE);
+ sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
+ x86ms->gsi[MICROVM_XHCI_IRQ]);
+ }
+
if (mms->pic == ON_OFF_AUTO_ON || mms->pic == ON_OFF_AUTO_AUTO) {
qemu_irq *i8259;
--
2.27.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-09-21 11:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-21 11:45 [PATCH 0/2] microvm: add usb support Gerd Hoffmann
2020-09-21 11:45 ` [PATCH 1/2] microvm: add irq table Gerd Hoffmann
2020-09-21 11:45 ` [PATCH 2/2] microvm: add usb support Gerd Hoffmann
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).