-usb still gives the PIIX3 UHCI on pc and the ICH9 EHCI plus three
UHCI companions on q35. In May Peter asked whether -usb could give the
PC machines an xHCI on new machine versions and Gerd agreed [1].
Daniel's secure-devices series keeps UHCI/OHCI/EHCI in the
virtualization scope partly because -usb still creates them [2]; older
machine types keep doing so. From pc-i440fx-12.0 and pc-q35-12.0 on,
-usb creates qemu-xhci.

Patch 1 adds the 12.0 machine types so the rest has a version to hang
off; drop it once the real "hw: add compat machines for 12.0" lands.

Open question: where the controller sits. It takes 1d.0 on both
machines; patch 2 says why the PIIX3's own USB function is out. Slot
1d has no hardware meaning on i440fx. Alternatives: an interrupt-pin
property on qemu-xhci so 01.2 can use INTD like the UHCI, or an
automatic slot as spapr does for nec-usb-xhci, which shifts user
-device addresses on the new types by one slot. I prefer the fixed
slot.

Checked:

- SeaBIOS and OVMF (Ubuntu 24.04) drive the xHCI at 00:1d.0 and find
  the keyboard on both machines.
- Debian 12 under KVM: xhci_hcd at 1d.0, HID at 480 Mb/s, with MSI and
  with -global qemu-xhci.msi=off -global qemu-xhci.msix=off (INTx
  routed, IRQ 10 on pc and 16 on q35). pc-q35-11.2 unchanged: ehci-pci
  plus three uhci_hcd.
- pc-i440fx-11.2 and pc-q35-11.2 with -usb: a running Debian guest
  saved by master at d29412cca5 and loaded by this series keeps its
  USB devices and interrupts.
- check-qtest-x86_64 passes.

Windows 7 and earlier do not include an xHCI driver; usb.rst now says
to use an older machine type or -device piix3-usb-uhci for them.

Jamin's usbredir-server series turns auto-hub off on new machine
types [3]. With both, -usb on the new types gives four USB 2 root
ports and no automatic hub. The two series are independent; Jamin's
compat entries have to move to hw_compat_11_2 either way.

[1] https://lore.kernel.org/qemu-devel/[email protected]/
[2] 
https://lore.kernel.org/qemu-devel/[email protected]/
[3] 
https://lore.kernel.org/qemu-devel/[email protected]/

Junjie Cao (4):
  hw/i386: add 12.0 machine types (NOT FOR MERGE)
  hw/i386: let -usb create qemu-xhci on new pc and q35 machine types
  tests/qtest: check which host controller -usb creates on pc and q35
  docs/system/devices/usb: describe -usb after the qemu-xhci switch

 docs/system/devices/usb.rst       |  23 +++--
 hw/core/machine.c                 |   3 +
 hw/i386/Kconfig                   |   2 +
 hw/i386/pc.c                      |  21 +++++
 hw/i386/pc_piix.c                 |  24 +++++-
 hw/i386/pc_q35.c                  |  25 +++++-
 include/hw/core/boards.h          |   3 +
 include/hw/i386/pc.h              |   7 ++
 qemu-options.hx                   |   9 +-
 tests/qtest/meson.build           |   3 +
 tests/qtest/usb-pc-default-test.c | 135 ++++++++++++++++++++++++++++++
 11 files changed, 236 insertions(+), 19 deletions(-)
 create mode 100644 tests/qtest/usb-pc-default-test.c

-- 
2.43.0


Reply via email to