radeon

From Gentoo Wiki
Jump to: navigation, search

External resources

radeon is a family of open source graphics drivers for AMD/ATI Radeon graphics cards.

Hardware detection

To choose the right driver, first detect the graphics card. You can use lspci for this task:

root # lspci | grep -i VGA

Feature support

Family Chipset name Product name OpenGL OpenGL ES VIDEO_CARDS
R100 R100, RV100, RV200, RS100, RS200 7xxx, 320-345 1.3 No radeon r100
R200 R200, RV250, RV280, RS300 8xxx-9250 1.4 No radeon r200
R300 R300, R350, RV350, RV380, RS400, RS480 9500-9800, X300-X600, X1050-X1150, 200M 2.1 2.0 radeon r300
R400 R420, R423, RV410, RS600, RS690, RS740 X700-X850, X12xx, 2100 2.1 2.0 radeon r300
R500 RV515, R520, RV530, RV560, RV570, R580 X1300-X2300, HD2300 2.1 2.0 radeon r300
R600 R600, RV610, RV630, RV620, RV635, RV670, RS780, RS880 HD2400-HD4290 3.3 (3.3)1 2.0 radeon r600
R700 RV770, RV730, RV710, RV740 HD4330-HD5165, HD5xxV 3.3 (3.3)1 2.0 radeon r600
Evergreen CEDAR, REDWOOD, JUNIPER, CYPRESS, PALM (Wrestler), SUMO, SUMO2 HD5430-HD5970, all HD6xxx not listed under Northern Islands, HD7350 3.3 (3.3)1 2.0 radeon r600
Northern Islands ARUBA, BARTS, TURKS, CAICOS, CAYMAN HD6450, HD6570, HD6670, HD6790-HD6990, HD64xxM, HD67xxM, HD69xxM, HD7450-HD7670 3.3 (3.3)1 2.0 radeon r600
Southern Islands CAPE VERDE, PITCAIRN, TAHITI, OLAND, HAINAN HD7750-HD7970, R9 270, R9 280, R7 240, R7 250 3.32 (3.3)1 2.0 radeon radeonsi
Sea Islands BONAIRE, KABINI, KAVERI, HAWAII HD7790, R7 260, R9 290 3.32 (3.3)1 2.0 radeon radeonsi
1) Needs testing packages: >=mesa-9.1
2) Work in Progress

See also the http://wiki.x.org/wiki/RadeonFeature/ site for the latest feature/hardware list.

Installation

Kernel

You need to set the following kernel options:

Kernel configuration

Processor type and features  --->
    [*] MTRR (Memory Type Range Register) support
Device Drivers  --->
    Graphics support  --->

        If your card sits in an AGP slot, choose your AGP driver, e.g.:
        <*/M> /dev/agpgart (AGP Support)  --->
            <*/M> AMD Opteron/Athlon64 on-CPU GART support

        <*/M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
            <*/M> ATI Radeon
            [*] Enable modesetting on radeon by default

        -*- Support for frame buffer devices  --->
            < >   ATI Radeon display support

    <*/M> Sound card support  --->
        <*/M>   Advanced Linux Sound Architecture  --->
            [*]   PCI sound devices --->
                  HD-Audio  --->
                      <*> HD Audio PCI
                      (2048) Pre-allocated buffer size for HD-audio driver
                      [*] Support initialization patch loading for HD-audio
                      <*> whatever audio codec your soundcard needs
                      <*> Build HDMI/DisplayPort HD-audio codec support

The options from the Sound card support menu need only to be set if the card supports HDMI or DisplayPort audio and you want to use it. Other options there might be needed as well, e.g. don't set the number of soundcards too low, because even with one Radeon card alsa may detect more than one HDA ATI HDMI device, e.g.

root # aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 0: ALC888 Analog [ALC888 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 1: ALC888 Digital [ALC888 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 11: HDMI 5 [HDMI 5]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Firmware

Microcode is required for R600 and newer GPUs. Install either x11-drivers/radeon-ucode or sys-kernel/linux-firmware (contains also other firmware), either:

root # emerge --ask radeon-ucode

or:

root # emerge --ask linux-firmware

Also, with packages like these, which introduce a number of non-free blobs into your system, if you are security aware, it pays to use the savedconfig use flag, and do some removing of the unnecessary lines, or better yet uncommenting them, from the respective savedconfig file. See "How to install the linux-firmware package in Gentoo" in External resources in bottom.

However, savedconfig editing is entirely optional, if you are in a hurry. System will work the same, with or without the savedconfig editing.

If you compiled radeon directly into the kernel instead of as a module, make sure firmware for your model (check available ones in /lib/firmware/radeon) is included in kernel:

Kernel configuration

Device Drivers  --->
    Generic Driver Options  --->
        -*- Userspace firmware loading support
        [*] Include in-kernel firmware blobs in kernel binary
            (radeon/<YOUR-MODEL>.bin)
            (/lib/firmware) Firmware blobs root directory
Note
radeon/<YOUR-MODEL>.bin should be replaced with the full list (space separated) appearing in front of your chipset's name in the table below (e.g. for Northern Islands/TURKS: (radeon/BTC_rlc.bin radeon/TURKS_mc.bin radeon/TURKS_me.bin radeon/TURKS_pfp.bin radeon/TURKS_smc.bin radeon/SUMO_uvd.bin)

Below is a list of the firmware files needed for each family/chipset of cards:

Family Chipset name Product name Firmware
R600 R600, RV610, RV630, RV620, RV635, RV670 HD2400-2900, HD3450-3870 radeon/R600_rlc.bin radeon/R600_uvd.bin2
RS780, RS880 HD3200, HD3300, HD4200 radeon/R600_rlc.bin radeon/RS780_uvd.bin2
R700 RV710 HD4300, HD4500 radeon/R700_rlc.bin radeon/RV710_smc.bin radeon/RV710_uvd.bin
RV730 HD4600, HD5100, HD500V radeon/R700_rlc.bin radeon/RV730_smc.bin radeon/RV710_uvd.bin
RV740 HD4770 radeon/R700_rlc.bin radeon/RV740_smc.bin radeon/RV710_uvd.bin
RV790, RV770 HD4730, HD4830-HD4890 radeon/R700_rlc.bin radeon/RV770_smc.bin radeon/RV770_uvd.bin2
Evergreen CEDAR HD5450, HD6350, HD7350, R5 220 radeon/CEDAR_me.bin radeon/CEDAR_pfp.bin radeon/CEDAR_rlc.bin radeon/CEDAR_smc.bin radeon/CYPRESS_uvd.bin
REDWOOD HD5550, HD5570, HD5670 radeon/REDWOOD_me.bin radeon/REDWOOD_pfp.bin radeon/REDWOOD_rlc.bin radeon/REDWOOD_smc.bin radeon/CYPRESS_uvd.bin
JUNIPER HD5750, HD5770 radeon/JUNIPER_me.bin radeon/JUNIPER_pfp.bin radeon/JUNIPER_rlc.bin radeon/JUNIPER_smc.bin radeon/CYPRESS_uvd.bin
CYPRESS HD5830, HD5850, HD5870, HD5970 radeon/CYPRESS_me.bin radeon/CYPRESS_pfp.bin radeon/CYPRESS_rlc.bin radeon/CYPRESS_smc.bin radeon/CYPRESS_uvd.bin
PALM (Wrestler) HD6250, HD6310, HD7310, HD7340 radeon/PALM_me.bin radeon/PALM_pfp.bin radeon/SUMO_rlc.bin radeon/SUMO_uvd.bin
SUMO HD6290, HD6320 radeon/SUMO_me.bin radeon/SUMO_pfp.bin radeon/SUMO_rlc.bin radeon/SUMO_uvd.bin
SUMO2 HD6370D, HD6410D radeon/SUMO2_me.bin radeon/SUMO2_pfp.bin radeon/SUMO_rlc.bin radeon/SUMO_uvd.bin
Northern Islands CAICOS HD6450, HD64xxM, R5 235, R5 235X radeon/BTC_rlc.bin radeon/CAICOS_mc.bin radeon/CAICOS_me.bin radeon/CAICOS_pfp.bin radeon/CAICOS_smc.bin radeon/SUMO_uvd.bin
TURKS HD6570, HD6670, HD7550M/7570M/7650M radeon/BTC_rlc.bin radeon/TURKS_mc.bin radeon/TURKS_me.bin radeon/TURKS_pfp.bin radeon/TURKS_smc.bin radeon/SUMO_uvd.bin
BARTS HD6790, HD6850, HD6870, HD67xxM radeon/BTC_rlc.bin radeon/BARTS_mc.bin radeon/BARTS_me.bin radeon/BARTS_pfp.bin radeon/BARTS_smc.bin radeon/SUMO_uvd.bin
CAYMAN HD6950, HD6970, HD6990, HD69xxM radeon/CAYMAN_mc.bin radeon/CAYMAN_me.bin radeon/CAYMAN_pfp.bin radeon/CAYMAN_rlc.bin radeon/CAYMAN_smc.bin radeon/SUMO_uvd.bin
ARUBA HD7400D/G, HD7500D/G, HD7600D/G, HD7660D, HD8310G, HD8410G-HD8670G radeon/ARUBA_me.bin radeon/ARUBA_pfp.bin radeon/ARUBA_rlc.bin radeon/TAHITI_uvd.bin
Southern Islands CAPE VERDE HD7750, HD7770, R7 250X radeon/VERDE_ce.bin radeon/VERDE_mc.bin radeon/VERDE_mc2.bin1 radeon/VERDE_me.bin radeon/VERDE_pfp.bin radeon/VERDE_rlc.bin radeon/VERDE_smc.bin radeon/TAHITI_uvd.bin
PITCAIRN HD7800, R9 270X radeon/PITCAIRN_ce.bin radeon/PITCAIRN_mc.bin radeon/PITCAIRN_mc2.bin1 radeon/PITCAIRN_me.bin radeon/PITCAIRN_pfp.bin radeon/PITCAIRN_rlc.bin radeon/PITCAIRN_smc.bin radeon/TAHITI_uvd.bin
TAHITI HD7870 XT, HD7900, R9 280X radeon/TAHITI_ce.bin radeon/TAHITI_mc.bin radeon/TAHITI_mc2.bin1 radeon/TAHITI_me.bin radeon/TAHITI_pfp.bin radeon/TAHITI_rlc.bin radeon/TAHITI_smc.bin radeon/TAHITI_uvd.bin
OLAND HD8550M-HD8790M, R7 240, R7 250 radeon/OLAND_ce.bin radeon/OLAND_mc.bin radeon/OLAND_mc2.bin1 radeon/OLAND_me.bin radeon/OLAND_pfp.bin radeon/OLAND_rlc.bin radeon/OLAND_smc.bin radeon/TAHITI_uvd.bin
HAINAN HD8970M radeon/HAINAN_ce.bin radeon/HAINAN_mc.bin radeon/HAINAN_mc2.bin1 radeon/HAINAN_me.bin radeon/HAINAN_pfp.bin radeon/HAINAN_rlc.bin radeon/HAINAN_smc.bin radeon/TAHITI_uvd.bin
Sea Islands BONAIRE HD7790, R7 260, R7 260X radeon/BONAIRE_ce.bin radeon/BONAIRE_mc.bin radeon/BONAIRE_mc2.bin1 radeon/BONAIRE_me.bin radeon/BONAIRE_mec.bin radeon/BONAIRE_pfp.bin radeon/BONAIRE_rlc.bin radeon/BONAIRE_sdma.bin radeon/BONAIRE_smc.bin radeon/BONAIRE_uvd.bin radeon/BONAIRE_vce.bin1
KABINI HD8180-HD8400 radeon/KABINI_ce.bin radeon/KABINI_me.bin radeon/KABINI_mec.bin radeon/KABINI_pfp.bin radeon/KABINI_rlc.bin radeon/KABINI_sdma.bin radeon/BONAIRE_uvd.bin radeon/BONAIRE_vce.bin1
KAVERI radeon/KAVERI_ce.bin radeon/KAVERI_me.bin radeon/KAVERI_mec.bin radeon/KAVERI_pfp.bin radeon/KAVERI_rlc.bin radeon/KAVERI_sdma.bin radeon/BONAIRE_uvd.bin radeon/BONAIRE_vce.bin1
HAWAII R9 290, R9 290X radeon/HAWAII_ce.bin radeon/HAWAII_mc.bin radeon/HAWAII_mc2.bin1 radeon/HAWAII_me.bin radeon/HAWAII_mec.bin radeon/HAWAII_pfp.bin radeon/HAWAII_rlc.bin radeon/HAWAII_sdma.bin radeon/HAWAII_smc.bin radeon/BONAIRE_uvd.bin radeon/BONAIRE_vce.bin1
MULLINS radeon/MULLINS_ce.bin radeon/MULLINS_me.bin radeon/MULLINS_mec.bin radeon/MULLINS_pfp.bin radeon/MULLINS_rlc.bin radeon/MULLINS_sdma.bin radeon/BONAIRE_uvd.bin radeon/BONAIRE_vce.bin1
1) Only for kernel 3.15 and newer
2) Only for kernel 3.17 and newer

Driver

Portage uses the variable VIDEO_CARDS for enabling support for various graphics cards in packages. Setting VIDEO_CARDS to e.g. radeon (see the feature matrix) will pull in the correct driver:

File/etc/portage/make.conf

VIDEO_CARDS="radeon"

Check the USE flags of x11-drivers/xf86-video-ati:

→ Information about USE flags
USE flag Default Recommended Description
glamor No No (For Northern Islands and older cards) Disable Glamor OpenGL 2D acceleration
glamor No Yes (For Southern Islands and newer cards) Enable Glamor OpenGL 2D acceleration
udev Yes Yes Enable sys-fs/udev integration (device discovery, power and storage device support, etc)

After setting this you want to update your system so the changes take effect:

root # emerge --ask --changed-use --deep @world

Configuration

Permissions

If you have the USE flag acl enabled globally and are using ConsoleKit (i.e you're using a Desktop profile) permissions to video cards will be handled automatically. You can check the permissions using getfacl:

user $ getfacl /dev/dri/card0 | grep larry
user:larry:rw-

A broader solution is to add the user you want to be able to access the video card to the video group:

root # gpasswd -a larry video

Note that you will still be able to run X without permission to the DRI subsystem, but usually not with acceleration enabled.

xorg.conf

The X server is designed to work out-of-the-box, with no need to manually edit X.Org's configuration files. It should detect and configure devices such as displays, keyboards, and mice.

However, the main configuration file of the X server is the xorg.conf.

You can force the X server to use desired driver with:

File/etc/X11/xorg.conf.d/radeon.confExplicit radeon driver section

 Section "Device"
   Identifier  "radeon"
   Driver      "radeon"
 EndSection

Advanced configuration

Power Management

Power management can be set in the sysfs filesystem as follows:

  • Check the current power method:
root # cat /sys/class/drm/card0/device/power_method
  • Change the power method:
The "dynpm" method dynamically changes the clocks based on demand. (not effective as of June 27, 2012)
root # echo "dynpm" > /sys/class/drm/card0/device/power_method
The "profile" method lets you set a profile on how the card should behave.
root # echo "profile" > /sys/class/drm/card0/device/power_method
  • Check the current profile:
root # cat /sys/class/drm/card0/device/power_profile
  • Change the profile:
Options for profile:
  1. "default" no change of clock speeds
  2. "auto" switches 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.
  3. "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 does not use "low" when displays are active.
  4. "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.
  5. "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.
root # echo "low" > /sys/class/drm/card0/device/power_profile
  • Check the current GPU, Memory clocks and voltage (needs to have kernel debugfs enabled):
root # cat /sys/kernel/debug/dri/0/radeon_pm_info
Note
With more than one monitor connected, the memory clock will always be on full speed.
Note
On APU chipsets, those settings have little to no effect and give inconclusive results.
Power Management with Linux Kernel 3.11, 3.12

Linux Kernel 3.11 introduces improved power management for some radeon cards, to activate it pass the parameter radeon.dpm=1 to the kernel.

Note
Performance APU GPUs can be rapidly increased by enabling this option, which allow them use profiles with maximum clocks.
  • Check the dynamic power management state
root # cat /sys/class/drm/card0/device/power_dpm_state
  • Change the dynamic power management state
root # echo "performance" > /sys/class/drm/card0/device/power_dpm_state
Other valid options include "battery" and "balanced"

In order to verify that the new dynamic power management code is active check radeon_pm_info (see above), it should say something like

uvd vclk: 0 dclk: 0
power level 0 sclk: 25000 mclk: 15000 vddc: 900 vddci: 950
Note
Using the new dynamic power management will disable the use of the power profiles mentioned above


Power Management with Linux Kernel >= 3.13

Linux Kernel 3.13 enabled dynamic power managment by default for a lot of video cards.

  • Check the current GPU, Memory clocks and voltage (needs to have kernel debugfs enabled):
root # cat /sys/kernel/debug/dri/0/radeon_pm_info
Note
With more than one monitor connected, the memory clock will NOT be on full speed as it was before.

Tuning

I couldn't find a summary of all options available so feel free to add to this.

Warning
There are several options to tweak the radeon driver and some of these might break your desktop, so if you are uncomfortable with the console better stick to default.
Parameter Application Effect Comment
radeon.pcie_gen2=1 kernel commandline Run at PCI-E 2.0 speeds per default Enabled by default since kernel 3.6
radeon.audio=1 kernel commandline Enable HDMI audio on some cards Enabled by default since kernel 3.13
radeon.dpm=1 kernel commandline Enable dynamic power management on some cards1 Enabled by default since kernel 3.13
R600_STREAMOUT=1 Environment variable Enable the use of OpenGL 3.0/4.2 on some cards Enabled by default since Mesa 8.0
R600_HYPERZ=1 Environment variable Enable the use Hyper-Z on some cards See Bugs: https://bugs.freedesktop.org/show_bug.cgi?id=75112
R600_TILING=1 Environment variable Enable 2D Tiling on some cards (also needs the xorg.conf parameter set) This option is probably activated by default, see man radeon
R600_SURF=1 Environment variable Enable 2D Tiling on some cards (also needs the xorg.conf parameter set)
R600_GLSL130=1 Environment variable Enable more features of the OpenGL 3.0 API Enabled by default since Mesa 8.0
ColorTiling2D True xorg.conf parameter Enable 2D Color Tiling in conjunction with R600_TILING=1 and R600_SURF=1 This option is probably activated by default, see man radeon
Tuning with mesa from git

Mesa from git (=mesa-9999) offers a different way to tune the 3D driver. Use the environment variable R600_DEBUG with the following options

Parameter Effect
help List all of the configuration options

See mesa commit for more information.

  • Kernel parameters can be just added to the kernel commandline in grub.cfg or grub.conf.
  • Environment variables could be put into a file like /etc/env.d/99radeon to have them initialized during boot.
  • xorg.conf parameter are usual in the Device section for the card.
  • A full list of kernel parameters can be found here: X.Org Wiki - RadeonFeature
  • S3TC compression needed for some applications like most 3D games: media-libs/libtxc_dxtn
1) supported by Linux kernel 3.11

Monitoring

lm sensors can be used to monitor the cards temperature. It uses the I2C interface, which needs to be enabled in the kernel:

Kernel configurationIncluding radeon firmware

Device Drivers --->
    Graphics support --->
        <*> Support for frame buffer devices --->
            <*> ATI Radeon display support 
                [*] DDC/I2C for ATI Radeon support
Note
R6xx and newer radeons have an internal thermal sensor that is exposed by the driver on most cards that utilize it. On pre-r6xx hardware, the thermal sensor was an external i2c chip, so you need to choose and load the appropriate i2c hwmon driver.

Audio over HDMI

Audio through the HDMI port is available for some cards. Check the X.Org Wiki - Radeon Feature Matrix for the model family. A recent 3.x kernel may be needed.

If you are using a kernel older than 3.13, HDMI audio must be explicitly enabled using the kernel commandline paramater radeon.audio=1. In addition, ALSA typically does not use HDMI as the default audio, so one way to force this as the default is to add a config file:

File~/.asoundrc

pcm.!default {
  type plug
  slave.pcm "hdmi"
}

which may be moved to /etc/asound.conf to make HDMI audio the system-wide default.

Another solution is to set the USE-flag pulseaudio, update the system and use pavucontrol to set the HDMI port as fallback (or use pavucontrol to change manually which application uses which audio port).

Multichannel LPCM

If you want to enjoy full 5.1 HDMI sound on your gentoo rig try out anssi's HDMI audio patch as mentioned in the phoronix forums.

root # cd /usr/src/linux
root # patch -p1 < atihdmi5.patch
root # make && sudo make modules_install && sudo make install

Check your bootloader config to use the correct kernel and reboot.

See also

  • fglrx - Closed source binary driver for AMD/ATI graphic cards.
  • fglrx Quick Switch - Quickly switch between fglrx and this driver using GRUB 2 without downgrading xorg-server.
  • hprofile - Another method for switching between graphics drivers.

Troubleshooting

Glamor Does Not Load

If you see errors like "glamor detected, failed to initialize EGL.", then try enabling USE="gbm egl gles2 llvm" in your mesa builds.

If you see errors like "Failed to link: error: fragment shader lacks `main'", then make sure the glamor package has been built with USE="-gles".

Poor X Performance

If graphic performance (such as playing videos) is terrible, then make sure KMS Color Tiling is enabled. You can see this in your Xorg log:

[  3407.235] (II) RADEON(0): KMS Color Tiling: enabled
[  3407.235] (II) RADEON(0): KMS Color Tiling 2D: enabled
[  3407.235] (II) RADEON(0): KMS Pageflipping: enabled

If you see "no" instead of "enabled", then you'll have to look earlier in the log to see why it's been disabled. If glamor failed to load, see the previous troubleshooting item.

Poor Gaming Performance

If you use a 64bit system and play 32bit games (mostly everything in wine and steam), then the main bottleneck are old libraries in the emul-linux packages. For radeonsi cards there is a huge difference in performance between mesa 10.0 (part of emul-linux-opengl, used for everything 32bit like wine and steam) and mesa 10.2 (used for everything 64bit like the desktop). The only solution is to update the 32bit binaries, either by waiting for an emul-linux-* update or by allowing the system to compile equivalent 32bit binaries to the currently installed 64bit versions, see https://wiki.gentoo.org/wiki/Multilib_System_without_emul-linux_Packages

Bug Trackers

External resources