[PATCH] drm/radeon/kms/atom: fix PHY init

Ari Savolainen ari.m.savolainen at gmail.com
Fri Jun 3 13:53:07 PDT 2011


I tested the patch and it fixed the problem.

Thanks,
Ari

2011/6/3 Alex Deucher <alexdeucher at gmail.com>:
> The PHY was not initialized correctly after
> ac89af1e1010640db072416c786f97391b85790f since
> the function bailed early as an encoder was not
> assigned.  The encoder isn't necessary for PHY init
> so just assign to 0 for init so that the table
> is executed.
>
> Reported-by: Ari Savolainen <ari.m.savolainen at gmail.com>
>
> Cc: Ari Savolainen <ari.m.savolainen at gmail.com>
> Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
> ---
>  drivers/gpu/drm/radeon/radeon_encoders.c |   17 +++++++++++------
>  1 files changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
> index 13e4fa0..302248b 100644
> --- a/drivers/gpu/drm/radeon/radeon_encoders.c
> +++ b/drivers/gpu/drm/radeon/radeon_encoders.c
> @@ -949,10 +949,15 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
>        int dp_lane_count = 0;
>        int connector_object_id = 0;
>        int igp_lane_info = 0;
> +       int dig_encoder = dig->dig_encoder;
>
> -       if (action == ATOM_TRANSMITTER_ACTION_INIT)
> +       if (action == ATOM_TRANSMITTER_ACTION_INIT) {
>                connector = radeon_get_connector_for_encoder_init(encoder);
> -       else
> +               /* just needed to avoid bailing in the encoder check.  the encoder
> +                * isn't used for init
> +                */
> +               dig_encoder = 0;
> +       } else
>                connector = radeon_get_connector_for_encoder(encoder);
>
>        if (connector) {
> @@ -968,7 +973,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
>        }
>
>        /* no dig encoder assigned */
> -       if (dig->dig_encoder == -1)
> +       if (dig_encoder == -1)
>                return;
>
>        if (atombios_get_encoder_mode(encoder) == ATOM_ENCODER_MODE_DP)
> @@ -1018,7 +1023,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
>
>                if (dig->linkb)
>                        args.v3.acConfig.ucLinkSel = 1;
> -               if (dig->dig_encoder & 1)
> +               if (dig_encoder & 1)
>                        args.v3.acConfig.ucEncoderSel = 1;
>
>                /* Select the PLL for the PHY
> @@ -1068,7 +1073,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
>                                args.v3.acConfig.fDualLinkConnector = 1;
>                }
>        } else if (ASIC_IS_DCE32(rdev)) {
> -               args.v2.acConfig.ucEncoderSel = dig->dig_encoder;
> +               args.v2.acConfig.ucEncoderSel = dig_encoder;
>                if (dig->linkb)
>                        args.v2.acConfig.ucLinkSel = 1;
>
> @@ -1095,7 +1100,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
>        } else {
>                args.v1.ucConfig = ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL;
>
> -               if (dig->dig_encoder)
> +               if (dig_encoder)
>                        args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG2_ENCODER;
>                else
>                        args.v1.ucConfig |= ATOM_TRANSMITTER_CONFIG_DIG1_ENCODER;
> --
> 1.7.1.1
>
>


More information about the dri-devel mailing list