diff options
| author | Chia-Lin Kao (AceLan) <acelan.kao@canonical.com> | 2025-12-04 10:46:47 +0800 |
|---|---|---|
| committer | Mario Limonciello (AMD) <superm1@kernel.org> | 2026-01-09 11:27:26 -0600 |
| commit | a8f49a0043011c3dd12998a6c700bb59d5365c20 (patch) | |
| tree | 567560fac0025c7713c46256656fdb09007a4acd /tools/perf/scripts/python/git@git.tavy.me:linux.git | |
| parent | 9ce4aef9a5b1b76207152ba019f838f62dff97b8 (diff) | |
drm/dp: Add byte-by-byte fallback for broken USB-C adapters
Some USB-C hubs and adapters have buggy firmware where multi-byte AUX
reads consistently timeout, while single-byte reads from the same address
work correctly.
Known affected devices that exhibit this issue:
- Lenovo USB-C to VGA adapter (VIA VL817 chipset)
idVendor=17ef, idProduct=7217
- Dell DA310 USB-C mobile adapter hub
idVendor=413c, idProduct=c010
Analysis of the failure pattern shows:
- Single-byte probes to 0xf0000 (LTTPR) succeed
- Single-byte probes to 0x00102 (TRAINING_AUX_RD_INTERVAL) succeed
- Multi-byte reads from 0x00000 (DPCD capabilities) timeout with -ETIMEDOUT
- Retrying does not help - the failure is consistent across all attempts
The issue appears to be a firmware bug in the AUX transaction handling
that specifically affects multi-byte reads.
Add a fallback mechanism in drm_dp_dpcd_read_data() that attempts
byte-by-byte reading when the normal multi-byte read fails. This
workaround only activates for adapters that fail the standard read path,
ensuring no impact on correctly functioning hardware.
Tested with:
- Lenovo USB-C to VGA adapter (VIA VL817) - now works with fallback
- Dell DA310 USB-C hub - now works with fallback
- Dell/Analogix Slimport adapter - continues to work with normal path
Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
Link: https://patch.msgid.link/20251204024647.1462866-1-acelan.kao@canonical.com
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
Diffstat (limited to 'tools/perf/scripts/python/git@git.tavy.me:linux.git')
0 files changed, 0 insertions, 0 deletions
