I have just submitted the patch for interrupt out endpoints upstream. This should fix the issue of Linux gadget keyboard being rejected (which does affect any DUT which uses u-boot, not only RPIs). With this accepted, you should be able to use and Rpi3 as KVM (Linux gadget keyboard) and e.g. a Pine64 as DUT (which uses interrupts for transfers) or maybe an Rpi4 (which has as XHCI controller and not the awkward DWC2). @lnussel: For the missing/incomplete support of the SetIdle request by the gadget support, I think you can/have to implement that in userspace. Taking the code from https://www.kernel.org/doc/Documentation/usb/gadget_hid.txt , just add a 500ms timeout to the select() loop and send the last report again.