Re: [PATCH v8 3/3] HID: cp2112: Fwnode Support
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2023-03-06 10:49:35
Also in:
linux-devicetree
On Thu, Mar 02, 2023 at 06:06:06PM +0100, Benjamin Tissoires wrote:
On Mar 01 2023, Andy Shevchenko wrote:quoted
On Tue, Feb 28, 2023 at 01:05:54PM -0600, Daniel Kaehn wrote:
...
quoted
[1]: https://stackoverflow.com/a/60855157/2511795Thanks Andy for your help here, and thanks for that link. I am trying to test Danny's patch as I want to use it for my HID CI, being an owner of a CP2112 device myself. The current setup is using out of the tree patches [2] which are implementing a platform i2c-hid support and some manual addition of a I2C-HID device on top of it. This works fine but gets busted every now and then when the tree sees a change that conflicts with these patches. So with Danny's series, I thought I could have an SSDT override to declare that very same device instead of patching my kernel before testing it. Of course, it gets tricky because I need to run that under qemu. I am currently stuck at the "sharing the firmware_node from usb with HID" step and I'd like to know if you could help me. On my laptop, if I plug the CP2112 (without using a USB hub), I can get: $> ls -l /sys/bus/hid/devices/0003:10C4:EA90.* lrwxrwxrwx. 1 root root 0 Mar 2 17:02 /sys/bus/hid/devices/0003:10C4:EA90.0079 -> ../../../devices/pci0000:00/0000:00:14.0/usb2/2-9/2-9:1.0/0003:10C4:EA90.0079 $> ls -l /sys/bus/usb/devices/2-9*/firmware_node lrwxrwxrwx. 1 root root 0 Mar 2 17:03 /sys/bus/usb/devices/2-9:1.0/firmware_node -> ../../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:15/device:16/device:25 lrwxrwxrwx. 1 root root 0 Mar 2 17:02 /sys/bus/usb/devices/2-9/firmware_node -> ../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:15/device:16/device:25 So AFAIU the USB device is properly assigned a firmware node. My dsdt also shows the "Device (RHUB)" and I guess everything is fine.
Yes, so far so good.
However, playing with qemu is not so easy.
I am running qemu with the following arguments (well, almost because I
have a wrapper script on top of it and I also run the compiled kernel
from the current tree):
#> qemu-system-x86_64 -bios /usr/share/edk2/ovmf/OVMF_CODE.fd \
-netdev user,id=hostnet0 \
-device virtio-net-pci,netdev=hostnet0 \
-m 4G \
-enable-kvm \
-cpu host \
-device qemu-xhci -usb \
-device 'usb-host,vendorid=0x10c4,productid=0xea90' \
-cdrom ~/Downloads/Fedora-Workstation-Live-x86_64-37-1.7.isoSide question, where can I get those blobs from (EDKII and Fedora Live CD)? I'm using Debian unstable.
And this is what I get: #> ls -l /sys/bus/hid/devices/0003:10C4:EA90.* lrwxrwxrwx 1 root root 0 Mar 2 16:10 /sys/bus/hid/devices/0003:10C4:EA90.0001 -> ../../../devices/pci0000:00/0000:00:06.0/usb2/2-1/2-1:1.0/0003:10C4:EA90.0001 #> ls -l /sys/bus/usb/devices/2-1*/firmware_node ls: cannot access '/sys/bus/usb/devices/2-1*/firmware_node': No such file or directory Looking at the DSDT, I do not see any reference to the USB hub, so I wonder if the firmware_node needs to be populated first in the DSDT.
So, where QEMU takes DSDT (ACPI tables in general) from? Can you patch that? I believe that's the problem in qemu.
Also note that if I plug the CP2112 over a docking station, I lose the firmware_node sysfs entries on the host too.
This seems like a lack of firmware node propagating in the USB hub code in the Linux kernel.
Do you think it would be achievable to emulate that over qemu and use a mainline kernel without patches?
As long as qemu provides correct DSDT it should work I assume.
[2] https://gitlab.freedesktop.org/bentiss/gitlab-kernel-ci/-/tree/master/VM
-- With Best Regards, Andy Shevchenko