USB SoundCard Passthrough not working on arm64

Bug #1920752 reported by Ravishankar
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Invalid
Undecided
Unassigned

Bug Description

Hello,

I am virtualizing a armhf guest on a aarch64 host and was to use my Sound Blaster USB Soundcard as passthrough.

armhf Guest is: Debian Buster
aarch64 host is a jetson nano. KVM is enabled.

Latest qemu is built from sources.
The command I use for running is as follows:

../qemu/build/qemu-system-aarch64 -M virt -m 2048 -smp 2 -cpu host,aarch64=off -enable-kvm \
-kernel vmlinuz-4.19.0-14-armmp-lpae -initrd initrd.img-4.19.0-14-armmp-lpae -append 'root=/dev/vda2' \
-device nec-usb-xhci -device usb-kbd -device usb-mouse -device usb-host,hostbus=1,hostport=2.3 -serial stdio \
-device virtio-gpu-pci,virgl=on,xres=1600,yres=900 -display sdl,gl=on \
-drive if=none,file=hda2.qcow2,format=qcow2,id=hd -device virtio-blk-device,drive=hd \
-netdev user,id=mynet -device virtio-net-device,netdev=mynet \
-bios edk2-arm-code.fd -no-reboot

Where are my lsusb -t shows:

rreddy78@jetson-nano:~/Downloads$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 5000M
    |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/5p, 480M
    |__ Port 2: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 7, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 1: Dev 7, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 3: Dev 8, If 3, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 3: Dev 8, If 1, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 8, If 2, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 3: Dev 8, If 0, Class=Audio, Driver=snd-usb-audio, 12M
        |__ Port 4: Dev 9, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

Within the VM I can see the usb as follows

rreddy78@debian:~$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 480M
    |__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 480M

Its looks like some passthrough as but it seems like only for

 _ Port 3: Dev 8, If 3, Class=Human Interface Device, Driver=usbhid, 12M

I am not sure if passthrough even works because this post I saw

https://community.arm.com/developer/ip-products/system/f/embedded-forum/48031/usb-pass-through-in-qemu-command-line-for-arm-machines/168764#168764

Revision history for this message
Philippe Mathieu-Daudé (philmd) wrote :

Hi, do you see errors on stderr when running with "-d guest_errors"?
If so can you attach the log produced by using "-D guest_errors.log -d guest_errors"?

Revision history for this message
Ravishankar (rreddy78) wrote :

Not much.

Here is the log

gic_cpu_read: Bad offset fc
gic_cpu_read: Bad offset fc
virtio_mmio_write: attempt to write guest features with guest_features_sel > 0 in legacy mode
virtio_mmio_write: attempt to write guest features with guest_features_sel > 0 in legacy mode

Revision history for this message
Ravishankar (rreddy78) wrote :

This time I used it differently i.e:

rreddy78@jetson-nano:~/debian-buster-qemu$ lsusb -s 1:8
Bus 001 Device 008: ID 041e:324d Creative Technology, Ltd

And

-device usb-host,vendorid=0x041e,productid=0x324d -D guest_errors.log -d guest_errors

Revision history for this message
Gerd Hoffmann (kraxel-redhat) wrote :

Can you record usb traffic (add pcap=<file> to usb-host)?

Revision history for this message
Ravishankar (rreddy78) wrote :

I ran it as follows:

 qemu-system-aarch64 -M virt -m 2048 -smp 2 -cpu host,aarch64=off -enable-kvm -kernel vmlinuz-4.19.0-14-armmp-lpae -initrd initrd.img-4.19.0-14-armmp-lpae -append 'root=/dev/vda2' -device nec-usb-xhci -device usb-kbd -device usb-mouse -device usb-host,pcap=test.pcap,hostbus=1,hostport=2.1 -serial stdio -device virtio-gpu-pci,virgl=on,xres=1600,yres=900 -display sdl,gl=on -drive if=none,file=hda2.qcow2,format=qcow2,id=hd -device virtio-blk-device,drive=hd -netdev user,id=mynet -device virtio-net-device,netdev=mynet -bios edk2-arm-code.fd -no-reboot

But the pcap file is empty:

file test.pcap
test.pcap: empty

Revision history for this message
Ravishankar (rreddy78) wrote :

Hello,

You can close this bug as as a simple usb-audio switch is working fine for me:
I just added -device usb-audio and set the -device nec-usb-xhci and sound within the qemu is working fine..

qemu-system-aarch64 -M virt -m 2048 -smp 2 -cpu host,aarch64=off -enable-kvm -kernel vmlinuz-4.19.0-14-armmp-lpae -initrd initrd.img-4.19.0-14-armmp-lpae -append 'root=/dev/vda2' -device nec-usb-xhci,id=xhci -device usb-kbd -device usb-mouse -device usb-audio -serial stdio -device virtio-gpu-pci,virgl=on,xres=1600,yres=900 -display sdl,gl=on -drive if=none,file=hda2.qcow2,format=qcow2,id=hd -device virtio-blk-device,drive=hd -netdev user,id=mynet -device virtio-net-device,netdev=mynet -bios edk2-arm-code.fd -no-reboot

Revision history for this message
Ravishankar (rreddy78) wrote :

One more point. The solution above is not usb passthrough.
I just noticed that qemu needs to be configured for usb passthrough. I am trying that out now

Configure with --enable-libusb
  libusb libusb (for usb passthrough)

Revision history for this message
Thomas Huth (th-huth) wrote :

Closing as requested in comment #6

Changed in qemu:
status: New → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.