Skip to content

Commit a97befa

Browse files
committed
drivers/gpu/drm/amd/display/dc/link/protocols/link_frl_training.c: improve pattern handling
1 parent 1d244f0 commit a97befa

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

drivers/gpu/drm/amd/display/dc/link/protocols/link_frl_training.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,9 @@ bool dc_link_perform_frl_training(struct dc_link *link,
6161
uint8_t frl_rate = link->cur_link_settings.frl_rate;
6262
uint8_t sink_version;
6363
uint8_t update;
64-
uint8_t status;
64+
uint8_t status = 0;
6565
uint16_t ltp_req;
66+
uint8_t patterns[FRL_MAX_LANES] = {0, 0, 0, 0};
6667
uint8_t write_buffer[2];
6768
int poll;
6869
int lane;
@@ -202,21 +203,11 @@ bool dc_link_perform_frl_training(struct dc_link *link,
202203
}
203204
}
204205

205-
/* Program requested training patterns */
206-
pr_err("FRL DEBUG: programming training patterns\n");
207-
enc->funcs->set_training_patterns(enc,
208-
((ltp_req >> 0) & 0xF) - 1,
209-
((ltp_req >> 4) & 0xF) - 1,
210-
((ltp_req >> 8) & 0xF) - 1,
211-
((ltp_req >> 12) & 0xF) - 1);
212-
213-
/* Detect LOWER_RATE / NEXT_FFE */
206+
/* Check for special LTP requests before programming patterns */
214207
for (lane = 0; lane < lane_count; lane++) {
215208
uint8_t ltp = (ltp_req >> (lane * 4)) & 0xF;
216209

217210
if (ltp == HDMI_LTP_LOWER_RATE) {
218-
pr_err("FRL DEBUG: lane %d requested LOWER_RATE\n",
219-
lane);
220211
DC_LOG_ERROR(
221212
"FRL: sink requested lower rate (unsupported)\n");
222213
goto fail;
@@ -228,6 +219,19 @@ bool dc_link_perform_frl_training(struct dc_link *link,
228219
}
229220
}
230221

222+
/* Update per-lane patterns; preserve current pattern for passing lanes */
223+
for (lane = 0; lane < lane_count; lane++) {
224+
uint8_t ltp = (ltp_req >> (lane * 4)) & 0xF;
225+
226+
if (ltp != HDMI_LTP_PASS && ltp != HDMI_LTP_NEXT_FFE)
227+
patterns[lane] = ltp - 1;
228+
}
229+
230+
pr_err("FRL DEBUG: programming training patterns\n");
231+
enc->funcs->set_training_patterns(enc,
232+
patterns[0], patterns[1],
233+
patterns[2], patterns[3]);
234+
231235
msleep(FRL_POLL_DELAY_MS);
232236
}
233237

0 commit comments

Comments
 (0)