2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00
linux/drivers/gpu/drm/msm/dp
Aleksandrs Vinarskis 5a0436e92a drm/msm/dp: Introduce link training per-segment for LTTPRs
DisplayPort requires per-segment link training when LTTPR are switched
to non-transparent mode, starting with LTTPR closest to the source.
Only when each segment is trained individually, source can link train
to sink.

Implement per-segment link traning when LTTPR(s) are detected, to
support external docking stations. On higher level, changes are:

* Pass phy being trained down to all required helpers
* Run CR, EQ link training per phy
* Set voltage swing, pre-emphasis levels per phy

Since at least some LTTPRs (eg. Parade PS8830) do not correctly report
voltage-swing, pre-emphasis level 3 support, always assume level 3 is
supported. This is permitted under DP 2.1(a) section 3.6.7.2 stating
that LTTPR shall set its transmitter levels as close as possible to
those requested by the DPTX, if the DPTX sets the voltage swing or
pre-emphasis to a level that the LTTPR does not support. It shall be
noted that LTTPR’s level choosing is implementation-specific.

This ensures successful link training both when connected directly to
the monitor (single LTTPR onboard most X1E laptops) and via the docking
station (at least two LTTPRs).

Fixes: 72d0af4acc ("drm/msm/dp: Add support for LTTPR handling")
Tested-by: Jessica Zhang <quic_jesszhan@quicinc.com> # SA8775P
Tested-by: Johan Hovold <johan+linaro@kernel.org>
Tested-by: Rob Clark <robdclark@gmail.com>
Tested-by: Stefan Schmidt <stefan.schmidt@linaro.org>
Signed-off-by: Aleksandrs Vinarskis <alex.vinarskis@gmail.com>
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Patchwork: https://patchwork.freedesktop.org/patch/652305/
Link: https://lore.kernel.org/r/20250507230113.14270-5-alex.vinarskis@gmail.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
2025-05-12 19:18:49 +03:00
..
dp_audio.c drm/msm/dp: reuse generic HDMI codec implementation 2025-05-02 03:54:03 +03:00
dp_audio.h drm/msm/dp: reuse generic HDMI codec implementation 2025-05-02 03:54:03 +03:00
dp_aux.c drm/msm/dp: prefix all symbols with msm_dp_ 2024-10-31 21:08:01 +02:00
dp_aux.h drm/msm/dp: prefix all symbols with msm_dp_ 2024-10-31 21:08:01 +02:00
dp_catalog.c drm/msm/dp: drop obsolete audio headers access through catalog 2024-12-22 09:25:42 +02:00
dp_catalog.h drm/msm/dp: drop obsolete audio headers access through catalog 2024-12-22 09:25:42 +02:00
dp_ctrl.c drm/msm/dp: Introduce link training per-segment for LTTPRs 2025-05-12 19:18:49 +03:00
dp_ctrl.h drm/msm/dp: prefix all symbols with msm_dp_ 2024-10-31 21:08:01 +02:00
dp_debug.c drm/msm/dp: prefix all symbols with msm_dp_ 2024-10-31 21:08:01 +02:00
dp_debug.h drm/msm/dp: prefix all symbols with msm_dp_ 2024-10-31 21:08:01 +02:00
dp_display.c drm/msm/dp: Prepare for link training per-segment for LTTPRs 2025-05-12 19:18:49 +03:00
dp_display.h drm/msm/dp: reuse generic HDMI codec implementation 2025-05-02 03:54:03 +03:00
dp_drm.c drm/msm/dp: reuse generic HDMI codec implementation 2025-05-02 03:54:03 +03:00
dp_drm.h drm/bridge: Pass full state to atomic_post_disable 2025-02-19 16:59:13 +01:00
dp_link.c drm/display: dp: change drm_dp_dpcd_read_link_status() return value 2025-03-25 16:20:38 +02:00
dp_link.h drm/msm/dp: Prepare for link training per-segment for LTTPRs 2025-05-12 19:18:49 +03:00
dp_panel.c drm/msm/dp: Account for LTTPRs capabilities 2025-05-12 19:18:49 +03:00
dp_panel.h drm/msm/dp: drop struct msm_dp_panel_in 2024-12-22 09:25:59 +02:00
dp_reg.h drm/msm/dp: enable SDP and SDE periph flush update 2024-03-04 11:38:51 +02:00
dp_utils.c drm/msm/dp: fix msm_dp_utils_pack_sdp_header interface 2024-12-02 18:41:42 -08:00
dp_utils.h drm/msm/dp: fix msm_dp_utils_pack_sdp_header interface 2024-12-02 18:41:42 -08:00