Skip to content

Commit 6dcc3c5

Browse files
abelvesalumag
authored andcommitted
drm/i915/dp: Use the generic helper to control LTTPR transparent mode
LTTPRs operating modes are defined by the DisplayPort standard and the generic framework now provides a helper to switch between them, which is handling the explicit disabling of non-transparent mode and its disable->enable sequence mentioned in the DP Standard v2.0 section 3.6.6.1. So use the new drm generic helper instead as it makes the code a bit cleaner. Since the driver specific implementation holds the lttrp_common_caps, if the call to the drm generic helper fails, the lttrp_common_caps need to be updated as the helper has already rolled back to transparent mode. Acked-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Abel Vesa <abel.vesa@linaro.org> Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> Acked-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250203-drm-dp-msm-add-lttpr-transparent-mode-set-v5-3-c865d0e56d6e@linaro.org Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
1 parent 226a0ba commit 6dcc3c5

File tree

1 file changed

+5
-19
lines changed

1 file changed

+5
-19
lines changed

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

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,6 @@ intel_dp_set_lttpr_transparent_mode(struct intel_dp *intel_dp, bool enable)
119119
u8 val = enable ? DP_PHY_REPEATER_MODE_TRANSPARENT :
120120
DP_PHY_REPEATER_MODE_NON_TRANSPARENT;
121121

122-
if (drm_dp_dpcd_write(&intel_dp->aux, DP_PHY_REPEATER_MODE, &val, 1) != 1)
123-
return false;
124-
125122
intel_dp->lttpr_common_caps[DP_PHY_REPEATER_MODE -
126123
DP_LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV] = val;
127124

@@ -146,6 +143,7 @@ bool intel_dp_lttpr_transparent_mode_enabled(struct intel_dp *intel_dp)
146143
static int intel_dp_init_lttpr_phys(struct intel_dp *intel_dp, const u8 dpcd[DP_RECEIVER_CAP_SIZE])
147144
{
148145
int lttpr_count;
146+
int ret;
149147

150148
if (!intel_dp_read_lttpr_common_caps(intel_dp, dpcd))
151149
return 0;
@@ -172,22 +170,8 @@ static int intel_dp_init_lttpr_phys(struct intel_dp *intel_dp, const u8 dpcd[DP_
172170
return lttpr_count;
173171
}
174172

175-
/*
176-
* See DP Standard v2.0 3.6.6.1. about the explicit disabling of
177-
* non-transparent mode and the disable->enable non-transparent mode
178-
* sequence.
179-
*/
180-
intel_dp_set_lttpr_transparent_mode(intel_dp, true);
181-
182-
/*
183-
* In case of unsupported number of LTTPRs or failing to switch to
184-
* non-transparent mode fall-back to transparent link training mode,
185-
* still taking into account any LTTPR common lane- rate/count limits.
186-
*/
187-
if (lttpr_count < 0)
188-
goto out_reset_lttpr_count;
189-
190-
if (!intel_dp_set_lttpr_transparent_mode(intel_dp, false)) {
173+
ret = drm_dp_lttpr_init(&intel_dp->aux, lttpr_count);
174+
if (ret) {
191175
lt_dbg(intel_dp, DP_PHY_DPRX,
192176
"Switching to LTTPR non-transparent LT mode failed, fall-back to transparent mode\n");
193177

@@ -196,6 +180,8 @@ static int intel_dp_init_lttpr_phys(struct intel_dp *intel_dp, const u8 dpcd[DP_
196180
goto out_reset_lttpr_count;
197181
}
198182

183+
intel_dp_set_lttpr_transparent_mode(intel_dp, false);
184+
199185
return lttpr_count;
200186

201187
out_reset_lttpr_count:

0 commit comments

Comments
 (0)