Changing our Virtual Machine USB Controller Model from qemu-xhci to nec-xhci

Changing our Virtual Machine USB Controller Model from qemu-xhci to nec-xhci

Hi everyone,

In this post, we will change our Virtual Machine USB Controller from the default qemu-xhci model to nec-xhci.

After attempting to pass a USB Audio Class 2.0 device using the generic Standard QEMU XHCI controller, I was having some sound issues, particularly with constant pops and distortions while bistreaming audio. After checking for solutions, it seems we can use the nec-xhci controller. This is what I did, and it fixed the sound issues I was having.

Before doing any changes, this is how the qemu-xhci USB controller appears in the Windows Device Manager:

4 - Standard USB 3.0 eXtensible Host Controller

In this machine, the Fresco Logic PCI Express card is passed through IOMMU, and the Standard USB 3.0 eXtensible Host Controller is the virtualized qemu-xhci controller.

Here is the XML detail of it inside virt-manager:

2 - VM configuration with USB controller as qemu-xhci

We can simply change model="qemu-xhci" to model="nec-xhci" to change the USB controller model to the NEC/Renesas variation:

3 - VM configuration with USB controller as nec-xhci

After clicking “Apply” and starting up our Virtual Machine again, we now see that the controller is now reported as Renesas eXtensible Host Controller:

1 - Renesas USB 3.0 eXtensible Host Controller