Patchwork [1/1] UBUNTU: SAUCE: drm/i915: don't change DRM configuration when releasing load detect pipe

login
register
mail settings
Submitter Andy Whitcroft
Date March 31, 2010, 6:49 a.m.
Message ID <1270018187-7923-2-git-send-email-apw@canonical.com>
Download mbox | patch
Permalink /patch/49082/
State Accepted
Delegated to: Andy Whitcroft
Headers show

Comments

Andy Whitcroft - March 31, 2010, 6:49 a.m.
From: Jesse Barnes <jbarnes@virtuousgeek.org>

When we get a CRTC to use for load detection, we restore its DPMS state
if needed.  We shouldn't, however, change the DRM configuration by
calling drm_helper_disable_unused_functions when we release the CRTC.
Doing so can cause problems with resume, since at suspend or lid close
time, X may choose to probe outputs.  If it doesn't re-probe them at
open or resume time, LVDS won't be restored, since
drm_helper_disable_unused_functions will have turned it off, preventing
the mode set at lid open from restoring it.

Fixes kernel bz #14997.

Cc: stable at kernel.org
Tested-by: Takashi Iwai <tiwai at suse.de>
Tested-by: Thorsten Leemhuis <fedora at leemhuis.info>
Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>

BugLink: http://bugs.launchpad.net/bugs/488328
[apw@canonical.com: that this fix was still under discussion upstream
with the likely final resolution being different.  However the impact is
pretty great so we are taking this as an interim fix.]

Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Andy Whitcroft <apw@canonical.com>
---
 drivers/gpu/drm/i915/intel_display.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)
Stefan Bader - March 31, 2010, 10:02 a.m.
Looks ok.

Andy Whitcroft wrote:
> From: Jesse Barnes <jbarnes@virtuousgeek.org>
> 
> When we get a CRTC to use for load detection, we restore its DPMS state
> if needed.  We shouldn't, however, change the DRM configuration by
> calling drm_helper_disable_unused_functions when we release the CRTC.
> Doing so can cause problems with resume, since at suspend or lid close
> time, X may choose to probe outputs.  If it doesn't re-probe them at
> open or resume time, LVDS won't be restored, since
> drm_helper_disable_unused_functions will have turned it off, preventing
> the mode set at lid open from restoring it.
> 
> Fixes kernel bz #14997.
> 
> Cc: stable at kernel.org
> Tested-by: Takashi Iwai <tiwai at suse.de>
> Tested-by: Thorsten Leemhuis <fedora at leemhuis.info>
> Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
> 
> BugLink: http://bugs.launchpad.net/bugs/488328
> [apw@canonical.com: that this fix was still under discussion upstream
> with the likely final resolution being different.  However the impact is
> pretty great so we are taking this as an interim fix.]
> 
> Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
> Signed-off-by: Andy Whitcroft <apw@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c |    2 --
>  1 files changed, 0 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 0d4c401..0574155 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -3742,7 +3742,6 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output,
>  void intel_release_load_detect_pipe(struct intel_output *intel_output, int dpms_mode)
>  {
>  	struct drm_encoder *encoder = &intel_output->enc;
> -	struct drm_device *dev = encoder->dev;
>  	struct drm_crtc *crtc = encoder->crtc;
>  	struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
>  	struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
> @@ -3752,7 +3751,6 @@ void intel_release_load_detect_pipe(struct intel_output *intel_output, int dpms_
>  		intel_output->base.encoder = NULL;
>  		intel_output->load_detect_temp = false;
>  		crtc->enabled = drm_helper_crtc_in_use(crtc);
> -		drm_helper_disable_unused_functions(dev);
>  	}
>  
>  	/* Switch crtc and output back off if necessary */

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 0d4c401..0574155 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3742,7 +3742,6 @@  struct drm_crtc *intel_get_load_detect_pipe(struct intel_output *intel_output,
 void intel_release_load_detect_pipe(struct intel_output *intel_output, int dpms_mode)
 {
 	struct drm_encoder *encoder = &intel_output->enc;
-	struct drm_device *dev = encoder->dev;
 	struct drm_crtc *crtc = encoder->crtc;
 	struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
 	struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
@@ -3752,7 +3751,6 @@  void intel_release_load_detect_pipe(struct intel_output *intel_output, int dpms_
 		intel_output->base.encoder = NULL;
 		intel_output->load_detect_temp = false;
 		crtc->enabled = drm_helper_crtc_in_use(crtc);
-		drm_helper_disable_unused_functions(dev);
 	}
 
 	/* Switch crtc and output back off if necessary */