[plug] Frustration
Brad Campbell
brad at fnarfbargle.com
Fri Sep 7 12:45:17 WST 2012
Sometimes I wonder why I stick with Linux....
I have a 2011 iMac. It has a Radeon card in it. The machine has two
external display ports.
When I bought the machine, I bought a 27" cinema display with it and
also connected up my old 24" DVI monitor.
I spent 3 days hacking the kernel radeon driver to try and figure out
why it refused to drive the cinema display over the thunderbolt port.
Got that fixed to find out when you install Linux and have one or more
external monitors connected, the kernel radeon driver clocks the card up
to full throttle and attempts to cook the machine.
So spent another couple of hours with my head in the driver to figure
out a way to effectively clock it down. Developed a nasty hack which did
the job.
Fast forward 12 months. Upgraded to kernel 3.4.10 to find that my
machine would panic on logging into X. Spend 6 hours bisecting back to a
patch added in 3.4.8 which was fundamentally broken. Notified the
maintainer to get "oh yeah, I have a revert queued up for that". It's
only been broken for 2 stable releases.
Get that fixed to find noise artefacts on the screen now. Bisect that
back to another patch by the same maintainer. Asked him about it and got
"Running more than one head in the low power profile is unsupported". No
shit sherlock, that's why I've been carrying a nasty hack for 12 months.
Run in an unsupported mode or have the machine sound like a 747 trying
to keep the card from bursting into flames.
So, let's spend another 8 hours tracking through the Radeon driver to
try and figure out why the power management is broken. Have a quick
google... oh, lots of people with the same complaint "kernel radeon
driver makes my laptop overheat and shut down". Standard maintainer
answer is "you'll need to manually fiddle the clock values", but no
information on how that might be achieved.
Turns out the radeon BIOS has a set of power profiles programmed into it
by the maker. There is even a sane way to parse them in the radeon
driver, but rather than make it configurable or switchable it is
hardcoded to use a certain profile type.
In my case, the Radeon in my iMac is a mobile radeon. The radeon driver
says if its a mobile chip then select the battery profile. If you are
running multi-head mode then select the second battery profile. Oh!
What's that you say? You don't have a second battery profile? Right then
let's default to the profile we can find with the highest power
dissipation and use that for all our configurable power settings (high,
mid, low).
A quick hack to the driver to use the "battery" profile (which is the
lowest power dissipating setting), and then a kernel module parameter to
allow me to set the minimum GPU clock and Memory clock values, and I can
now tweak the GPU clock up a couple of MHZ and the display noise goes away.
So, now I see the kernel has a misc usb driver than allows control of an
external apple monitor. No worries, I've already patched acdcontrol to
control the backlight on my cinema display, so let's patch the in-kernel
driver so I can use /sys/class/backlight/* to control both monitors. Yay!
Spend a couple of fun hours hacking that up to find that
gnome-power-manmager and hal both shit the bed if there is more than one
backlight device. Each backlight has a different resolution. The built
in device has 4 bits of brightness, while the cinema display as 16. So
gnome power manager gets confused by this and ties itself in a knot.
I wonder if I can install xmonad in OSX ??
More information about the plug
mailing list