Radeon overheating (6900M)

Brad Campbell lists2009 at fnarfbargle.com
Thu Sep 8 08:39:15 PDT 2011

G'day All,

I've just picked up a 2011 27" iMac. This has a Radon 6900M series GPU.

01:00.0 VGA compatible controller: ATI Technologies Inc Device 6720

I'm running a 3.1-rc5 kernel and X from the Ubuntu "edgers" ppa. I'm 
running a 32 bit userspace on a 64bit kernel.

X.Org X Server 1.8.2
Release Date: 2010-07-01
X Protocol Version 11, Revision 0
Build Operating System: Linux 2.6.24-28-xen i686 Ubuntu
Current Operating System: Linux bkmac 3.1.0-rc5+ #9 SMP Thu Sep 8 
23:14:27 WST 2011 x86_64
Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.1.0-rc5+ 
root=UUID=7ac80060-64c1-467d-a242-cb39cda586b4 ro radeon.dynclks=1 quiet 
Build Date: 08 July 2010  01:50:14AM
(For technical support please see http://www.ubuntu.com/support)
Current version of pixman: 0.21.4
     Before reporting problems, check http://wiki.x.org
     to make sure that you have the latest version.

When I got the machine it was running _very_ hot, so I did some digging 
and found that by setting the gpu power_profile to "low", it ran 
significantly cooler.
I don't use 3D and don't need ultimate performance, so the slightly 
slower refresh and re-draw was fair exchange for the much lower fan noise.

Today when I plugged in my remaining 2 monitors I found that even when 
set to "low", the clock speed did not change and the machine was cooking 

I had a dig around in the kernel source, and knowing barely enough to be 
dangerous, I forced the power_profile "low" setting to be the same for 
single and multi-head :

diff --git a/drivers/gpu/drm/radeon/radeon_pm.c 
index 6fabe89..de85eda 100644
--- a/drivers/gpu/drm/radeon/radeon_pm.c
+++ b/drivers/gpu/drm/radeon/radeon_pm.c
@@ -102,7 +102,7 @@ static void radeon_pm_update_profile(struct 
radeon_device *rdev)
         case PM_PROFILE_LOW:
                 if (rdev->pm.active_crtc_count > 1)
-                       rdev->pm.profile_index = PM_PROFILE_LOW_MH_IDX;
+                       rdev->pm.profile_index = PM_PROFILE_LOW_SH_IDX;
                         rdev->pm.profile_index = PM_PROFILE_LOW_SH_IDX;

And lo, I was back to a much more acceptable level of noise, and no 
apparent evil side affects (well, if you run a copy of glxgears on each 
head simultaneously they do jump a bit).

Obviously running a 2560x1440 and 2 1920x1200 monitors consumes some 
extra horsepower, but according to my widget on the wall making this 
change dropped about 40W from the power consumption, and cut the GPU fan 
speed by about 60%.

I realize blindly bumbling around in GPU drivers is a pretty stupid 
thing to do, but is there any other way to achieve the same outcomes 
without patching the kernel?


More information about the xorg-driver-ati mailing list