Bug 70701

Summary: With DPM enabled, Radeon 4570 (R710) doesn't remain in Single_Disp state
Product: Drivers Reporter: Abhinav K (abhinav.kumar.in)
Component: Video(DRI - non Intel)Assignee: drivers_video-dri
Status: RESOLVED CODE_FIX    
Severity: normal CC: alexdeucher
Priority: P1    
Hardware: x86-64   
OS: Linux   
Kernel Version: 3.13 Subsystem:
Regression: No Bisected commit-id:
Attachments: possible fix
Dmesg output after applying fix

Description Abhinav K 2014-02-17 08:49:18 UTC
When using DPM with the open-source radeon driver, the Card first gets into Power-State-1 which is the desirable one. But after few seconds, it changes its state to a seemingly multi-display one.

Tested on a Dell Studio 1555 with Radeon 4570 running Trusty alpha and openSUSE 13.1.

01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] RV710/M92 [Mobility Radeon HD 4530/4570/545v] [1002:9553] (prog-if 00 [VGA controller])
        Subsystem: Dell Mobility Radeon HD 4570 [1028:02be]
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at d0000000 (32-bit, prefetchable) [size=256M]
        I/O ports at 2000 [size=256]
        Memory at fc000000 (32-bit, non-prefetchable) [size=64K]
        [virtual] Expansion ROM at fc020000 [disabled] [size=128K]
        Capabilities: <access denied>
        Kernel driver in use: radeon


Dmesg log.
(It successfully gets into single_disp video mode.)
[    2.047282] [drm] ib test on ring 5 succeeded
[    2.073894] [drm] radeon atom DIG backlight initialized
[    2.073898] [drm] Radeon Display Connectors
[    2.073900] [drm] Connector 0:
[    2.073902] [drm]   VGA-1
[    2.073904] [drm]   DDC: 0x7fa0 0x7fa0 0x7fa4 0x7fa4 0x7fa8 0x7fa8 0x7fac 0x7fac
[    2.073906] [drm]   Encoders:
[    2.073907] [drm]     CRT1: INTERNAL_KLDSCP_DAC1
[    2.073923] [drm] Connector 1:
[    2.073925] [drm]   HDMI-A-1
[    2.073926] [drm]   HPD1
[    2.073928] [drm]   DDC: 0x7e50 0x7e50 0x7e54 0x7e54 0x7e58 0x7e58 0x7e5c 0x7e5c
[    2.073930] [drm]   Encoders:
[    2.073931] [drm]     DFP1: INTERNAL_UNIPHY
[    2.073932] [drm] Connector 2:
[    2.073934] [drm]   LVDS-1
[    2.073937] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    2.073940] [drm]   DDC: 0x7e40 0x7e40 0x7e44 0x7e44 0x7e48 0x7e48 0x7e4c 0x7e4c
[    2.073955] [drm]   Encoders:
[    2.073956] [drm]     LCD1: INTERNAL_UNIPHY2
[    2.073997] [drm] Internal thermal controller with fan control
[    2.074090] == power state 0 ==
[    2.074092]  ui class: none
[    2.074094]  internal class: boot 
[    2.074096]  caps: video 
[    2.074099]  uvd    vclk: 0 dclk: 0
[    2.074115]          power level 0    sclk: 50000 mclk: 80000 vddc: 1200
[    2.074117]          power level 1    sclk: 50000 mclk: 80000 vddc: 1200
[    2.074119]          power level 2    sclk: 50000 mclk: 80000 vddc: 1200
[    2.074120]  status: c r b 
[    2.074123] == power state 1 ==
[    2.074124]  ui class: performance
[    2.074126]  internal class: none
[    2.074128]  caps: single_disp video 
[    2.074131]  uvd    vclk: 0 dclk: 0
[    2.074133]          power level 0    sclk: 22000 mclk: 30000 vddc: 900
[    2.074149]          power level 1    sclk: 30000 mclk: 50000 vddc: 900
[    2.074150]          power level 2    sclk: 68000 mclk: 80000 vddc: 1200
[    2.074152]  status: 
[    2.074153] == power state 2 ==
[    2.074155]  ui class: battery
[    2.074156]  internal class: none
[    2.074158]  caps: single_disp video 
[    2.074161]  uvd    vclk: 0 dclk: 0
[    2.074163]          power level 0    sclk: 22000 mclk: 30000 vddc: 900
[    2.074164]          power level 1    sclk: 30000 mclk: 30000 vddc: 900
[    2.074180]          power level 2    sclk: 30000 mclk: 30000 vddc: 900
[    2.074181]  status: 
[    2.074183] == power state 3 ==
[    2.074184]  ui class: none
[    2.074185]  internal class: uvd 
[    2.074188]  caps: video 
[    2.074190]  uvd    vclk: 54000 dclk: 40000
[    2.074192]          power level 0    sclk: 60000 mclk: 80000 vddc: 1100
[    2.074193]          power level 1    sclk: 60000 mclk: 80000 vddc: 1100
[    2.074195]          power level 2    sclk: 60000 mclk: 80000 vddc: 1100
[    2.074196]  status: 
[    2.074212] == power state 4 ==
[    2.074213]  ui class: performance
[    2.074214]  internal class: none
[    2.074216]  caps: video 
[    2.074219]  uvd    vclk: 0 dclk: 0
[    2.074220]          power level 0    sclk: 30000 mclk: 80000 vddc: 1200
[    2.074222]          power level 1    sclk: 30000 mclk: 80000 vddc: 1200
[    2.074224]          power level 2    sclk: 68000 mclk: 80000 vddc: 1200
[    2.074225]  status: 
[    2.074226] == power state 5 ==
[    2.074227]  ui class: battery
[    2.074243]  internal class: none
[    2.074245]  caps: video 
[    2.074247]  uvd    vclk: 0 dclk: 0
[    2.074249]          power level 0    sclk: 30000 mclk: 40000 vddc: 1000
[    2.074251]          power level 1    sclk: 30000 mclk: 40000 vddc: 1000
[    2.074252]          power level 2    sclk: 30000 mclk: 40000 vddc: 1000
[    2.074253]  status: 
[    2.074255] == power state 6 ==
[    2.074256]  ui class: none
[    2.074257]  internal class: uvd_hd 
[    2.074259]  caps: video 
[    2.074276]  uvd    vclk: 40000 dclk: 30000
[    2.074278]          power level 0    sclk: 45000 mclk: 50000 vddc: 1000
[    2.074279]          power level 1    sclk: 45000 mclk: 50000 vddc: 1000
[    2.074281]          power level 2    sclk: 45000 mclk: 50000 vddc: 1000
[    2.074282]  status: 
[    2.074284] == power state 7 ==
[    2.074285]  ui class: none
[    2.074286]  internal class: uvd_sd 
[    2.074288]  caps: video 
[    2.074291]  uvd    vclk: 10000 dclk: 10000
[    2.074292]          power level 0    sclk: 30000 mclk: 40000 vddc: 900
[    2.074308]          power level 1    sclk: 30000 mclk: 40000 vddc: 900
[    2.074310]          power level 2    sclk: 30000 mclk: 40000 vddc: 900
[    2.074311]  status: 
[    2.076071] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
[    2.078243] ata1.00: ATA-8: ST9500325AS, 0003DEM1, max UDMA/133
[    2.078260] ata1.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 31/32)
[    2.080345] ata1.00: configured for UDMA/133
[    2.080712] scsi 0:0:0:0: Direct-Access     ATA      ST9500325AS      0003 PQ: 0 ANSI: 5
[    2.081012] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[    2.081051] sd 0:0:0:0: Attached scsi generic sg0 type 0
[    2.081194] sd 0:0:0:0: [sda] Write Protect is off
[    2.081197] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    2.081274] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.090253] ata2.00: ATAPI: TSSTcorp DVD+/-RW TS-T633A, DW20, max UDMA/100
[    2.090259] ata2.00: applying bridge limits
[    2.104271] ata2.00: configured for UDMA/100
[    2.107969] scsi 1:0:0:0: CD-ROM            TSSTcorp DVD+-RW TS-T633A DW20 PQ: 0 ANSI: 5
[    2.113543] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray
[    2.113549] cdrom: Uniform CD-ROM driver Revision: 3.20
[    2.113784] sr 1:0:0:0: Attached scsi CD-ROM sr0
[    2.113903] sr 1:0:0:0: Attached scsi generic sg1 type 5
[    2.165001]  sda: sda1 sda2 sda3 sda4 < sda5 sda6 >
[    2.166164] sd 0:0:0:0: [sda] Attached SCSI disk
[    2.176413] switching from power state:
[    2.176418]  ui class: none
[    2.176420]  internal class: boot 
[    2.176422]  caps: video 
[    2.176425]  uvd    vclk: 0 dclk: 0
[    2.176428]          power level 0    sclk: 50000 mclk: 80000 vddc: 1200
[    2.176443]          power level 1    sclk: 50000 mclk: 80000 vddc: 1200
[    2.176445]          power level 2    sclk: 50000 mclk: 80000 vddc: 1200
[    2.176446]  status: c b 
[    2.176449] switching to power state:
[    2.176450]  ui class: performance
[    2.176451]  internal class: none
[    2.176454]  caps: single_disp video 
[    2.176457]  uvd    vclk: 0 dclk: 0
[    2.176458]          power level 0    sclk: 22000 mclk: 30000 vddc: 900
[    2.176474]          power level 1    sclk: 30000 mclk: 50000 vddc: 900
[    2.176476]          power level 2    sclk: 68000 mclk: 80000 vddc: 1200
[    2.176477]  status: r 
[    2.180231] firewire_core 0000:09:01.0: created device fw0: GUID 324fc0003c809158, S400
[    2.182491] [drm] radeon: dpm initialized

==================================================================

After a sec, it moves into another state.

[    3.378716] [drm] fb mappable at 0xD045E000
[    3.378719] [drm] vram apper at 0xD0000000
[    3.378721] [drm] size 4325376
[    3.378722] [drm] fb depth is 24
[    3.378724] [drm]    pitch is 5632
[    3.378877] fbcon: radeondrmfb (fb0) is primary device
[    3.620192] switching from power state:
[    3.620212]  ui class: performance
[    3.620214]  internal class: none
[    3.620217]  caps: single_disp video 
[    3.620219]  uvd    vclk: 0 dclk: 0
[    3.620221]          power level 0    sclk: 22000 mclk: 30000 vddc: 900
[    3.620222]          power level 1    sclk: 30000 mclk: 50000 vddc: 900
[    3.620224]          power level 2    sclk: 68000 mclk: 80000 vddc: 1200
[    3.620226]  status: c 
[    3.620227] switching to power state:
[    3.620228]  ui class: performance
[    3.620244]  internal class: none
[    3.620247]  caps: video 
[    3.620248]  uvd    vclk: 0 dclk: 0
[    3.620250]          power level 0    sclk: 30000 mclk: 80000 vddc: 1200
[    3.620251]          power level 1    sclk: 30000 mclk: 80000 vddc: 1200
[    3.620253]          power level 2    sclk: 68000 mclk: 80000 vddc: 1200
[    3.620254]  status: r 
[    4.440416] Console: switching to colour frame buffer device 170x48
[    4.446012] radeon 0000:01:00.0: fb0: radeondrmfb frame buffer device
[    4.446014] radeon 0000:01:00.0: registered panic notifier
[    4.446045] [drm] Initialized radeon 2.34.0 20080528 for 0000:01:00.0 on minor 0

Xrandr
abhinav@abhinav-Studio-1555:~$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
VGA-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 disconnected (normal left inverted right x axis y axis)
LVDS connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
   1366x768       59.6*+
   1280x720       59.9  
   1152x768       59.8  
   1024x768       59.9  
   800x600        59.9  
   848x480        59.7  
   720x480        59.7  
   640x480        59.4  


Temp on Power-state 4 remains 18 deg Celsius hotter than Power-State 1 (which is what I get with the latest Catalyst)
Comment 1 Alex Deucher 2014-02-17 17:47:18 UTC
Created attachment 126461 [details]
possible fix

Does the attached patch help?  Can you attach the dmesg output with this patch applied?
Comment 2 Abhinav K 2014-02-18 11:14:35 UTC
Created attachment 126561 [details]
Dmesg output after applying fix

It worked. It's now remaining in single_disp power state unless I add an extra monitor. Just as should it work.

BTW Will I have to compile kernel with this fix every time or you will push it upstream?
Comment 3 Alex Deucher 2014-02-18 14:23:19 UTC
Great.  I'll push a fix upstream.  Thanks for testing.
Comment 4 Abhinav K 2014-02-18 20:15:17 UTC
Thanks a lot.

I am seeing these vblank_time values. But everything seems fine with no screen blanking or screen artifacts. Clocks and temperature is also under control.

[   22.542092] tg3 0000:08:00.0 eth0: Link is up at 100 Mbps, full duplex
[   22.542096] tg3 0000:08:00.0 eth0: Flow control is on for TX and on for RX
[   22.542117] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   24.364133] [drm] vblank_time: 294
[   25.180308] [drm] vblank_time: 294
[ 1337.236122] [drm] vblank_time: 4294967295
[ 1337.340217] [drm] vblank_time: 4294967295
[ 1937.476218] [drm] vblank_time: 294
[ 1938.936214] [drm] vblank_time: 4294967295
[ 2537.836213] [drm] vblank_time: 294
[ 2539.296439] [drm] vblank_time: 4294967295
[ 7282.380994] perf samples too long (2502 > 2500), lowering kernel.perf_event_max_sample_rate to 50000
[11578.016133] [drm] vblank_time: 294
abhinav@abhinav-Mintk:~ > sudo cat /sys/kernel/debug/dri/64/radeon_pm_info
uvd    vclk: 0 dclk: 0
power level 0    sclk: 22000 mclk: 30000 vddc: 900
abhinav@abhinav-Mintk:~ >