summaryrefslogtreecommitdiff
path: root/docs/reference
diff options
context:
space:
mode:
authorJonathan Bell <[email protected]>2023-01-05 13:36:51 +0000
committerJonathan Bell <[email protected]>2023-01-24 11:53:28 +0000
commit73b0047efc4cc657a92b356dd9b5046a44277b33 (patch)
tree14ed2fd02c6be4bcd79f6524c125d1dc6892289c /docs/reference
parentc3e47c31ccd42b144a8a770ed56b8cdc4c2932cc (diff)
rp2040: avoid device-mode state machine hang
Don't mark IN buffers as available during the last 200us of a full-speed frame. This avoids a situation seen with the USB2.0 hub on a Raspberry Pi 4 where a late IN token before the next full-speed SOF can cause port babble and a corrupt ACK packet. The nature of the data corruption has a chance to cause device lockup. Use the next SOF to mark delayed buffers as available. This reduces available Bulk IN bandwidth by approximately 20%, and requires that the SOF interrupt is enabled while these transfers are ongoing. Inherit the top-level enable from the corresponding Pico-SDK flag. Applications that will not use the device in a situation where it could be plugged into a Pi 4 or Pi 400 (for example, when directly connected to a commodity hub or other host) can turn off the flag in the SDK. v2: use a field in hw_endpoint to mark pending. v3: Partial rewrite following review comments - Stub functions out if the workaround is not required - Only force-enable SOF while any vulnerable endpoints are active - Respect dcd_sof_enable() functionality - Get rid of all but necessary ifdef hackery - Fix a bug where the "endpoint lock" was used with an uninitialised pointer.
Diffstat (limited to 'docs/reference')
0 files changed, 0 insertions, 0 deletions