link_train
lane_count = dp->link_train.lane_count;
dp->link_train.lt_state = CLOCK_RECOVERY;
dp->link_train.eq_loop = 0;
dp->link_train.cr_loop[lane] = 0;
analogix_dp_set_link_bandwidth(dp, dp->link_train.link_rate);
analogix_dp_set_lane_count(dp, dp->link_train.lane_count);
buf[0] = dp->link_train.link_rate;
buf[1] = dp->link_train.lane_count;
dp->link_train.training_lane[lane] =
dp->link_train.training_lane, lane_count);
dp->link_train.lt_state = FAILED;
lane_count = dp->link_train.lane_count;
dp->link_train.training_lane[lane] = training_lane;
lane_count = dp->link_train.lane_count;
dp->link_train.lt_state = EQUALIZER_TRAINING;
dp->link_train.cr_loop[lane]++;
if (dp->link_train.cr_loop[lane] == MAX_CR_LOOP ||
dp->link_train.cr_loop[lane],
dp->link_train.training_lane, lane_count);
lane_count = dp->link_train.lane_count;
dp->link_train.link_rate = reg;
dp->link_train.link_rate);
dp->link_train.lane_count = reg;
dp->link_train.lane_count);
dp->link_train.lt_state = FINISHED;
dp->link_train.eq_loop++;
if (dp->link_train.eq_loop > MAX_EQ_LOOP) {
dp->link_train.training_lane, lane_count);
analogix_dp_get_max_rx_bandwidth(dp, &dp->link_train.link_rate);
analogix_dp_get_max_rx_lane_count(dp, &dp->link_train.lane_count);
if ((dp->link_train.link_rate != DP_LINK_BW_1_62) &&
(dp->link_train.link_rate != DP_LINK_BW_2_7) &&
(dp->link_train.link_rate != DP_LINK_BW_5_4)) {
dp->link_train.link_rate);
dp->link_train.link_rate = DP_LINK_BW_1_62;
if (dp->link_train.lane_count == 0) {
dp->link_train.lane_count);
dp->link_train.lane_count = (u8)LANE_COUNT1;
if (dp->link_train.lane_count > max_lanes)
dp->link_train.lane_count = max_lanes;
if (dp->link_train.link_rate > max_rate)
dp->link_train.link_rate = max_rate;
dp->link_train.lt_state = START;
switch (dp->link_train.lt_state) {
analogix_dp_set_link_bandwidth(dp, dp->link_train.link_rate);
analogix_dp_set_lane_count(dp, dp->link_train.lane_count);
if (!drm_dp_clock_recovery_ok(link_status, dp->link_train.lane_count)) {
if (!drm_dp_channel_eq_ok(link_status, dp->link_train.lane_count)) {
struct link_train link_train;
drm_dp_bw_code_to_link_rate(dp->link_train.link_rate) / 100;
phy_cfg.dp.lanes = dp->link_train.lane_count;
for (lane = 0; lane < dp->link_train.lane_count; lane++)
writel(dp->link_train.training_lane[lane],
for (lane = 0; lane < dp->link_train.lane_count; lane++) {
u8 training_lane = dp->link_train.training_lane[lane];