
The first patch fixes an out-of-bounds access, and makes the calculation of maximum transfer size more straightforward. It also makes overriding the maximum transfer size easier for split transactions
2nd and 3rd patch cleanup and restructure the current code in preparation for the split support.
Patch 4 and 5 add the actual support for CONTROL and BULK transactions.
Patch 6 adds support for INTERUPT splits.
The patch series uses the same logic as the earlier patch series, but is otherwise a rewrite.
With the patch series, all my LS/FS devices enumerate behind the RPi 1 onboard hub and an external hub.
Interrupt transfers have been tested with a Logitech K400 and a noname wired keyboard. Both work if "stdin" includes usbkbd prior to usb start, and u-boot has been configured with CONFIG_USB_KEYBOARD=y and CONFIG_SYS_USB_EVENT_POLL=y (but only one at a time).
Stefan Brüns (6): usb: dwc2: Fix out-of-bounds access, fix chunk size usb: dwc2: Simplify wait_for_chhltd(), remove ignore_ack usb: dwc2: split transfer core from outer loop usb: dwc2: add helper function for setting SPLIT HC registers usb: dwc2: Implement SPLIT transaction support usb: dwc2: Add SPLIT INTERRUPT transaction support
drivers/usb/host/dwc2.c | 280 ++++++++++++++++++++++++++++++++---------------- drivers/usb/host/dwc2.h | 1 + 2 files changed, 187 insertions(+), 94 deletions(-)