On Fri, Mar 9, 2018 at 12:27 PM, Michel Dänzer <mic...@daenzer.net> wrote:
> From: Michel Dänzer <michel.daen...@amd.com>
>
> Turning off the sink in this case causes various issues, because
> userspace expects it to stay on until it turns it off explicitly.
>
> Instead, turn the sink off and back on when a display is connected
> again. This dance seems necessary for link training to work correctly.
>
> Bugzilla: https://bugs.freedesktop.org/105308
> Signed-off-by: Michel Dänzer <michel.daen...@amd.com>

Reviewed-by: Alex Deucher <alexander.deuc...@amd.com>

Care to send a similar patch for radeon as well?

Alex

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 31 
> ++++++++++----------------
>  1 file changed, 12 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> index ffc1f6f46913..9da8d5802980 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> @@ -69,25 +69,18 @@ void amdgpu_connector_hotplug(struct drm_connector 
> *connector)
>                 /* don't do anything if sink is not display port, i.e.,
>                  * passive dp->(dvi|hdmi) adaptor
>                  */
> -               if (dig_connector->dp_sink_type == 
> CONNECTOR_OBJECT_ID_DISPLAYPORT) {
> -                       int saved_dpms = connector->dpms;
> -                       /* Only turn off the display if it's physically 
> disconnected */
> -                       if (!amdgpu_display_hpd_sense(adev, 
> amdgpu_connector->hpd.hpd)) {
> -                               drm_helper_connector_dpms(connector, 
> DRM_MODE_DPMS_OFF);
> -                       } else if 
> (amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
> -                               /* Don't try to start link training before we
> -                                * have the dpcd */
> -                               if 
> (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
> -                                       return;
> -
> -                               /* set it to OFF so that 
> drm_helper_connector_dpms()
> -                                * won't return immediately since the current 
> state
> -                                * is ON at this point.
> -                                */
> -                               connector->dpms = DRM_MODE_DPMS_OFF;
> -                               drm_helper_connector_dpms(connector, 
> DRM_MODE_DPMS_ON);
> -                       }
> -                       connector->dpms = saved_dpms;
> +               if (dig_connector->dp_sink_type == 
> CONNECTOR_OBJECT_ID_DISPLAYPORT &&
> +                   amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd) 
> &&
> +                   amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
> +                       /* Don't start link training before we have the DPCD 
> */
> +                       if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
> +                               return;
> +
> +                       /* Turn the connector off and back on immediately, 
> which
> +                        * will trigger link training
> +                        */
> +                       drm_helper_connector_dpms(connector, 
> DRM_MODE_DPMS_OFF);
> +                       drm_helper_connector_dpms(connector, 
> DRM_MODE_DPMS_ON);
>                 }
>         }
>  }
> --
> 2.16.2
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to