Patchwork [3.5.y.z,extended,stable] Patch "drm/nouveau: fix blank LVDS screen regression on pre-nv50" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Jan. 23, 2013, 4:44 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/214779/
State New
Headers show


Herton Ronaldo Krzesinski - Jan. 23, 2013, 4:44 a.m.
This is a note to let you know that I have just added a patch titled

    drm/nouveau: fix blank LVDS screen regression on pre-nv50

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 8f58e4fb40d07e9d1f6be530037cc320dce9c5c1 Mon Sep 17 00:00:00 2001
From: Marcin Slusarz <>
Date: Tue, 18 Dec 2012 20:30:47 +0100
Subject: [PATCH] drm/nouveau: fix blank LVDS screen regression on pre-nv50

commit 92441b2263866c27ef48137be5aa6c8c692652fc upstream.

Commit 2a44e499 ("drm/nouveau/disp: introduce proper init/fini, separate
from create/destroy") started to call display init routines on pre-nv50
hardware on module load. But LVDS init code sets driver state in a way
which prevents modesetting code from operating properly.

nv04_display_init calls nv04_dfp_restore, which sets encoder->last_dpms to


nv04_lvds_dpms checks last_dpms mode (which is NV_DPMS_CLEARED) and wrongly
assumes it's a "powersaving mode", the new one (DRM_MODE_DPMS_OFF) is too,
so it skips calling some crucial lvds scripts.

Reported-by: Chris Paulson-Ellis <>
Signed-off-by: Marcin Slusarz <>
Signed-off-by: Ben Skeggs <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 drivers/gpu/drm/nouveau/nv04_dfp.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/drivers/gpu/drm/nouveau/nv04_dfp.c b/drivers/gpu/drm/nouveau/nv04_dfp.c
index 11c9a1a..28c7a5a 100644
--- a/drivers/gpu/drm/nouveau/nv04_dfp.c
+++ b/drivers/gpu/drm/nouveau/nv04_dfp.c
@@ -504,7 +504,7 @@  static void nv04_dfp_update_backlight(struct drm_encoder *encoder, int mode)

 static inline bool is_powersaving_dpms(int mode)
-	return (mode != DRM_MODE_DPMS_ON);
+	return mode != DRM_MODE_DPMS_ON && mode != NV_DPMS_CLEARED;

 static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode)