mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
msm_dp_display_mode_valid() halves the pixel clock when either YUV420 or
wide bus is in use, then uses that halved value both for the controller
pixel clock limit and for the DP link bandwidth check.
Only YUV420 halves the data crossing the link. Wide bus widens the
internal DPU to DP interface to two pixels per clock, halving the
controller clock. Every pixel is still transmitted, so the link
bandwidth requirement remains.
As a result, modes needing up to twice the available link bandwidth pass
validation. On the IMDT QCS8550 SBC (rev5 with CYPD6125), where DP runs
over USB-C alt mode where only two lanes are available, 3840x2160@60 was
accepted despite needing 9.6 Gbps against the 8.64 Gbps the link can
carry.
Use a separate link pixel clock that is only halved for YUV420 for the
bandwidth calculation, leaving the wide bus halving to apply solely to
the controller pixel clock limit. With this, 4k@60 is correctly rejected
and 4k@30 selected instead.
Fixes:
|
||
|---|---|---|
| .. | ||
| dp_audio.c | ||
| dp_audio.h | ||
| dp_aux.c | ||
| dp_aux.h | ||
| dp_ctrl.c | ||
| dp_ctrl.h | ||
| dp_debug.c | ||
| dp_debug.h | ||
| dp_display.c | ||
| dp_display.h | ||
| dp_drm.c | ||
| dp_drm.h | ||
| dp_link.c | ||
| dp_link.h | ||
| dp_panel.c | ||
| dp_panel.h | ||
| dp_reg.h | ||
| dp_utils.c | ||
| dp_utils.h | ||