diff options
| author | Patrick Tudor <ptudor@ptudor.net> | 2026-11-04 18:41:37 +0000 |
|---|---|---|
| committer | Adrian Chadd <adrian@FreeBSD.org> | 2026-11-04 19:12:09 +0000 |
| commit | e9e4115a0bb41416bf5e1277627fc6c565073972 (patch) | |
| tree | 22edd47b651f2f9daae6fe56e620e7092297fbcb /stand/efi/liblua32efi/(public-mirror) | |
| parent | b61024d6efe6c5d9da1f31ad24884bd70e3300e2 (diff) | |
A USB error during an I2C transfer can leave `cp2112(4)` blocked indefinitely,
preventing USB detach and even reboot from completing.
`cp2112iic_check_req_status()` uses the status response without checking whether
the exchange succeeded. A failed exchange can therefore reuse a stale busy
response and retry indefinitely. The output callback also records an error
without marking the transfer done, causing its waiter to sleep again.
Check the exchange result before using the response, and mark failed output
transfers complete. Use absolute deadlines based on `USB_DEFAULT_TIMEOUT`
(five seconds) for output and input condition-variable waits, and stop
repeated busy status responses after the status loop's own deadline.
Clear pending input state when the paired output request fails.
These are per-wait and status-loop bounds; they do not impose a
single five-second limit on the entire I2C operation.
Add `HQ_HID_IGNORE` entries for both VID/PID pairs matched by
`cp2112`, so `usbhid` does not claim the interface ahead of the
bridge driver. Define `LUMANATE` in `usbdevs` and use
`USB_VENDOR_LUMANATE` for the existing `0x1009` entry in both device tables.
PR: 300017
Related hardware testing: https://reviews.freebsd.org/D60989,
the RNG90 I2C slave driver. This controller fix applies independently of
that driver.
Reviewed by: wulf, adrian
Differential Revision: https://reviews.freebsd.org/D61065
Event: NetApp/Vendor Summit Hackathon 202611
Diffstat (limited to 'stand/efi/liblua32efi/(public-mirror)')
0 files changed, 0 insertions, 0 deletions
