Lines Matching refs:dp_info
555 static void radeon_dp_update_vs_emph(struct radeon_dp_link_train_info *dp_info) in radeon_dp_update_vs_emph() argument
558 atombios_dig_transmitter_setup(dp_info->encoder, in radeon_dp_update_vs_emph()
560 0, dp_info->train_set[0]); /* sets all lanes at once */ in radeon_dp_update_vs_emph()
563 drm_dp_dpcd_write(dp_info->aux, DP_TRAINING_LANE0_SET, in radeon_dp_update_vs_emph()
564 dp_info->train_set, dp_info->dp_lane_count); in radeon_dp_update_vs_emph()
567 static void radeon_dp_set_tp(struct radeon_dp_link_train_info *dp_info, int tp) in radeon_dp_set_tp() argument
572 if (ASIC_IS_DCE4(dp_info->rdev) || !dp_info->use_dpencoder) { in radeon_dp_set_tp()
584 atombios_dig_encoder_setup(dp_info->encoder, rtp, 0); in radeon_dp_set_tp()
594 radeon_dp_encoder_service(dp_info->rdev, ATOM_DP_ACTION_TRAINING_PATTERN_SEL, in radeon_dp_set_tp()
595 dp_info->dp_clock, dp_info->enc_id, rtp); in radeon_dp_set_tp()
599 drm_dp_dpcd_writeb(dp_info->aux, DP_TRAINING_PATTERN_SET, tp); in radeon_dp_set_tp()
602 static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info) in radeon_dp_link_train_init() argument
604 struct radeon_encoder *radeon_encoder = to_radeon_encoder(dp_info->encoder); in radeon_dp_link_train_init()
609 radeon_dp_set_rx_power_state(dp_info->connector, DP_SET_POWER_D0); in radeon_dp_link_train_init()
612 if (dp_info->dpcd[3] & 0x1) in radeon_dp_link_train_init()
613 drm_dp_dpcd_writeb(dp_info->aux, in radeon_dp_link_train_init()
616 drm_dp_dpcd_writeb(dp_info->aux, in radeon_dp_link_train_init()
620 drm_dp_dpcd_writeb(dp_info->aux, DP_EDP_CONFIGURATION_SET, 1); in radeon_dp_link_train_init()
623 tmp = dp_info->dp_lane_count; in radeon_dp_link_train_init()
624 if (drm_dp_enhanced_frame_cap(dp_info->dpcd)) in radeon_dp_link_train_init()
626 drm_dp_dpcd_writeb(dp_info->aux, DP_LANE_COUNT_SET, tmp); in radeon_dp_link_train_init()
629 tmp = drm_dp_link_rate_to_bw_code(dp_info->dp_clock); in radeon_dp_link_train_init()
630 drm_dp_dpcd_writeb(dp_info->aux, DP_LINK_BW_SET, tmp); in radeon_dp_link_train_init()
633 if (ASIC_IS_DCE4(dp_info->rdev) || !dp_info->use_dpencoder) in radeon_dp_link_train_init()
634 atombios_dig_encoder_setup(dp_info->encoder, in radeon_dp_link_train_init()
637 radeon_dp_encoder_service(dp_info->rdev, ATOM_DP_ACTION_TRAINING_START, in radeon_dp_link_train_init()
638 dp_info->dp_clock, dp_info->enc_id, 0); in radeon_dp_link_train_init()
641 drm_dp_dpcd_writeb(dp_info->aux, in radeon_dp_link_train_init()
648 static int radeon_dp_link_train_finish(struct radeon_dp_link_train_info *dp_info) in radeon_dp_link_train_finish() argument
653 drm_dp_dpcd_writeb(dp_info->aux, in radeon_dp_link_train_finish()
658 if (ASIC_IS_DCE4(dp_info->rdev) || !dp_info->use_dpencoder) in radeon_dp_link_train_finish()
659 atombios_dig_encoder_setup(dp_info->encoder, in radeon_dp_link_train_finish()
662 radeon_dp_encoder_service(dp_info->rdev, ATOM_DP_ACTION_TRAINING_COMPLETE, in radeon_dp_link_train_finish()
663 dp_info->dp_clock, dp_info->enc_id, 0); in radeon_dp_link_train_finish()
668 static int radeon_dp_link_train_cr(struct radeon_dp_link_train_info *dp_info) in radeon_dp_link_train_cr() argument
674 radeon_dp_set_tp(dp_info, DP_TRAINING_PATTERN_1); in radeon_dp_link_train_cr()
675 memset(dp_info->train_set, 0, 4); in radeon_dp_link_train_cr()
676 radeon_dp_update_vs_emph(dp_info); in radeon_dp_link_train_cr()
682 dp_info->tries = 0; in radeon_dp_link_train_cr()
685 drm_dp_link_train_clock_recovery_delay(dp_info->dpcd); in radeon_dp_link_train_cr()
687 if (drm_dp_dpcd_read_link_status(dp_info->aux, in radeon_dp_link_train_cr()
688 dp_info->link_status) <= 0) { in radeon_dp_link_train_cr()
693 if (drm_dp_clock_recovery_ok(dp_info->link_status, dp_info->dp_lane_count)) { in radeon_dp_link_train_cr()
698 for (i = 0; i < dp_info->dp_lane_count; i++) { in radeon_dp_link_train_cr()
699 if ((dp_info->train_set[i] & DP_TRAIN_MAX_SWING_REACHED) == 0) in radeon_dp_link_train_cr()
702 if (i == dp_info->dp_lane_count) { in radeon_dp_link_train_cr()
707 if ((dp_info->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) == voltage) { in radeon_dp_link_train_cr()
708 ++dp_info->tries; in radeon_dp_link_train_cr()
709 if (dp_info->tries == 5) { in radeon_dp_link_train_cr()
714 dp_info->tries = 0; in radeon_dp_link_train_cr()
716 voltage = dp_info->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK; in radeon_dp_link_train_cr()
719 dp_get_adjust_train(dp_info->link_status, dp_info->dp_lane_count, dp_info->train_set); in radeon_dp_link_train_cr()
721 radeon_dp_update_vs_emph(dp_info); in radeon_dp_link_train_cr()
728 dp_info->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK, in radeon_dp_link_train_cr()
729 (dp_info->train_set[0] & DP_TRAIN_PRE_EMPHASIS_MASK) >> in radeon_dp_link_train_cr()
735 static int radeon_dp_link_train_ce(struct radeon_dp_link_train_info *dp_info) in radeon_dp_link_train_ce() argument
739 if (dp_info->tp3_supported) in radeon_dp_link_train_ce()
740 radeon_dp_set_tp(dp_info, DP_TRAINING_PATTERN_3); in radeon_dp_link_train_ce()
742 radeon_dp_set_tp(dp_info, DP_TRAINING_PATTERN_2); in radeon_dp_link_train_ce()
745 dp_info->tries = 0; in radeon_dp_link_train_ce()
748 drm_dp_link_train_channel_eq_delay(dp_info->dpcd); in radeon_dp_link_train_ce()
750 if (drm_dp_dpcd_read_link_status(dp_info->aux, in radeon_dp_link_train_ce()
751 dp_info->link_status) <= 0) { in radeon_dp_link_train_ce()
756 if (drm_dp_channel_eq_ok(dp_info->link_status, dp_info->dp_lane_count)) { in radeon_dp_link_train_ce()
762 if (dp_info->tries > 5) { in radeon_dp_link_train_ce()
768 dp_get_adjust_train(dp_info->link_status, dp_info->dp_lane_count, dp_info->train_set); in radeon_dp_link_train_ce()
770 radeon_dp_update_vs_emph(dp_info); in radeon_dp_link_train_ce()
771 dp_info->tries++; in radeon_dp_link_train_ce()
779 dp_info->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK, in radeon_dp_link_train_ce()
780 (dp_info->train_set[0] & DP_TRAIN_PRE_EMPHASIS_MASK) in radeon_dp_link_train_ce()
795 struct radeon_dp_link_train_info dp_info; in radeon_dp_link_train() local
816 dp_info.use_dpencoder = true; in radeon_dp_link_train()
820 dp_info.use_dpencoder = false; in radeon_dp_link_train()
824 dp_info.enc_id = 0; in radeon_dp_link_train()
826 dp_info.enc_id |= ATOM_DP_CONFIG_DIG2_ENCODER; in radeon_dp_link_train()
828 dp_info.enc_id |= ATOM_DP_CONFIG_DIG1_ENCODER; in radeon_dp_link_train()
830 dp_info.enc_id |= ATOM_DP_CONFIG_LINK_B; in radeon_dp_link_train()
832 dp_info.enc_id |= ATOM_DP_CONFIG_LINK_A; in radeon_dp_link_train()
837 dp_info.tp3_supported = true; in radeon_dp_link_train()
839 dp_info.tp3_supported = false; in radeon_dp_link_train()
841 dp_info.tp3_supported = false; in radeon_dp_link_train()
844 memcpy(dp_info.dpcd, dig_connector->dpcd, DP_RECEIVER_CAP_SIZE); in radeon_dp_link_train()
845 dp_info.rdev = rdev; in radeon_dp_link_train()
846 dp_info.encoder = encoder; in radeon_dp_link_train()
847 dp_info.connector = connector; in radeon_dp_link_train()
848 dp_info.dp_lane_count = dig_connector->dp_lane_count; in radeon_dp_link_train()
849 dp_info.dp_clock = dig_connector->dp_clock; in radeon_dp_link_train()
850 dp_info.aux = &radeon_connector->ddc_bus->aux; in radeon_dp_link_train()
852 if (radeon_dp_link_train_init(&dp_info)) in radeon_dp_link_train()
854 if (radeon_dp_link_train_cr(&dp_info)) in radeon_dp_link_train()
856 if (radeon_dp_link_train_ce(&dp_info)) in radeon_dp_link_train()
859 if (radeon_dp_link_train_finish(&dp_info)) in radeon_dp_link_train()