Lines Matching refs:link
239 struct dw_dp_link link; member
535 struct dw_dp_link *link = &dp->link; in dw_dp_link_power_up() local
539 if (link->revision < 0x11) in dw_dp_link_power_up()
559 struct dw_dp_link *link = &dp->link; in dw_dp_link_probe() local
564 ret = drm_dp_read_dpcd_caps(&dp->aux, link->dpcd); in dw_dp_link_probe()
573 link->vsc_sdp_extension_for_colorimetry_supported = in dw_dp_link_probe()
576 link->revision = link->dpcd[DP_DPCD_REV]; in dw_dp_link_probe()
577 link->rate = min_t(u32, min(dp->max_link_rate, dp->phy.attrs.max_link_rate * 100), in dw_dp_link_probe()
578 drm_dp_max_link_rate(link->dpcd)); in dw_dp_link_probe()
579 link->lanes = min_t(u8, dp->phy.attrs.bus_width, in dw_dp_link_probe()
580 drm_dp_max_lane_count(link->dpcd)); in dw_dp_link_probe()
582 link->caps.enhanced_framing = drm_dp_enhanced_frame_cap(link->dpcd); in dw_dp_link_probe()
583 link->caps.tps3_supported = drm_dp_tps3_supported(link->dpcd); in dw_dp_link_probe()
584 link->caps.tps4_supported = drm_dp_tps4_supported(link->dpcd); in dw_dp_link_probe()
585 link->caps.channel_coding = drm_dp_channel_coding_supported(link->dpcd); in dw_dp_link_probe()
586 link->caps.ssc = !!(link->dpcd[DP_MAX_DOWNSPREAD] & in dw_dp_link_probe()
594 struct dw_dp_link *link = &dp->link; in dw_dp_link_train_update_vs_emph() local
595 struct drm_dp_link_train_set *request = &link->train.request; in dw_dp_link_train_update_vs_emph()
597 unsigned int lanes = link->lanes, *vs, *pe; in dw_dp_link_train_update_vs_emph()
609 phy_cfg.dp.link_rate = link->rate / 100; in dw_dp_link_train_update_vs_emph()
629 struct dw_dp_link *link = &dp->link; in dw_dp_link_configure() local
638 phy_cfg.dp.lanes = link->lanes; in dw_dp_link_configure()
639 phy_cfg.dp.link_rate = link->rate / 100; in dw_dp_link_configure()
640 phy_cfg.dp.ssc = link->caps.ssc; in dw_dp_link_configure()
649 FIELD_PREP(PHY_LANES, link->lanes / 2)); in dw_dp_link_configure()
651 switch (link->rate) { in dw_dp_link_configure()
673 dw_dp_phy_xmit_enable(dp, link->lanes); in dw_dp_link_configure()
675 buf[0] = drm_dp_link_rate_to_bw_code(link->rate); in dw_dp_link_configure()
676 buf[1] = link->lanes; in dw_dp_link_configure()
678 if (link->caps.enhanced_framing) { in dw_dp_link_configure()
691 buf[0] = link->caps.ssc ? DP_SPREAD_AMP_0_5 : 0; in dw_dp_link_configure()
692 buf[1] = link->caps.channel_coding ? DP_SET_ANSI_8B10B : 0; in dw_dp_link_configure()
763 static void dw_dp_link_get_adjustments(struct dw_dp_link *link, in dw_dp_link_get_adjustments() argument
766 struct drm_dp_link_train_set *adjust = &link->train.adjust; in dw_dp_link_get_adjustments()
769 for (i = 0; i < link->lanes; i++) { in dw_dp_link_get_adjustments()
797 struct dw_dp_link *link = &dp->link; in dw_dp_link_clock_recovery() local
811 drm_dp_link_train_clock_recovery_delay(link->dpcd); in dw_dp_link_clock_recovery()
820 if (drm_dp_clock_recovery_ok(status, link->lanes)) { in dw_dp_link_clock_recovery()
821 link->train.clock_recovered = true; in dw_dp_link_clock_recovery()
825 dw_dp_link_get_adjustments(link, status); in dw_dp_link_clock_recovery()
827 if (link->train.request.voltage_swing[0] == in dw_dp_link_clock_recovery()
828 link->train.adjust.voltage_swing[0]) in dw_dp_link_clock_recovery()
836 dw_dp_link_train_adjust(&link->train); in dw_dp_link_clock_recovery()
844 struct dw_dp_link *link = &dp->link; in dw_dp_link_channel_equalization() local
849 if (link->caps.tps4_supported) in dw_dp_link_channel_equalization()
851 else if (link->caps.tps3_supported) in dw_dp_link_channel_equalization()
864 drm_dp_link_train_channel_eq_delay(link->dpcd); in dw_dp_link_channel_equalization()
870 if (!drm_dp_clock_recovery_ok(status, link->lanes)) { in dw_dp_link_channel_equalization()
873 link->train.clock_recovered = false; in dw_dp_link_channel_equalization()
877 if (drm_dp_channel_eq_ok(status, link->lanes)) { in dw_dp_link_channel_equalization()
878 link->train.channel_equalized = true; in dw_dp_link_channel_equalization()
882 dw_dp_link_get_adjustments(link, status); in dw_dp_link_channel_equalization()
883 dw_dp_link_train_adjust(&link->train); in dw_dp_link_channel_equalization()
891 struct dw_dp_link *link = &dp->link; in dw_dp_link_downgrade() local
894 switch (link->rate) { in dw_dp_link_downgrade()
898 link->rate = 162000; in dw_dp_link_downgrade()
901 link->rate = 270000; in dw_dp_link_downgrade()
904 link->rate = 540000; in dw_dp_link_downgrade()
908 if (!dw_dp_bandwidth_ok(dp, &video->mode, video->bpp, link->lanes, in dw_dp_link_downgrade()
909 link->rate)) in dw_dp_link_downgrade()
917 struct dw_dp_link *link = &dp->link; in dw_dp_link_train() local
921 dw_dp_link_train_init(&link->train); in dw_dp_link_train()
924 link->lanes, (link->lanes > 1) ? "s" : "", link->rate / 100); in dw_dp_link_train()
938 if (!link->train.clock_recovered) { in dw_dp_link_train()
956 if (!link->train.channel_equalized) { in dw_dp_link_train()
993 struct dw_dp_link *link = &dp->link; in dw_dp_set_phy_default_config() local
997 link->vsc_sdp_extension_for_colorimetry_supported = false; in dw_dp_set_phy_default_config()
998 link->rate = 270000; in dw_dp_set_phy_default_config()
999 link->lanes = dp->phy.attrs.bus_width; in dw_dp_set_phy_default_config()
1001 link->caps.enhanced_framing = true; in dw_dp_set_phy_default_config()
1002 link->caps.channel_coding = true; in dw_dp_set_phy_default_config()
1003 link->caps.ssc = true; in dw_dp_set_phy_default_config()
1009 for (i = 0; i < link->lanes; i++) { in dw_dp_set_phy_default_config()
1013 phy_cfg.dp.lanes = link->lanes; in dw_dp_set_phy_default_config()
1014 phy_cfg.dp.link_rate = link->rate / 100; in dw_dp_set_phy_default_config()
1015 phy_cfg.dp.ssc = link->caps.ssc; in dw_dp_set_phy_default_config()
1024 FIELD_PREP(PHY_LANES, link->lanes / 2)); in dw_dp_set_phy_default_config()
1026 switch (link->rate) { in dw_dp_set_phy_default_config()
1048 dw_dp_phy_xmit_enable(dp, link->lanes); in dw_dp_set_phy_default_config()
1182 struct dw_dp_link *link = &dp->link; in dw_dp_video_set_msa() local
1185 if (link->vsc_sdp_extension_for_colorimetry_supported) in dw_dp_video_set_msa()
1235 struct dw_dp_link *link = &dp->link; in dw_dp_video_enable() local
1309 link_bandwidth = (link->rate / 1000) * link->lanes; in dw_dp_video_enable()
1329 t1 = (4 * 1000 / 9) * link->lanes; in dw_dp_video_enable()
1333 t1 = (1000 / 2) * link->lanes; in dw_dp_video_enable()
1336 t1 = (1000 / 3) * link->lanes; in dw_dp_video_enable()
1338 t1 = (3000 / 16) * link->lanes; in dw_dp_video_enable()
1343 t1 = (2000 / 5) * link->lanes; in dw_dp_video_enable()
1345 t1 = (4000 / 15) * link->lanes; in dw_dp_video_enable()
1350 t1 = (1000 / 6) * link->lanes; in dw_dp_video_enable()
1352 t1 = (1000 / 3) * link->lanes; in dw_dp_video_enable()
1354 t1 = (2000 / 9) * link->lanes; in dw_dp_video_enable()
1360 t1 = (1000 / 6) * link->lanes; in dw_dp_video_enable()
1362 t1 = (1000 / 4) * link->lanes; in dw_dp_video_enable()
1369 t2 = (link->rate / 4) * 1000 / (mode->clock / 2); in dw_dp_video_enable()
1371 t2 = (link->rate / 4) * 1000 / mode->clock; in dw_dp_video_enable()
1390 hblank_interval = hblank * (link->rate / 4) / mode->clock; in dw_dp_video_enable()
1399 if (link->vsc_sdp_extension_for_colorimetry_supported) in dw_dp_video_enable()
1575 struct dw_dp_link *link = &dp->link; in dw_dp_mode_valid() local
1581 link->vsc_sdp_extension_for_colorimetry_supported) in dw_dp_mode_valid()
1591 if (!dw_dp_bandwidth_ok(dp, &edid_data->mode_buf[i], min_bpp, link->lanes, in dw_dp_mode_valid()
1592 link->rate)) in dw_dp_mode_valid()
1601 struct dw_dp_link *link = &dp->link; in dw_dp_get_output_bus_fmts() local
1614 !link->vsc_sdp_extension_for_colorimetry_supported) in dw_dp_get_output_bus_fmts()
1621 if (!dw_dp_bandwidth_ok(dp, edid_data->preferred_mode, fmt->bpp, link->lanes, in dw_dp_get_output_bus_fmts()
1622 link->rate)) in dw_dp_get_output_bus_fmts()