[PATCH] drm/amdgpu/dce: Don't turn off DP sink when disconnected

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Mar 9, 2018 at 12:27 PM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at 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.daenzer at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux