# radeonhd - A Driver for AMD GPG r5xx/r6xx/r7xx Chipsets The _radeonhd_ driver, or _xf86-video-radeonhd_, is an X.org video driver for codenamed R500-R700 graphics devices. It was developed by the X11 community, mostly centered around Novell and AMD, with the free documentation provided by AMD. The driver supports full modesetting (read: any mode is usable, not only those provided by the BIOS), and is compatible to [[RandR 1.3|Projects/XRandR]]. 2D and Xv (video) acceleration is provided for all supported GPUs; 3D acceleration via Mesa is supported for r5xx/rs690 GPUs (X1xxx) and is in progress for r6xx/r7xx GPUs (HD2xxx-HD4xxx). **Status 09/2010**: Linux distributions, including Novell's openSUSE, have now abandoned radeonhd as the default driver, instead using the [[radeon|radeon]] driver. radeon has more features, including Kernel Mode-Setting support and more 3D support, and it supports all Radeon generation from original R100 Radeons to R800 Radeons (HD 5000 series). Radeonhd can be continued to be updated as long as there are people find it useful. [[!toc 1]] Subpages: * [[radeonhd packages for your distribution|radeonhd:packages]] * [[how to install from latest git|radeonhd:INSTALL]] * [[how to setup 2D acceleration for r6xx/r7xx|radeonhd:r6xx_r7xx_branch]] * [[how to setup DRI|radeonhd:DRI]] * [[how to setup 3D for r6xx/r7xx|radeonhd:experimental_3D]] (**experimental**) * [[r600_demo: experimental 3D engine bringup tool|radeonhd:r600_demo]] * [[r[67]xx Errata Sheet and explanations of difficult GPU subsystems|radeonhd:r6xxErrata]] * [[list of things to do|radeonhd:TODO]] * [[feature list|radeonhd:feature]] # Recent Changes **Version 1.3.0** * Added support for RV740, M92, M93, M97. * Added support for HDMI audio on RS690 and R700. * Added support for power management. * Implemented almost correct analysis of [[PowerPlay|PowerPlay]] AtomBIOS tables. * 2D acceleration (EXA) is enabled by default now, except on RV740. * Backlight handling finally fixed - compatible with xbacklight 1.1.1. * Overhaul of memory controller setup. Fixes many "MC not idle" issues. * Overhaul of cursor handling. Fixes most cursor bugs. * Selectable color space for XVideo on R6xx/R7xx. * Tons of bug fixes (DDC, EXA, LUT, RandR, AtomBIOS). * More quirk table entries. * Shave support (cleaner compilation output). * All warnings fixed. * Some start of Developer's documentation in README.coding. **Version 1.2.5** * Added 2D acceleration for R6xx and R7xx (disabled by default). * Added XVideo support for R6xx and R7xx (disabled by default). * Added support for RS880 and RV790. * Added RandR 1.3 mandatory properties. * Refactoring of MC code. * Enable DRI support by default on R5xx and RS6xx. * LUT (color lookup table) fixes. * Tons of quirk table entries and bug fixes. * Fix register accesses for processors that reorder memory writes. **Version 1.2.4** * Added HDMI support. * Added support for RV710, RV730 (DCE 3.2). * Added screen rotation support. * Added RandR 1.3 panning support. * Many acceleration and build fixes. **Version 1.2.3** * Added Command Submission infrastructure. **Version 1.2.2** * Added [[DRI|radeonhd:DRI]] support (R5xx and RS6xx). * Added support for RV770, RS780, M82, M86, and M88. * Added XVideo support. * Added CP based 2D acceleration (R5xx and RS6xx). * Added EXA render acceleration (R5xx and RS6xx). * Added support for AtomBIOS based mode setting. * Added support for scaled modes. * Added RandR support for backlight control. * Lots of modesetting related bug fixes. **Version 1.2.1** * Build-fixes for systems without -DNDEBUG, and for rhd_dump * Added two new RV670 devices. **Version 1.2.0** * Added support for RV620, RV635, and R680. * Added 2D acceleration for R5xx (including RS6xx), both XAA and EXA. * Added support for DDIA block (second digital output) on RS690. * Added support for interlaced modes * Added additional layers for splitting outputs into encoders and transmitters as needed for new hardware. * Added support for [[DragonFly|DragonFly]] BSD. * Improved RandR corner cases. * Improved handling of secondary cards. * Implemented foundation work for future TV support. * Huge number of bugfixes and minor updates. # Supported Hardware The _radeonhd_ driver supports video cards based on * R500 style hardware: R5xx, RV5xx, RS6xx, RS740, M52 and up * R600 style hardware: R6xx, RV6xx, RS780, M64 and up * R700 style hardware: RV7xx Note that this simple classification of the chipsets isn't exactly correct, because often the individual components are of different generations, especially on mobility chipsets. See [[supported chipsets in radeonhd git HEAD|http://gitweb.freedesktop.org/?p=xorg/driver/xf86-video-radeonhd;a=blob_plain;f=README]] for up to date detail information. # Development Development of the driver is driven by the community, with several of the developers funded by Novell and AMD. If you want to contribute to this project, [[join the mailing list|mailto:radeonhd+subscribe@opensuse.org]], and have a look at the [[list of things to do|radeonhd:TODO]] and the [[open bugzilla entries|https://bugs.freedesktop.org/buglist.cgi?query_format=advanced&product=xorg&component=Driver%2Fradeonhd&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED]]. You do not necessarily have to be a coder to help, there is documentation to be done, users to be helped, you name it. That said, the radeonhd driver project is - as almost all open software development projects - understaffed and likes to welcome any contributions. # More Information The mailing list for the _radeonhd_ driver is [[radeonhd@opensuse.org|mailto:radeonhd@opensuse.org]] , you can subscribe to this mailing list by sending a mail to [[radeonhd+subscribe@opensuse.org|mailto:radeonhd+subscribe@opensuse.org]]. More information on this mailing list at [[http://lists.opensuse.org/radeonhd/|http://lists.opensuse.org/radeonhd/]]. Overview of recent updates to _radeonhd_: [[http://gitweb.freedesktop.org/?p=xorg/driver/xf86-video-radeonhd|http://gitweb.freedesktop.org/?p=xorg/driver/xf86-video-radeonhd]]. There is also an IRC channel #radeonhd on freenode.net. IRC logs at [[phoronix' radeonhd.org|http://radeonhd.org/]]. The [[radeonhd:packages|radeonhd:packages]] page lists your source for dep, rpm, etc. packages. ATI is providing [[free documentation|http://ati.amd.com/developer/open_gpu_documentation.html]] for the chips. Beware, this is _extremely_ technical. The documentation is [[mirrored on X.org|http://www.x.org/docs/AMD/]]. For r[67]xx development information see also the [[r600_demo|radeonhd:r600_demo]] subpage. For an alternative X.org driver see _[[radeon|radeon]]_. In addition r500-r700, it also supports older Radeons and is developed by partially different people. It is currently the default X.org driver. Both _radeon_ and _radeonhd_ have an overlapping feature set, and both should support all r500-r700 cards. If either does not work for you, try the other one. Co-operation is happening in both directions. More information about various available drivers for r500-r700 on the [[radeon|radeon]] page, section ”[[What about other drivers?|radeon]]”. # Getting and updating the radeonhd source code Released radeonhd tarballs can be downloaded from **[[ftp://ftp.freedesktop.org/pub/individual/driver/|ftp://ftp.freedesktop.org/pub/individual/driver/]]** The name of the tarball will be xf86-video-radeonhd-.tar.bz2 The developer version of radeonhd is maintained in the git repository found at **git://anongit.freedesktop.org/git/xorg/driver/xf86-video-radeonhd** You can find information on using git at the git website [[http://git.or.cz/|http://git.or.cz/]] and a short intro at [[http://www.freedesktop.org/wiki/Infrastructure/git/Developers|http://www.freedesktop.org/wiki/Infrastructure/git/Developers]] You can get a copy of the repository like this: [[!format txt """ $ git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-radeonhd """]] This will create a directory _xf86-video-radeonhd_ in the current directory by default, or the given directory _my-radeonhd_ otherwise. If you have not made any local changes and want to update you source code with the newest stuff from the official _radeonhd_ repository, you can run this: [[!format txt """ $ git pull """]] If you HAVE made local changes and committed them locally to your master branch (with `git commit -a`), you will be better off running [[!format txt """ $ git fetch $ git rebase origin """]] If you're using more branches, read the git docs. # Installation Note: The following assumes that you checked out the latest git version of radeonhd. If you're using a released version in form of a tarball, exchange _autogen.sh_ with _configure_. Also make sure you have the necessary development files for X11 driver compilation (e.g. xorg-x11-server-sdk in openSUSE). With X.Org 7.0 and later: [[!format txt """ $ ./autogen.sh $ make """]] Then as root: [[!format txt """ # make install """]] This will litter all kinds of compiled files throughout your source tree. ** Please note: ** `make install` will usually install to `/usr/local`. On Linux X is usually installed in `/usr`. To change this, you need to add the argument `--prefix /usr` to `autogen.sh`, i.e.: `./autogen.sh --prefix /usr`. Depending on which system you use you might have to specify a libdir if you are on a 64bit system. Check if the directory `/usr/lib64` exists on your system. If it does, please use `./autogen.sh --prefix /usr --libdir /usr/lib64`. With X.Org prior to 7.0: [[!format txt """ $ xmkmf -a $ make EXTRA_INCLUDES="-I/usr/include/xorg -I/usr/include/drm" all """]] and as root: [[!format txt """ $ make install """]] This uses imake and is for compatibility with older systems. To avoid building in your source tree, do: [[!format txt """ $ mkdir _b && cd _b $ ../autogen.sh $ make $ make install """]] Runs the build in _b/ - and if something is completely messed up, you can safely remove the _b/ directory and create a new one without affecting any source files. Hint: If you happen to have multiple branches in your git source tree, you * can have per-branch __b-BRANCH/_ build trees and __i-BRANCH/_ install trees. ("... configure ... --prefix=$PWD/_i-BRANCH") Note that none of these methods will install the rhd_conntest tool. The "xmkmf" method always requires a separate "make" run in utils/conntest. The other two will build rhd_conntest by default if its requirements are met. Please note you need [[updated drm kernel modules|radeonhd:r6xx_r7xx_branch]] and proper configuration (xorg.conf) for 2D and Xv on R6xx/R7xx. # Known Bugs & Limitations The following subsystems have not been implemented yet or show some limitations: * 3D acceleration is active by default only on R5xx and RS6xx right now. [[Experimental support for R6xx and R7xx|radeonhd:experimental_3D]] is available, but not for the faint of heart. Also, there is an experimental [[3D bringup tool|radeonhd:r600_demo]] for testing on 6xx/7xx. * 2D acceleration is active by default now, except on RV740. * No TV and Component connector support so far. * Suspend & Resume isn't completely tested, but works on a variety of hardware. Your mileage may vary. Note that typically you need some BIOS workarounds on the kernel command line, ask your distribution for that. * Powermanagement has to be enabled explicitely. Depending on your hardware, the fan might run at full speed. This turned out to be really tricky. See also [[RadeonFeature|RadeonFeature]] and [[RadeonProgram|RadeonProgram]] for a features and supported 3D program lists. The following known bugs have not been resolved yet (ordered by severity): * Digital output on PCIEPHY (RS780) doesn't light up unless connected at boot time. Affects mostly displays connected to laptops thru DVI/HDMI. It is a problem with the AtomBIOS byte code parser which is used at the moment. The only work around is to boot with this output connected at boot time. * [[Bug 14500|https://bugs.freedesktop.org/show_bug.cgi?id=14500]]: External monitor does not display native resolution * Some cards seem to provide broken connector tables. We're constantly fixing those. Please report if you have one. # Reporting Errors Report bugs at: [[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/radeonhd|https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/radeonhd]]. When reporting an error with [[bugzilla|https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/radeonhd]], please be sure to attach your `xorg.conf` and `Xorg.0.log`. Please use `-logverbose 7` for the Xserver in this case. If the error is related to RandR, please verify the xrandr version you are using, and attach the output of `xrandr -q; xrandr -q --verbose`. If you want to report a crash try to get a decent stack backtrace (`bt full`) in gdb. You have to compile with debugging information (`-O0 -g3`) or install -debuginfo packages for that. If a -debuginfo package for the Xserver is available for your distribution, please install it as well. It does not have any negative side effects apart from using space on your harddisk. If you don't get any output on your monitors at all, please add `Option "NoRandR"` to the "Device" section in your `xorg.conf`, and verify whether this issue is related to RandR or to general modesetting. The following messages are absolutely normal in your Xorg.0.log (as we don't have 3D acceleration yet): [[!format txt """ (EE) AIGLX error: dlopen of /usr/lib/dri/r600_dri.so failed (EE) AIGLX: reverting to software rendering """]] # git Bisecting If you stumble over a regression and the source of the issue cannot be determined easily, you may have to git-bisect the issue. This helps us identifying the commit that introduced the issue. As you have to compile the driver yourself in this process, make sure you have the necessary development files (e.g. xorg-x11-server-sdk in openSUSE). See [[Installation|radeonhd]] for more tips about compiling the driver. First get a copy of the repository if you don't have that already: [[!format txt """ $ git clone git://anongit.freedesktop.org/git/xorg/driver/xf86-video-radeonhd """]] Otherwise make sure that the copy you have is recent (if you can already reproduce the regression with your current state, you should _NOT_ do that): [[!format txt """ $ git pull """]] Identify the last known good version (e.g. the last released version), and the first known broken version. The `gitk` command can help you by visualizing the history. You need to know the SHA1-ids (alternatively, known names as 1.2.4 or master). Start a new git-bisect session: [[!format txt """ $ git bisect start [bad] [good] """]] E.g. if you just noted that with the current git master changing the backlight level is no longer working, while it was working with 1.2.5, do "`git bisect master 1.2.5`". If you remember that you tested git commit bc42c63 and it still worked, you can save some time by "`git bisect master bc42c63`". You will have to do the following in a loop until git tells you that you are done: * git presentes you a commit to try out. So configure and make: [[!format txt """ $ ./autogen.sh && make && sudo make install """]] * If this worked out, test the driver. This depends on what exactly you are trying to verify. E.g. for the theoretical backlight issue restart the Xserver (so the new driver is loaded) and test, whether you can change the backlight level. Caveat: Depending on what you need to test this can be arbitrarily complex. E.g. when debugging memory controller setup you just _have_ to to reboot before testing. Every time. * If the checked out version runs fine, do: [[!format txt """ $ git bisect good """]] * If the checked out version is broken, do: [[!format txt """ $ git bisect bad """]] * You will get a new commit to try out. At the end git will present you a single commit that first exhibits the broken behavior. This git commit number is _the_ important information for the regression you analyzed. # Troubleshooting, Q & A See also examples below for a complete setup. ## I get strange build errors about "no rule to make target ..." You've probably pulled in some new source files when you updated your sources from git. In this case you should do: [[!format txt """ $ make distclean $ ./autogen.sh $ make """]] Sometimes in such cases the build doesn't break in such cases but the driver crashes apparently for new reason. Before reporting an error, please try if those steps above make things work already. ## autogen.sh / configure doesn't work If during running autogen.sh / configure you get [[!format txt """ autoreconf: running: /usr/bin/autoconf configure.ac:35: error: possibly undefined macro: XORG_DRIVER_CHECK_EXT If this token and others are legitimate, please use m4_pattern_allow. See the Autoconf documentation. autoreconf: /usr/bin/autoconf failed with exit status: 1 """]] your system lacks one or more of these files: [[!format txt """ /usr/share/aclocal/xorg-macros.m4 /usr/share/aclocal/xorg-server.m4 /usr/share/aclocal/xorgversion.m4 """]] Make sure you have all required X.org development packages installed. These may be called _xorg-dev_, _xorg-x11-server-sdk_ and _xorg-x11-util-macros_, or something similar. ## 3D applications aren't working Please read how to [[setup DRI support|radeonhd:DRI]]. ## I only get a very jittery display You probably used the `fglrx` driver before. It doesn't restore the linebuffer completely on exit. You have to reboot your system to get this fixed. In some rare cases you might even have to power it off and restart it. Suspend to disk & resume is reported to work on many systems as well. ## My monitor isn't detected On R5xx hardware the description of the hot plug detection (HPD) pins in the AtomBIOS connector table is often broken. Please try using [[!format txt """ Option "HPD" "swap" """]] in the "Device" section. If this helps, please test all outputs (as far as possible with your equipment), and report your findings to the mailing list. Reports should include your Xorg.0.log (the working version) and your results regarding testing. If this doesn't help, please try: [[!format txt """ Option "HPD" "off" """]] This disables HPD detection completely. In some cases the HPD pin of the GPU doesn't seem to be connected to the DVI connector although it is advertised in the BIOS. **NOTE**: Option "HPD" should always only be a workaround until the quirks table in the driver has been updated. ALWAYS report if it is needed to get your monitor running. If you are using a KVM switch for your analog monitor and this monitor isn't detected correctly please try without the KVM switch. Analog displays are detected thru 'load detection' ie detection of the terminating resistors on the monitor side. The VGA standard requires 75 Ohm resistors on the RGB lines. Some KVM switches seem to not meet these requirements. ## My monitor section isn't used any longer Right. This is standard with RandR. Now the monitor sections have to specified with [[!format txt """ Option "monitor-" "" """]] in the "Device" section. You can get all output names of your card with `xrandr -q`. See also example below. Behavior of monitor sections is different to standard modesetting in radeonhd. With standard modesetting a monitor section replaces the EDID detected monitor (thus typically reducing the maximum mode size to 1024x768), in RandR it doesn't. It's not exactly clear in which cases which parameters are overridden by the monitor section and how to override EDID detected parameters and modes in the RandR case. ## The driver doesn't start on my laptop. I have 4GB of main memory, BTW Some machines with M72, M83, and possibly other IGP chipsets (especially laptops) with more than 2GB of memory exhibit this BIOS issue. Apparently, the MTRR table is not setup correctly. One possibility is to reduce the amount of RAM, the more reasonable (but only little tested so far) alternative is to enable the MTRR sanitizer in the kernel. [[!format txt """ grep "CONFIG_MTRR" /boot/config* """]] to check whether CONFIG_MTRR is active for your kernel. If it is, boot with [[!format txt """ enable_mtrr_cleanup mtrr_spare_reg_nr=0 """]] , otherwise you have to recompile your kernel with this option enabled. ## The cursor shows weird corruptions at some points of the screen This is [[Bug 13405|https://bugs.freedesktop.org/show_bug.cgi?id=13405]]: Hardware cursor corruption. Presumably fixed with git commit [[4be5f7152f71|http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=4be5f7152f71c292f16b6e30c59c07b282ea4772]] (not in any release yet). ## How do I enable / disable an output after a monitor has been plugged in / removed? [[!format txt """ xrandr --auto """]] ## How do I set up multiple monitors? [[!format txt """ xrandr --output --right-of """]] If this fails, the most common reason is the following: The X.org framebuffer cannot be resized after initialization (yet). You have to either configure this statically (see below), or specify the maximum needed size with [[!format txt """ Virtual """]] in the "Display" subsection of the "Screen" section. If xrandr is not able to unclone displays (monitors show the same screen still), and you have set virtual correctly, it can also be that you need a newer xrandr (1.2.3 or git), and potentially also a newer xserver. You can try to explicitly set the used Crtc with `--crtc 1` or 0. `xrandr -q` prints the maximum frame buffer size in the first line of its output. ## How do I configure a multimonitor setup statically? Add (mostly empty) monitor sections for your monitors like described in the answer above. Then add [[!format txt """ Option "RightOf" "" """]] to the monitor section representing your right monitor. Alternatively, you can use `LeftOf` - working correctly only with the latest Xserver (bugfix). Of course there's also `Above` and `Below`. You can also use `` instead of ``. Also read `man 5 xorg.conf`. ## My monitors have different resolutions. But both show the same lower resolution on startup This seems to be a general RandR issue. Can be changed with `--output --auto` during runtime, or with `Option "PreferredMode" ""` with newer Xservers (known to be buggy up to Xserver 1.4.0). ## My Gnome/KDE/whatever panel shows up on the wrong monitor Add your preferred monitor to [[!format txt """ Option "RROutputOrder" "" """]] in the "Device" section. This reorders the RandR outputs, which is reflected in the Xinerama screen order. You can specify any number of outputs, separated by spaces or comas. Note that this is a radeonhd specific option, it won't work with other drivers. ## Panels and maximized windows span all my monitors Make sure you have enabled xinerama support for your window manager. For instance, on Gentoo enable the xinerama USE-flag and rebuild the affected packages by issuing the following command [[!format txt """ emerge -aND world """]] ## xrandr returns with BadMatch (invalid parameter attributes) Get a newer xrandr (1.2.3 or git), and potentially also a newer xserver. If it still happens, send a mail to [[radeonhd@opensuse.org|mailto:radeonhd@opensuse.org]] or file a bug at freedesktop.org. You can get the newest xrandr from git by [[!format txt """ git-clone git://anongit.freedesktop.org/git/xorg/app/xrandr """]] ## How do I set -logverbose 7 when I run a display manager (xdm/kdm/gdm)? There is a display manager configuration file which lists the command line to use when starting the Xserver. It usually `/etc/X11/xdm/Xservers`. In this file you will find a line like: [[!format txt """ :0 local /usr/bin/X -nolisten tcp -br vt7 """]] Please add `-logverbose 7` at the end of this line. ## Why is radeonhd so much slower than avivo? There may be an old, obsolete line in your `xorg.conf` file from some _fglrx_ setup a long time ago: [[!format txt """ Option "mtrr" "no" # ancient, obsolete option: REMOVE IT! """]] If you have such a line, removing it can speed up radeonhd considerably. General note: As a rule, one does not need any `xorg.conf` file with Xserver 1.4 and up, so it is always a good idea to make sure you _really_ need all the statements in there. ## How do I get a multi card setup to work? Make sure you have a config file with one Device section for each card. Each device section should be referenced from it's own Screen section which itself should be referenced in the Layout section. Depending on which version of the Xserver and OS you are using you may need to take additional steps. On Linux you may need to do: * On Linux you need to boot with the boot option pci=rom. * after booting do: * [[!format txt """ # echo 1 > /sys/bus/pci/devices//rom """]] * Some users have reported they also need to do: * [[!format txt """ # setpci -s ROM_ADDRESS=xxxx0001 # setpci -s COMMAND=2 """]]replace with the PCI bus ID and xxxx with the hex digits you can obtain thru ` lspci -nv `. # Examples Example xorg.conf (minimal for Xserver 1.3 and up), e.g. no input devices or modes configured, monitors configured by EDID data): [[!format txt """ Section "Monitor" Identifier "External" Option "RightOf" "Panel" EndSection Section "Monitor" Identifier "Panel" EndSection Section "Device" Identifier "MyCard" Driver "radeonhd" Option "monitor-VGA_1" "External" Option "monitor-PANEL" "Panel" Option "RROutputOrder" "PANEL" EndSection Section "Screen" Identifier "MyScreen" Device "MyCard" DefaultDepth 24 SubSection "Display" Depth 24 ## This is superfluous and actually harmful with a ## static configuration. Enable for dynamic config only. #Virtual 2704 1050 EndSubSection EndSection """]] Example call to configure multiple screens dynamically (set Virtual in `xorg.conf` for that to work): [[!format txt """ xrandr --output VGA_1 --right-of PANEL """]] # Glossary This is a list of abbreviations and words which you will stumble upon when you are digging deeper. * [[!table header="no" class="mointable" data=""" CP | command processor CS | command submission [[DRI|http://en.wikipedia.org/wiki/Direct_Rendering_Infrastructure]] | Direct Rendering Infrastructure [[DRM|http://en.wikipedia.org/wiki/Direct_Rendering_Manager]] | Direct Rendering Manager [[EXA|http://en.wikipedia.org/wiki/EXA]] | [[GEM|http://en.wikipedia.org/wiki/Graphics_Execution_Manager]] | graphics execution manager KMS | kernel based mode setting MC | memory controller [[XAA|http://en.wikipedia.org/wiki/XAA]] | XFree86 Acceleration Architecture """]]