Skip to content

Commit aedeed4

Browse files
committed
drm/i915/ddi: write payload for 128b/132b SST
Write the payload allocation table for 128b/132b SST. Use VCPID 1 and start from slot 0, with dp_m_n.tu slots. This is preparation for enabling 128b/132b SST. This path is not reachable yet. Indeed, we don't yet compute TU for 128b/132b SST. v2: Handle drm_dp_dpcd_write_payload() failures (Imre) v3: Include drm_dp_helper.h (kernel test robot) Reviewed-by: Imre Deak <[email protected]> Signed-off-by: Jani Nikula <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 0170857 commit aedeed4

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

drivers/gpu/drm/i915/display/intel_ddi.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <linux/iopoll.h>
2929
#include <linux/string_helpers.h>
3030

31+
#include <drm/display/drm_dp_helper.h>
3132
#include <drm/display/drm_scdc_helper.h>
3233
#include <drm/drm_privacy_screen_consumer.h>
3334

@@ -2574,6 +2575,7 @@ static void mtl_ddi_pre_enable_dp(struct intel_atomic_state *state,
25742575
{
25752576
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
25762577
bool is_mst = intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST);
2578+
int ret;
25772579

25782580
intel_dp_set_link_params(intel_dp,
25792581
crtc_state->port_clock,
@@ -2668,6 +2670,14 @@ static void mtl_ddi_pre_enable_dp(struct intel_atomic_state *state,
26682670
/* 6.o Configure and enable FEC if needed */
26692671
intel_ddi_enable_fec(encoder, crtc_state);
26702672

2673+
/* 7.a 128b/132b SST. */
2674+
if (!is_mst && intel_dp_is_uhbr(crtc_state)) {
2675+
/* VCPID 1, start slot 0 for 128b/132b, tu slots */
2676+
ret = drm_dp_dpcd_write_payload(&intel_dp->aux, 1, 0, crtc_state->dp_m_n.tu);
2677+
if (ret < 0)
2678+
intel_dp_queue_modeset_retry_for_link(state, encoder, crtc_state);
2679+
}
2680+
26712681
if (!is_mst)
26722682
intel_dsc_dp_pps_write(encoder, crtc_state);
26732683
}
@@ -2681,6 +2691,7 @@ static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,
26812691
struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
26822692
struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
26832693
bool is_mst = intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP_MST);
2694+
int ret;
26842695

26852696
intel_dp_set_link_params(intel_dp,
26862697
crtc_state->port_clock,
@@ -2807,6 +2818,13 @@ static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,
28072818
/* 7.l Configure and enable FEC if needed */
28082819
intel_ddi_enable_fec(encoder, crtc_state);
28092820

2821+
if (!is_mst && intel_dp_is_uhbr(crtc_state)) {
2822+
/* VCPID 1, start slot 0 for 128b/132b, tu slots */
2823+
ret = drm_dp_dpcd_write_payload(&intel_dp->aux, 1, 0, crtc_state->dp_m_n.tu);
2824+
if (ret < 0)
2825+
intel_dp_queue_modeset_retry_for_link(state, encoder, crtc_state);
2826+
}
2827+
28102828
if (!is_mst)
28112829
intel_dsc_dp_pps_write(encoder, crtc_state);
28122830
}

0 commit comments

Comments
 (0)