hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
....@@ -14,14 +14,24 @@
1414 static void cdn_dp_set_signal_levels(struct cdn_dp_device *dp)
1515 {
1616 struct cdn_dp_port *port = dp->port[dp->active_port];
17
- int rate = drm_dp_bw_code_to_link_rate(dp->link.rate);
17
+ union phy_configure_opts phy_cfg = {0};
1818 u8 swing = (dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) >>
1919 DP_TRAIN_VOLTAGE_SWING_SHIFT;
2020 u8 pre_emphasis = (dp->train_set[0] & DP_TRAIN_PRE_EMPHASIS_MASK)
2121 >> DP_TRAIN_PRE_EMPHASIS_SHIFT;
22
+ unsigned int lane;
2223
23
- tcphy_dp_set_phy_config(port->phy, rate, dp->link.num_lanes,
24
- swing, pre_emphasis);
24
+ for (lane = 0; lane < dp->max_lanes; lane++) {
25
+ phy_cfg.dp.voltage[lane] = swing;
26
+ phy_cfg.dp.pre[lane] = pre_emphasis;
27
+ }
28
+
29
+ phy_cfg.dp.lanes = dp->max_lanes;
30
+ phy_cfg.dp.link_rate = drm_dp_bw_code_to_link_rate(dp->max_rate) / 100;
31
+ phy_cfg.dp.set_lanes = false;
32
+ phy_cfg.dp.set_rate = false;
33
+ phy_cfg.dp.set_voltages = true;
34
+ phy_configure(port->phy, &phy_cfg);
2535 }
2636
2737 static int cdn_dp_set_pattern(struct cdn_dp_device *dp, uint8_t dp_train_pat)
....@@ -30,7 +40,7 @@
3040 int ret;
3141 uint8_t pattern = dp_train_pat & DP_TRAINING_PATTERN_MASK;
3242
33
- global_config = NUM_LANES(dp->link.num_lanes - 1) | SST_MODE |
43
+ global_config = NUM_LANES(dp->max_lanes - 1) | SST_MODE |
3444 GLOBAL_EN | RG_EN | ENC_RST_DIS | WR_VHSYNC_FALL;
3545
3646 phy_config = DP_TX_PHY_ENCODER_BYPASS(0) |
....@@ -63,7 +73,7 @@
6373 return ret;
6474 }
6575
66
- ret = cdn_dp_reg_write(dp, DPTX_LANE_EN, BIT(dp->link.num_lanes) - 1);
76
+ ret = cdn_dp_reg_write(dp, DPTX_LANE_EN, BIT(dp->max_lanes) - 1);
6777 if (ret) {
6878 DRM_ERROR("fail to set DPTX_LANE_EN, error: %d\n", ret);
6979 return ret;
....@@ -106,7 +116,7 @@
106116 uint8_t v = 0, p = 0;
107117 uint8_t preemph_max;
108118
109
- for (i = 0; i < dp->link.num_lanes; i++) {
119
+ for (i = 0; i < dp->max_lanes; i++) {
110120 v = max(v, drm_dp_get_adjust_request_voltage(link_status, i));
111121 p = max(p, drm_dp_get_adjust_request_pre_emphasis(link_status,
112122 i));
....@@ -119,7 +129,7 @@
119129 if (p >= preemph_max)
120130 p = preemph_max | DP_TRAIN_MAX_PRE_EMPHASIS_REACHED;
121131
122
- for (i = 0; i < dp->link.num_lanes; i++)
132
+ for (i = 0; i < dp->max_lanes; i++)
123133 dp->train_set[i] = v | p;
124134 }
125135
....@@ -149,7 +159,7 @@
149159 {
150160 int lane;
151161
152
- for (lane = 0; lane < dp->link.num_lanes; lane++)
162
+ for (lane = 0; lane < dp->max_lanes; lane++)
153163 if ((dp->train_set[lane] & DP_TRAIN_MAX_SWING_REACHED) == 0)
154164 return false;
155165
....@@ -163,8 +173,8 @@
163173 cdn_dp_set_signal_levels(dp);
164174
165175 ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_LANE0_SET,
166
- dp->train_set, dp->link.num_lanes);
167
- if (ret != dp->link.num_lanes)
176
+ dp->train_set, dp->max_lanes);
177
+ if (ret != dp->max_lanes)
168178 return -EINVAL;
169179
170180 return 0;
....@@ -183,8 +193,8 @@
183193 len = 1;
184194 } else {
185195 /* DP_TRAINING_LANEx_SET follow DP_TRAINING_PATTERN_SET */
186
- memcpy(buf + 1, dp->train_set, dp->link.num_lanes);
187
- len = dp->link.num_lanes + 1;
196
+ memcpy(buf + 1, dp->train_set, dp->max_lanes);
197
+ len = dp->max_lanes + 1;
188198 }
189199
190200 ret = drm_dp_dpcd_write(&dp->aux, DP_TRAINING_PATTERN_SET,
....@@ -237,7 +247,7 @@
237247 return -EINVAL;
238248 }
239249
240
- if (drm_dp_clock_recovery_ok(link_status, dp->link.num_lanes)) {
250
+ if (drm_dp_clock_recovery_ok(link_status, dp->max_lanes)) {
241251 DRM_DEBUG_KMS("clock recovery OK\n");
242252 return 0;
243253 }
....@@ -301,12 +311,12 @@
301311
302312 /* Make sure clock is still ok */
303313 if (!drm_dp_clock_recovery_ok(link_status,
304
- dp->link.num_lanes)) {
314
+ dp->max_lanes)) {
305315 DRM_DEBUG_KMS("Clock recovery check failed\n");
306316 break;
307317 }
308318
309
- if (drm_dp_channel_eq_ok(link_status, dp->link.num_lanes)) {
319
+ if (drm_dp_channel_eq_ok(link_status, dp->max_lanes)) {
310320 DRM_DEBUG_KMS("Channel EQ done\n");
311321 return 0;
312322 }
....@@ -338,17 +348,17 @@
338348
339349 static int cdn_dp_get_lower_link_rate(struct cdn_dp_device *dp)
340350 {
341
- switch (dp->link.rate) {
351
+ switch (dp->max_rate) {
342352 case DP_LINK_BW_1_62:
343353 return -EINVAL;
344354 case DP_LINK_BW_2_7:
345
- dp->link.rate = DP_LINK_BW_1_62;
355
+ dp->max_rate = DP_LINK_BW_1_62;
346356 break;
347357 case DP_LINK_BW_5_4:
348
- dp->link.rate = DP_LINK_BW_2_7;
358
+ dp->max_rate = DP_LINK_BW_2_7;
349359 break;
350360 default:
351
- dp->link.rate = DP_LINK_BW_5_4;
361
+ dp->max_rate = DP_LINK_BW_5_4;
352362 break;
353363 }
354364
....@@ -372,12 +382,12 @@
372382
373383 source_max = dp->lanes;
374384 sink_max = drm_dp_max_lane_count(dp->dpcd);
375
- dp->link.num_lanes = min(source_max, sink_max);
385
+ dp->max_lanes = min(source_max, sink_max);
376386
377387 source_max = drm_dp_bw_code_to_link_rate(CDN_DP_MAX_LINK_RATE);
378388 sink_max = drm_dp_max_link_rate(dp->dpcd);
379389 rate = min(source_max, sink_max);
380
- dp->link.rate = drm_dp_link_rate_to_bw_code(rate);
390
+ dp->max_rate = drm_dp_link_rate_to_bw_code(rate);
381391
382392 ssc_on = !!(dp->dpcd[DP_MAX_DOWNSPREAD] & DP_MAX_DOWNSPREAD_0_5);
383393 link_config[0] = ssc_on ? DP_SPREAD_AMP_0_5 : 0;
....@@ -387,23 +397,21 @@
387397 drm_dp_dpcd_write(&dp->aux, DP_DOWNSPREAD_CTRL, link_config, 2);
388398
389399 while (true) {
390
- ret = tcphy_dp_set_link_rate(port->phy,
391
- drm_dp_bw_code_to_link_rate(dp->link.rate),
392
- ssc_on);
393
- if (ret) {
394
- DRM_ERROR("failed to set link rate: %d\n", ret);
395
- return ret;
396
- }
400
+ union phy_configure_opts phy_cfg = {0};
397401
398
- ret = tcphy_dp_set_lane_count(port->phy, dp->link.num_lanes);
399
- if (ret) {
400
- DRM_ERROR("failed to set lane count: %d\n", ret);
402
+ phy_cfg.dp.lanes = dp->max_lanes;
403
+ phy_cfg.dp.link_rate = drm_dp_bw_code_to_link_rate(dp->max_rate) / 100;
404
+ phy_cfg.dp.ssc = ssc_on;
405
+ phy_cfg.dp.set_lanes = true;
406
+ phy_cfg.dp.set_rate = true;
407
+ phy_cfg.dp.set_voltages = false;
408
+ ret = phy_configure(port->phy, &phy_cfg);
409
+ if (ret)
401410 return ret;
402
- }
403411
404412 /* Write the link configuration data */
405
- link_config[0] = dp->link.rate;
406
- link_config[1] = dp->link.num_lanes;
413
+ link_config[0] = dp->max_rate;
414
+ link_config[1] = dp->max_lanes;
407415 if (drm_dp_enhanced_frame_cap(dp->dpcd))
408416 link_config[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
409417 drm_dp_dpcd_write(&dp->aux, DP_LINK_BW_SET, link_config, 2);