zephyr/drivers/usb
Tomasz Moń 8d1f7b3bef drivers: udc_dwc2: Fix incomplete iso handling race
Incomplete iso IN/OUT is just informative and its occurrence does not
prevent the endpoint from actually transmitting/receiving data. Such
"late" isochronous transfers, which are perfectly fine according to USB
specification, were observed on Windows host with nRF54H20 running
explicit feedback sample operating at High-Speed.

The incorrect handling manifested itself with "ISO RX buffer too small"
error message. The faulty scenario was:
  * incompISOIN handler does not find any matching endpoint
  * incompISOOUT handler disables endpoint, discards buffer and sets
    rearm flag
  * next DWC2 interrupt handler iteration after reading GINTSTS
  * XferCompl interrupt on iso IN endpoint
  * XferCompl interrupt on iso OUT endpoint
      - transfer was actually happening to the buffer discarded in
	incompISOOUT handler
      - XferCompl handler modified the next buffer
  * GOUTNakEff interrupt, iso OUT endpoint EPDIS bit is set
  * EPDisbld interrupt, rearm flag set
      - the buffer modified by XferCompl is used and fails because it is
	not large enough

Modify the sequence so it accounts for host actions and the above faulty
scenario no longer causes any problems.

Signed-off-by: Tomasz Moń <tomasz.mon@nordicsemi.no>
2025-07-29 08:52:20 -04:00
..
bc12 drivers: kconfig: fix typo 2025-07-01 10:58:54 -10:00
common drivers: udc_dwc2: Optimize endpoint interrupt handling 2025-05-20 12:47:34 +02:00
device drivers: usb: device: prevent USB clock disable in sleep mode 2025-07-22 08:11:49 -04:00
udc drivers: udc_dwc2: Fix incomplete iso handling race 2025-07-29 08:52:20 -04:00
uhc usb: host: allow status stage to be omitted 2025-06-27 08:52:22 -10:00
uvb
CMakeLists.txt
Kconfig