Patchwork [Oneiric,SRU,1/1] UBUNTU: SAUCE: drm/radeon/kms: Fix logic error in DP HPD handler

login
register
mail settings
Submitter Leann Ogasawara
Date Oct. 4, 2011, 4:32 p.m.
Message ID <1317745977.30431.24.camel@adamo>
Download mbox | patch
Permalink /patch/117663/
State New
Headers show

Comments

Leann Ogasawara - Oct. 4, 2011, 4:32 p.m.
BugLink: https://bugs.launchpad.net/bugs/860868

== SRU Justification ==
A regression was introduced in the v3.0.3 upstream stable update.  The
bug reporter has a HD5770 card with 3 screens connected (1 monitor to
DisplayPort-0, 1 monitor to the DVI-0, and a TV to the HDMI-0).  The
screen connected to display port immediately goes black and reports "no
signal".  To wake the screen again, they had to issue the command "xset
dpms force suspend" which then wakes the screen connected to the display
port.  The same thing also happens when turning the tv off.

We narrowed down the 2 problematic patches introduced in v3.0.3.  I
escalated the issue back to upstream stable as well as the author of the
patches.  We were provided the following fix which has been tested and
confirmed to resolve this regression.  It has been sent to upstream
dri-devel and CC'd upstream stable but has not yet been applied.  As
this resolves a regression, I think we should carry this as a SAUCE
patch until it comes back down through stable.

== Fix ==
http://lists.freedesktop.org/archives/dri-devel/2011-October/014882.html

== Test Case ==
With the fix applied, turn tv on and off and confirm it does not
interfere with other connected displays.

From 2826ac1eb77c3741265a115ef67a671f290dd5d0 Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexander.deucher@amd.com>
Date: Fri, 30 Sep 2011 13:05:44 -0700
Subject: [PATCH] UBUNTU: SAUCE: drm/radeon/kms: Fix logic error in DP HPD handler

BugLink: https://bugs.launchpad.net/bugs/860868

Only disable the pipe if the monitor is physically
disconnected.  The previous logic also disabled the
pipe if the link was trained.

Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=41248

http://lists.freedesktop.org/archives/dri-devel/2011-October/014882.html

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@kernel.org

Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>
---
 drivers/gpu/drm/radeon/radeon_connectors.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)
Seth Forshee - Oct. 4, 2011, 4:55 p.m.
On Tue, Oct 04, 2011 at 09:32:57AM -0700, Leann Ogasawara wrote:
> BugLink: https://bugs.launchpad.net/bugs/860868
> 
> == SRU Justification ==
> A regression was introduced in the v3.0.3 upstream stable update.  The
> bug reporter has a HD5770 card with 3 screens connected (1 monitor to
> DisplayPort-0, 1 monitor to the DVI-0, and a TV to the HDMI-0).  The
> screen connected to display port immediately goes black and reports "no
> signal".  To wake the screen again, they had to issue the command "xset
> dpms force suspend" which then wakes the screen connected to the display
> port.  The same thing also happens when turning the tv off.
> 
> We narrowed down the 2 problematic patches introduced in v3.0.3.  I
> escalated the issue back to upstream stable as well as the author of the
> patches.  We were provided the following fix which has been tested and
> confirmed to resolve this regression.  It has been sent to upstream
> dri-devel and CC'd upstream stable but has not yet been applied.  As
> this resolves a regression, I think we should carry this as a SAUCE
> patch until it comes back down through stable.
> 
> == Fix ==
> http://lists.freedesktop.org/archives/dri-devel/2011-October/014882.html
> 
> == Test Case ==
> With the fix applied, turn tv on and off and confirm it does not
> interfere with other connected displays.
> 
> From 2826ac1eb77c3741265a115ef67a671f290dd5d0 Mon Sep 17 00:00:00 2001
> From: Alex Deucher <alexander.deucher@amd.com>
> Date: Fri, 30 Sep 2011 13:05:44 -0700
> Subject: [PATCH] UBUNTU: SAUCE: drm/radeon/kms: Fix logic error in DP HPD handler
> 
> BugLink: https://bugs.launchpad.net/bugs/860868
> 
> Only disable the pipe if the monitor is physically
> disconnected.  The previous logic also disabled the
> pipe if the link was trained.
> 
> Fixes:
> https://bugs.freedesktop.org/show_bug.cgi?id=41248
> 
> http://lists.freedesktop.org/archives/dri-devel/2011-October/014882.html
> 
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: stable@kernel.org
> 
> Signed-off-by: Leann Ogasawara <leann.ogasawara@canonical.com>

Looks reasonable and has positive test result.

Acked-by: Seth Forshee <seth.forshee@canonical.com>
Tim Gardner - Oct. 4, 2011, 5:26 p.m.
On 10/04/2011 10:32 AM, Leann Ogasawara wrote:
> BugLink: https://bugs.launchpad.net/bugs/860868
>
> == SRU Justification ==
> A regression was introduced in the v3.0.3 upstream stable update.  The
> bug reporter has a HD5770 card with 3 screens connected (1 monitor to
> DisplayPort-0, 1 monitor to the DVI-0, and a TV to the HDMI-0).  The
> screen connected to display port immediately goes black and reports "no
> signal".  To wake the screen again, they had to issue the command "xset
> dpms force suspend" which then wakes the screen connected to the display
> port.  The same thing also happens when turning the tv off.
>
> We narrowed down the 2 problematic patches introduced in v3.0.3.  I
> escalated the issue back to upstream stable as well as the author of the
> patches.  We were provided the following fix which has been tested and
> confirmed to resolve this regression.  It has been sent to upstream
> dri-devel and CC'd upstream stable but has not yet been applied.  As
> this resolves a regression, I think we should carry this as a SAUCE
> patch until it comes back down through stable.
>
> == Fix ==
> http://lists.freedesktop.org/archives/dri-devel/2011-October/014882.html
>
> == Test Case ==
> With the fix applied, turn tv on and off and confirm it does not
> interfere with other connected displays.
>
>  From 2826ac1eb77c3741265a115ef67a671f290dd5d0 Mon Sep 17 00:00:00 2001
> From: Alex Deucher<alexander.deucher@amd.com>
> Date: Fri, 30 Sep 2011 13:05:44 -0700
> Subject: [PATCH] UBUNTU: SAUCE: drm/radeon/kms: Fix logic error in DP HPD handler
>
> BugLink: https://bugs.launchpad.net/bugs/860868
>
> Only disable the pipe if the monitor is physically
> disconnected.  The previous logic also disabled the
> pipe if the link was trained.
>
> Fixes:
> https://bugs.freedesktop.org/show_bug.cgi?id=41248
>
> http://lists.freedesktop.org/archives/dri-devel/2011-October/014882.html
>
> Signed-off-by: Alex Deucher<alexander.deucher@amd.com>
> Cc: stable@kernel.org
>
> Signed-off-by: Leann Ogasawara<leann.ogasawara@canonical.com>
> ---
>   drivers/gpu/drm/radeon/radeon_connectors.c |    8 ++++----
>   1 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
> index d1b36f8..05b8b2c 100644
> --- a/drivers/gpu/drm/radeon/radeon_connectors.c
> +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
> @@ -68,11 +68,11 @@ void radeon_connector_hotplug(struct drm_connector *connector)
>   	if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
>   		int saved_dpms = connector->dpms;
>
> -		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)&&
> -		    radeon_dp_needs_link_train(radeon_connector))
> -			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
> -		else
> +		/* Only turn off the display it it's physically disconnected */
> +		if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
>   			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
> +		else if (radeon_dp_needs_link_train(radeon_connector))
> +			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
>   		connector->dpms = saved_dpms;
>   	}
>   }

Patch

diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index d1b36f8..05b8b2c 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -68,11 +68,11 @@  void radeon_connector_hotplug(struct drm_connector *connector)
 	if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
 		int saved_dpms = connector->dpms;
 
-		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd) &&
-		    radeon_dp_needs_link_train(radeon_connector))
-			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
-		else
+		/* Only turn off the display it it's physically disconnected */
+		if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
 			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
+		else if (radeon_dp_needs_link_train(radeon_connector))
+			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
 		connector->dpms = saved_dpms;
 	}
 }