The readeon FOSS 3D driver has made much progress supporting KMS (Kernel Mode Setting), and allowing default openSUSE 11.4, Tumbleweed & 12.1 to support effects ridden Window Managers & 3D FOSS games like Neverball & Extreme Tuxracer, as well as Desktop managers. This means there's for many no need to install proprietary drivers that complicate kernel upgrades, testing new releases and distro upgrades, with those undesirable commercial binary blobs from non-oss repos; openSUSE 3D acceleration finally "just works" out of the box.

There is however a weakness! That's the dynamic power management which currently runs hot. I find tendency to a whirring graphics fan, very annoying. A laptop may be prone to over-heating when a Radeon HD runs at full performance all the time to. Having seen a Lizard Post by Nelson Marques seemingly only relevant to GNOME3 testers, I found it nicely explained how to change the AMD/ATI Radeon power management to a slower & cooler setting.

Giving it a go on HD4650, I have found forcing low power leads to jumpy browser scrolling and marginally playable games, however mid is quite playable and keeps fan noise to a happy minimum, just like a certain proprietary Catalyst driver under a well known commercial OS.

Best of all, it's far simpler to do and doesn't require any downloads which taint your system. Sticking to FOSS software, I can't think of much that really stretches even last years budget 3D card, but if you do need to set heat to maximum you can.. easily, though diddling with settings requires super user privileges.

Given how cheap powerful graphics cards like ATI Radeon HD 5000 series are now, it's very likely you just don't need full performance very often.

Code:
# echo profile > /sys/class/drm/card0/device/power_method
# echo mid > /sys/class/drm/card0/device/power_profile
Sets mid power settings which you can check with.
Code:
# cat /sys/kernel/debug/dri/0/radeon_pm_info
default engine clock: 600000 kHz
current engine clock: 299530 kHz
default memory clock: 400000 kHz
current memory clock: 396000 kHz
voltage: 1000 mVPCIE lanes: 16
Guess what "low" does?
Code:
# echo low > /sys/class/drm/card0/device/power_profile
fir:~ # cat /sys/kernel/debug/dri/0/radeon_pm_info
default engine clock: 600000 kHz
current engine clock: 164950 kHz
default memory clock: 400000 kHz
current memory clock: 249750 kHz
voltage: 900 mV
PCIE lanes: 16
You can undo this according to openSUSE Lizards - GNOME3 iso by fcrozat and ATI radeon driver… a quick easy fix!
For all that matters, KMS is to be enabled, period, full stop. And from this point… we have two options regarding power management:

1. Dynamic Frequency switching (not really working for me);
2. Profile based frequency switching (does provide what I need);

For all that matters regarding ‘profile based frequency switching’ we have 5 profiles available:

“default” uses the default clocks and does not change the power state. This is the default behavior.
“auto” selects between “mid” and “high” power states based on the whether the system is on battery power or not. The “low” power state are selected when the monitors are in the dpms off state.
“low” forces the gpu to be in the low power state all the time. Note that “low” can cause display problems on some laptops; this is why auto only uses “low” when displays are off.
“mid” forces the gpu to be in the “mid” power state all the time. The “low” power state is selected when the monitors are in the dpms off state.
“high” forces the gpu to be in the “high” power state all the time. The “low” power state is selected when the monitors are in the dpms off state.
To make this change take effect on every boot, you can add the right echo's to /etc/init.d/{after,before}.local.
A script may be useful to, for easy change of modes, here's mine /root/bin/grspeed :

Code:
#!/bin/sh
# $Id$ : /root/bin/grspeed  - diddle with graphics power managment profile
prog=`basename $0`
# set -x

# Default to mid -hopefully a balanced profile for reasonable performance but quieter than system default
profile=mid

# Only support card0 for now
device=/sys/class/drm/card0/device/

usage () {
    echo "Usage:  $prog [OPTION]"
    echo "Sets the graphics card power management to a static profile, defaulting to $profile if no option set"
    echo "Option can be one from :"
    echo "    help, -h or --help  - show Usage information and exit"
    echo "    -c, c(heck) - show current power management info and exit"
    echo "    -d, d(efault) - reset to system default profile"
    echo "    -l, l(ow) - minimum fan noise, set to lowest power profile (also used by DPMS), minimising heat and performance"
    echo "    -m, m(id) - hopefully reduced fan noise, set to balanced heat and performance profile"
    echo "    -x, h(igh) - maximum fan noise, set to maximum heat and performance profile"
}

test "$1" && {
    case $1 in
    -h|--h*|help)
        usage; exit 0 ;;
    -c|c*)
        exec cat /sys/kernel/debug/dri/0/*_pm_info ;;
    -d|d*)
        profile=default ;;
    -x|h*)
        profile=high ;;
    -m|m*)
        profile=mid ;;
    -l|l*)
        profile=low ;;
    *)
        usage; exit 1 ;;
    esac
}

echo profile > $device/power_method
exec echo $profile > $device/power_profile
Now to enable this on future boots, is just a matter of adding it to /etc/init.d :

after.local : [ -x /root/bin/grspeed ] && /root/bin/grspeed
before.local : [ -x /root/bin/grspeed ] && /root/bin/grspeed low

Code:
case $RUNLEVEL in
3|4|5)  
    true ;;
*)      
    case $PREVLEVEL in
    3|4|5) (
#       system going to lower service level, flush writes to disk
        sync
        [ -x /root/bin/grspeed ] && /root/bin/grspeed low
        cd /srv/iso
        for d in *
        do
            umount "$d"
        done) ;;
    esac ;;
esac