Bug 728228 - [radeon] DPMS will not power down my monitors
Summary: [radeon] DPMS will not power down my monitors
Alias: None
Product: Fedora
Classification: Fedora
Component: kernel
Version: 15
Hardware: x86_64
OS: Linux
Target Milestone: ---
Assignee: Kernel Maintainer List
QA Contact: Fedora Extras Quality Assurance
Depends On:
TreeView+ depends on / blocked
Reported: 2011-08-04 13:04 UTC by Kevin DeKorte
Modified: 2011-10-21 01:11 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Last Closed: 2011-10-21 01:11:29 UTC
Type: ---

Attachments (Terms of Use)

Description Kevin DeKorte 2011-08-04 13:04:19 UTC
Description of problem:
Upgraded from kernel to kernel 2.6.40-4 and the dpms support of my monitors changed, the system would no longer power down the displays. Rebooting into the older kernel made the problem go away.

Version-Release number of selected component (if applicable):


How reproducible:

Steps to Reproduce:
1.sleep 1; xset dpms force off
Actual results:
monitors go black and then come back

Expected results:
monitors should go black and then a second or so later should power off

Additional info:
radeon 3650 video card
KMS is enabled and being used
dual displays

Screen 0: minimum 320 x 200, current 3600 x 1200, maximum 8192 x 8192
DVI-0 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
   1920x1200      60.0*+
   1920x1080      60.0  
   1600x1200      60.0  
   1680x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1024x768       60.0  
   800x600        60.3  
   640x480        60.0  
DIN disconnected (normal left inverted right x axis y axis)
DVI-1 connected 1680x1050+1920+0 (normal left inverted right x axis y axis) 450mm x 280mm
   1680x1050      60.0*+
   1280x1024      75.0     60.0  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   640x480        72.8     75.0     66.7     60.0  
   720x400        70.1

Comment 1 Kevin DeKorte 2011-08-04 13:53:36 UTC
Problem also exists in kernel-

Comment 2 Kevin DeKorte 2011-08-04 15:29:28 UTC
01:00.0 VGA compatible controller: ATI Technologies Inc Mobility Radeon HD 3600 Series (prog-if 00 [VGA controller])
	Subsystem: ASUSTeK Computer Inc. Device 01da
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 32 bytes
	Interrupt: pin A routed to IRQ 45
	Region 0: Memory at d0000000 (64-bit, prefetchable) [size=256M]
	Region 2: Memory at fe9e0000 (64-bit, non-prefetchable) [size=64K]
	Region 4: I/O ports at d000 [size=256]
	[virtual] Expansion ROM at fe900000 [disabled] [size=128K]
	Capabilities: <access denied>
	Kernel driver in use: radeon
	Kernel modules: radeon

Comment 3 Kevin DeKorte 2011-08-09 13:32:19 UTC
I performed a git bisect on this issue and the result of that was the following.

1e85e1d07b9255bd52c557f1a77fb72ccfacaf1c is the first bad commit
commit 1e85e1d07b9255bd52c557f1a77fb72ccfacaf1c
Author: Alex Deucher <alexdeucher@gmail.com>
Date:   Fri May 20 04:34:29 2011 -0400

    drm/radeon/kms: simplify hotplug handler logic
    In the hotplug handler, just use the drm dpms functions.
    If the monitor is plugged in, turn it on, if it's not,
    turn it off.  This also reduces power usage by turning
    off the encoder and crtc when the monitor is unplugged.
    Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>

:040000 040000 8838a7f0f02513ef188c7741738f6a044c9e1e39 40499f2c695e56b34e15557ff49d96c3266748b3 M	drivers

Comment 4 Kevin DeKorte 2011-08-09 23:14:23 UTC
The following patch by agd5f fixes the problem...

diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon
index 9792d4f..b8ccdd7 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -60,6 +60,10 @@ void radeon_connector_hotplug(struct drm_connector *connector
        radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
+       /* if the connector is already off, don't turn it back on */
+       if (connector->dpms != DRM_MODE_DPMS_ON)
+               return;
        /* powering up/down the eDP panel generates hpd events which
         * can interfere with modesetting.

Comment 5 Chuck Ebbert 2011-08-10 12:29:12 UTC
(In reply to comment #4)
> The following patch by agd5f fixes the problem...

That has been submitted upstream and marked for stable.

Comment 6 Josh Boyer 2011-10-21 01:11:29 UTC
This should be fixed in the latest update.  The stable commit went into 3.0.3 as cdc0fbfac92e20e64737ec0648f38be.

Note You need to log in before you can comment on or make changes to this bug.