Lines Matching refs:outp

40 			  struct nouveau_encoder *outp)
42 return drm_dp_read_sink_count_cap(connector, outp->dp.dpcd, &outp->dp.desc);
46 nouveau_dp_probe_lttpr(struct nouveau_encoder *outp)
51 ret = nvif_outp_dp_aux_xfer(&outp->outp, DP_AUX_NATIVE_READ, &size,
62 struct nouveau_encoder *outp)
69 u8 *dpcd = outp->dp.dpcd;
71 outp->dp.lttpr.nr = 0;
72 outp->dp.rate_nr = 0;
73 outp->dp.link_nr = 0;
74 outp->dp.link_bw = 0;
77 nouveau_dp_probe_lttpr(outp) &&
79 !drm_dp_read_lttpr_common_caps(aux, dpcd, outp->dp.lttpr.caps)) {
80 int nr = drm_dp_lttpr_count(outp->dp.lttpr.caps);
93 outp->dp.lttpr.nr = nr;
103 outp->dp.link_nr = dpcd[DP_MAX_LANE_COUNT] & DP_MAX_LANE_COUNT_MASK;
104 if (outp->dcb->dpconf.link_nr < outp->dp.link_nr)
105 outp->dp.link_nr = outp->dcb->dpconf.link_nr;
107 if (outp->dp.lttpr.nr) {
108 int links = drm_dp_lttpr_max_lane_count(outp->dp.lttpr.caps);
110 if (links && links < outp->dp.link_nr)
111 outp->dp.link_nr = links;
126 for (j = 0; j < outp->dp.rate_nr; j++) {
127 if (rate > outp->dp.rate[j].rate) {
128 for (int k = outp->dp.rate_nr; k > j; k--)
129 outp->dp.rate[k] = outp->dp.rate[k - 1];
134 outp->dp.rate[j].dpcd = i;
135 outp->dp.rate[j].rate = rate;
136 outp->dp.rate_nr++;
141 if (!outp->dp.rate_nr) {
145 if (outp->dp.lttpr.nr) {
146 int rate = drm_dp_lttpr_max_link_rate(outp->dp.lttpr.caps);
152 max_rate = min_t(int, max_rate, outp->dcb->dpconf.link_bw);
156 outp->dp.rate[outp->dp.rate_nr].dpcd = -1;
157 outp->dp.rate[outp->dp.rate_nr].rate = rates[i];
158 outp->dp.rate_nr++;
162 if (WARN_ON(!outp->dp.rate_nr))
166 ret = nvif_outp_dp_rates(&outp->outp, outp->dp.rate, outp->dp.rate_nr);
170 for (int i = 0; i < outp->dp.rate_nr; i++) {
171 u32 link_bw = outp->dp.rate[i].rate;
173 if (link_bw > outp->dp.link_bw)
174 outp->dp.link_bw = link_bw;
177 ret = drm_dp_read_desc(aux, &outp->dp.desc, drm_dp_is_branch(dpcd));
182 mstm = outp->dp.mstm;
187 if (nouveau_dp_has_sink_count(connector, outp)) {
192 outp->dp.sink_count = ret;
198 if (!outp->dp.sink_count)
203 outp->dp.downstream_ports);
211 outp->dp.sink_count = 0;
258 hpd = nvif_outp_detect(&nv_encoder->outp);
260 nvif_outp_dp_aux_pwr(&nv_encoder->outp, false);
263 nvif_outp_dp_aux_pwr(&nv_encoder->outp, true);
267 nvif_outp_dp_aux_pwr(&nv_encoder->outp, false);
292 nvif_outp_dp_aux_pwr(&nv_encoder->outp, false);
314 nouveau_dp_power_down(struct nouveau_encoder *outp)
316 struct drm_dp_aux *aux = &outp->conn->aux;
320 mutex_lock(&outp->dp.hpd_irq_lock);
329 outp->dp.lt.nr = 0;
330 mutex_unlock(&outp->dp.hpd_irq_lock);
334 nouveau_dp_train_link(struct nouveau_encoder *outp, bool retrain)
336 struct drm_dp_aux *aux = &outp->conn->aux;
340 if ( (outp->dp.dpcd[DP_MAX_LANE_COUNT] & 0x20) &&
341 !(outp->dp.dpcd[DP_MAX_DOWNSPREAD] & DP_TPS4_SUPPORTED))
345 ret = nvif_outp_dp_train(&outp->outp, outp->dp.dpcd,
346 outp->dp.lttpr.nr,
347 outp->dp.lt.nr,
348 outp->dp.lt.bw,
349 outp->dp.lt.mst,
365 if (!drm_dp_channel_eq_ok(stat, outp->dp.lt.nr)) {
390 for (int i = 0; i < outp->dp.lt.nr; i++) {
397 ret = nvif_outp_dp_drive(&outp->outp, outp->dp.lt.nr, pe, vs);
418 nouveau_dp_train(struct nouveau_encoder *outp, bool mst, u32 khz, u8 bpc)
420 struct nouveau_drm *drm = nouveau_drm(outp->base.base.dev);
421 struct drm_dp_aux *aux = &outp->conn->aux;
427 min_rate = outp->dp.link_nr * outp->dp.rate[0].rate;
432 outp->base.base.name, mst, min_rate);
434 mutex_lock(&outp->dp.hpd_irq_lock);
444 for (int nr = outp->dp.link_nr; nr; nr >>= 1) {
445 for (int rate = 0; rate < outp->dp.rate_nr; rate++) {
446 if (outp->dp.rate[rate].rate * nr >= min_rate) {
447 outp->dp.lt.nr = nr;
448 outp->dp.lt.bw = outp->dp.rate[rate].rate;
449 outp->dp.lt.mst = mst;
450 if (nouveau_dp_train_link(outp, false))
458 mutex_unlock(&outp->dp.hpd_irq_lock);
463 nouveau_dp_link_check_locked(struct nouveau_encoder *outp)
467 if (!outp || !outp->dp.lt.nr)
470 if (drm_dp_dpcd_read_phy_link_status(&outp->conn->aux, DP_PHY_DPRX, link_status) < 0)
473 if (drm_dp_channel_eq_ok(link_status, outp->dp.lt.nr))
476 return nouveau_dp_train_link(outp, true);
482 struct nouveau_encoder *outp = nv_connector->dp_encoder;
485 if (outp) {
486 mutex_lock(&outp->dp.hpd_irq_lock);
487 if (outp->dp.lt.nr)
488 link_ok = nouveau_dp_link_check_locked(outp);
489 mutex_unlock(&outp->dp.hpd_irq_lock);
501 struct nouveau_encoder *outp = find_encoder(connector, DCB_OUTPUT_DP);
502 struct nouveau_drm *drm = nouveau_drm(outp->base.base.dev);
507 if (!outp)
510 mstm = outp->dp.mstm;
513 mutex_lock(&outp->dp.hpd_irq_lock);
521 if (nouveau_dp_has_sink_count(connector, outp)) {
523 if (ret != outp->dp.sink_count)
526 outp->dp.sink_count = ret;
530 mutex_unlock(&outp->dp.hpd_irq_lock);
540 nv50_dp_mode_valid(struct nouveau_encoder *outp,
552 if (mode->flags & DRM_MODE_FLAG_INTERLACE && !outp->caps.dp_interlace)
558 max_rate = outp->dp.link_nr * outp->dp.link_bw;
563 ds_max_dotclock = drm_dp_downstream_max_dotclock(outp->dp.dpcd, outp->dp.downstream_ports);