On Thu, Jul 21, 2011 at 3:10 PM,  <j.glisse at gmail.com> wrote:
> From: Jerome Glisse <jglisse at redhat.com>
>
> atombios functuion DIG*EncoderControl works more reliably (100% link training
> success vs 30% link training success on some monitor like HP ZR22w) for DP 
> link
> training than DPEncoderService for DCE3 display block.
>
> Signed-off-by: Jerome Glisse <jglisse at redhat.com>

NACK.  Only certain DCE3.2 cards need this change.

Alex

> ---
> ?drivers/gpu/drm/radeon/atombios_dp.c | ? 52 
> ++++++++++------------------------
> ?1 files changed, 15 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/atombios_dp.c 
> b/drivers/gpu/drm/radeon/atombios_dp.c
> index 8c0f9e3..9093e5e 100644
> --- a/drivers/gpu/drm/radeon/atombios_dp.c
> +++ b/drivers/gpu/drm/radeon/atombios_dp.c
> @@ -645,32 +645,18 @@ static void radeon_dp_set_tp(struct 
> radeon_dp_link_train_info *dp_info, int tp)
> ?{
> ? ? ? ?int rtp = 0;
>
> - ? ? ? /* set training pattern on the source */
> - ? ? ? if (ASIC_IS_DCE4(dp_info->rdev)) {
> - ? ? ? ? ? ? ? switch (tp) {
> - ? ? ? ? ? ? ? case DP_TRAINING_PATTERN_1:
> - ? ? ? ? ? ? ? ? ? ? ? rtp = ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1;
> - ? ? ? ? ? ? ? ? ? ? ? break;
> - ? ? ? ? ? ? ? case DP_TRAINING_PATTERN_2:
> - ? ? ? ? ? ? ? ? ? ? ? rtp = ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2;
> - ? ? ? ? ? ? ? ? ? ? ? break;
> - ? ? ? ? ? ? ? case DP_TRAINING_PATTERN_3:
> - ? ? ? ? ? ? ? ? ? ? ? rtp = ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3;
> - ? ? ? ? ? ? ? ? ? ? ? break;
> - ? ? ? ? ? ? ? }
> - ? ? ? ? ? ? ? atombios_dig_encoder_setup(dp_info->encoder, rtp, 0);
> - ? ? ? } else {
> - ? ? ? ? ? ? ? switch (tp) {
> - ? ? ? ? ? ? ? case DP_TRAINING_PATTERN_1:
> - ? ? ? ? ? ? ? ? ? ? ? rtp = 0;
> - ? ? ? ? ? ? ? ? ? ? ? break;
> - ? ? ? ? ? ? ? case DP_TRAINING_PATTERN_2:
> - ? ? ? ? ? ? ? ? ? ? ? rtp = 1;
> - ? ? ? ? ? ? ? ? ? ? ? break;
> - ? ? ? ? ? ? ? }
> - ? ? ? ? ? ? ? radeon_dp_encoder_service(dp_info->rdev, 
> ATOM_DP_ACTION_TRAINING_PATTERN_SEL,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dp_info->dp_clock, dp_info->enc_id, 
> rtp);
> + ? ? ? switch (tp) {
> + ? ? ? case DP_TRAINING_PATTERN_1:
> + ? ? ? ? ? ? ? rtp = ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1;
> + ? ? ? ? ? ? ? break;
> + ? ? ? case DP_TRAINING_PATTERN_2:
> + ? ? ? ? ? ? ? rtp = ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN2;
> + ? ? ? ? ? ? ? break;
> + ? ? ? case DP_TRAINING_PATTERN_3:
> + ? ? ? ? ? ? ? rtp = ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN3;
> + ? ? ? ? ? ? ? break;
> ? ? ? ?}
> + ? ? ? atombios_dig_encoder_setup(dp_info->encoder, rtp, 0);
>
> ? ? ? ?/* enable training pattern on the sink */
> ? ? ? ?radeon_write_dpcd_reg(dp_info->radeon_connector, 
> DP_TRAINING_PATTERN_SET, tp);
> @@ -706,12 +692,8 @@ static int radeon_dp_link_train_init(struct 
> radeon_dp_link_train_info *dp_info)
> ? ? ? ?radeon_write_dpcd_reg(dp_info->radeon_connector, DP_LINK_BW_SET, tmp);
>
> ? ? ? ?/* start training on the source */
> - ? ? ? if (ASIC_IS_DCE4(dp_info->rdev))
> - ? ? ? ? ? ? ? atombios_dig_encoder_setup(dp_info->encoder,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
> ?ATOM_ENCODER_CMD_DP_LINK_TRAINING_START, 0);
> - ? ? ? else
> - ? ? ? ? ? ? ? radeon_dp_encoder_service(dp_info->rdev, 
> ATOM_DP_ACTION_TRAINING_START,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dp_info->dp_clock, dp_info->enc_id, 
> 0);
> + ? ? ? atombios_dig_encoder_setup(dp_info->encoder,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ATOM_ENCODER_CMD_DP_LINK_TRAINING_START, 0);
>
> ? ? ? ?/* disable the training pattern on the sink */
> ? ? ? ?radeon_write_dpcd_reg(dp_info->radeon_connector,
> @@ -731,12 +713,8 @@ static int radeon_dp_link_train_finish(struct 
> radeon_dp_link_train_info *dp_info
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DP_TRAINING_PATTERN_DISABLE);
>
> ? ? ? ?/* disable the training pattern on the source */
> - ? ? ? if (ASIC_IS_DCE4(dp_info->rdev))
> - ? ? ? ? ? ? ? atombios_dig_encoder_setup(dp_info->encoder,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
> ?ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE, 0);
> - ? ? ? else
> - ? ? ? ? ? ? ? radeon_dp_encoder_service(dp_info->rdev, 
> ATOM_DP_ACTION_TRAINING_COMPLETE,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dp_info->dp_clock, dp_info->enc_id, 
> 0);
> + ? ? ? atombios_dig_encoder_setup(dp_info->encoder,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE, 
> 0);
>
> ? ? ? ?return 0;
> ?}
> --
> 1.7.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>

Reply via email to