The Current State Of Older AMD Graphics Hardware On Linux: What Driver To Use And What To Expect

From LinuxReviews
Jump to navigationJump to search
Amdlogo.png

There is more than one graphics driver for AMD graphics card included in the Linux kernel. Those of you who use older AMD graphics hardware have two kernel drivers to choose from. The default driver is called radeon and tends to support everything except Vulkan. It is possible to enable Vulkan support on older AMD graphics cards by using the newer amdgpu instead of radeon. Doing so could be safe but it could also break your machine's ability to return from hibernation.

written by 林慧 (Wai Lin). published 2020-07-17last edited 2020-08-06

AMD HD7850 GPU.20200108.jpg
The AMD Radeon HD 7850 technology was a mid-range time when it was released more than a decade ago. It does support Vulkan if you use the right kernel driver but you won't be able to do hardware video decoding; you can have one or the other. You can't suspend to disk regardless of what kernel driver you go for.

Many people can simply not afford to buy the latest and greatest computer technology. There are also many people who can and that is why electronic waste is a huge problem. Both factors make a good argument for squeezing as much possible out of existing hardware you already own.

Supporting older already sold hardware is not at all profitable for big hardware companies like AMD and Intel. Older drivers, even those that are free software, are rarely updated beyond a few years after the device's release date. This is specially true when it comes to the AMD graphics drivers.

The Old And The New Driver

The older "ATI Radeon" (DRM_RADEON) Linux kernel driver was actively maintained for years and years until a fancy new kernel driver called "AMD GPU" (DRM_AMDGPU) was introduced around the time the Polaris series (RX4xx) cards were released. The amdgpu driver is the default driver for Polaris series cards and newer. radeon remains the default kernel driver for older cards but is is not the only choice: Both drivers can be used with Polaris series cards and as well as earlier graphics chips based on the GCN architecture.

The amdgpu driver can be enabled on the "Southern Islands" family of cards and APUs (HD7750-HD7970, R9 270, R7 240, R7 250, R9-280, R9 370X and some more) by adding the kernel parameters radeon.si_support=0 amdgpu.si_support=1. The parameters for "Sea Islands" family cards and APUs (HD7790, HD8180-HD8400, R7 260, R9 290) are nearly identical: radeon.cik_support=0 amdgpu.cik_support=1

See AMD graphics for a more detailed list of graphics chips. "Southern Islands" and "Sea Islands" are the only graphics chip families you can optionally enable using a _support= kernel parameter, support for other graphics chip families are not provided in drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c.

No-No Having Your Cake And Eating It Too

There are some trade-offs between the radeon and the amdgpu driver.

  • Vulkan will only work if the amdgpu driver is used.
  • Suspend-to-disk will more likely only work correctly with the radeon driver. There is a one in three chance that it will work with the amdgpu driver. You may lose the ability to suspend-to-disk if you opt to use the amdgpu driver and you may find that it works as expected.
  • HDMI audio used to be a problem both when amdgpu was used on older hardware and when radeon was used on newer hardware. HDMI audio works just fine when the amdgpu driver in recent kernels is used with older AMD graphics hardware.
  • Hardware accelerated video encoding and decoding used to only work with radeon on older hardware. This may or may not still be the case depending on what AMD graphics card you have. Older "Southern Islands" appear to only do hardware video decoding when the radeon driver is used; "Sea Island" cards appear capable hardware video decoding regardless of which driver is used.

Practical Results On Old Hardware

We are in procession of a variety of old AMD technology which puts us in a position when were we are able to waste huge amounts of time testing combinations of kernel drivers and hardware configurations.

The following tests were done using Linux kernel 5.7.9 and Mesa 20.1.3.

AMD Athlon II x3 with Radeon 7850 2GB GPU

Athlonii x3 radeon hd 7850 gpu.jpg
The Gigabyte "Ultra Durable" branding has since been replaced with "RGB".

AMD Athlon II x3 with Radeon 7850 2GB GPU
radeon is used by default, force amdgpu with
radeon.si_support=0 amdgpu.si_support=1
OpenGL Vulkan Hardware Video

Encoding/Decoding

Suspend To RAM Suspend To Disk HDMI audio
amdgpu Dialog-ok.svg Dialog-ok.svg Dialog-cancel.svg Dialog-ok.svg Dialog-cancel.svgEdit-bomb.svg Dialog-ok.svg
radeon Dialog-ok.svg Dialog-cancel.svg Dialog-ok.svgEdit-bomb.svg Dialog-ok.svg Dialog-ok.svgEdit-bomb.svg Dialog-ok.svg

The rusty old AMD Athlon II x3 with Radeon 7850 2GB GPU technology from around 2010 has graphics driver related issues regardless of which of the two drivers are (ab)used. Notably, MPEG-AVC (x264) hardware video decoding will only work with the older radeon driver. Suspend to RAM worked fine with both. Suspend to disk did not, a very bad kernel panic ensued after resuming from disk every time when the amdgpu kernel driver was in use. Suspending to disk was troublesome with the radeon driver as well: MPEG-AVC (x264) hardware video decoding stops working when the machine resumes from suspend. The kernel ring buffer story about this unfortunate problem is:

[  808.082857] [drm:radeon_uvd_send_upll_ctlreq] *ERROR* Timeout setting UVD clocks!
[  808.082859] [drm:uvd_v1_0_ib_test] *ERROR* radeon: failed to raise UVD clocks (-110).
[  808.082887] [drm:radeon_ib_ring_tests] *ERROR* radeon: failed testing IB on ring 5 (-110).

It is very unfortunate that this AMD technology still does not work as it should with either kernel driver after 10 years..

AMD E1-6010 APU with AMD Radeon R2 Graphics

The AMD E1-6010 APU is a laptop APU from 2015. It was a very weak and slow 1.4 GHz dual-core CPU with a weak APU when it was released. It is less powerful than a modern Android tablet. It is still quite capable of running a light GNU/Linux desktop environment like Xfce and LXQt. I can be made to run Vulkan software by using the amdgpu kernel driver instead of the default radeon driver but it is totally NOT worth it for one simple reason: It breaks suspend to disk. That is very unfortunate since the AMD E1-6010 is primarily found in old laptops and notebooks.

AMD E1-6010 APU with AMD Radeon R2 Graphics
radeon is used by default, force amdgpu with
radeon.cik_support=0 amdgpu.cik_support=1
OpenGL Vulkan Hardware Video

Encoding/Decoding

Suspend To RAM Suspend To Disk HDMI audio
amdgpu Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg Dialog-cancel.svgEdit-bomb.svg Dialog-ok.svg
radeon Dialog-ok.svg Dialog-cancel.svg Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg


The AMD Mullins graphics technology AMD E1-6010 APU supports hardware video encoding regardless of which driver is used. Vulkan works fine with the amdgpu kernel driver is used. Suspending from disk when the amdgpu driver is used results in a very black screen and sad kernel ring buffer messages.

Amdgpu mullins return from suspend to disk.jpg
Kernel ring buffer story after returning from suspend to RAM on a AMD E1-6010 APU machine.

We do not know what AMD developers meant by:

[  804.133022] amdgpu 0000:00:01.0: [drm:amdgpu_ring_test_helper] *ERROR* ring gfx test failed (-110)
[  804.133030] [drm:amdgpu_device_ip_resume_phase2] *ERROR* resume of IP block <gfx_v7_0> failed -110
[  804.133034] [drm:amdgpu_device_resume] *ERROR* amdgpu_device_ip_resume failed (-110).
[  804.133042] PM: dpm_run_callback(): pci_pm_restore+0x0/0xd0 returns -110
[  804.133059] PM: Device 0000:00:01.0 failed to restore async: error -110

or

[  805.118487] BUG: kernel NULL pointer dereference, address: 0000000000000008
[  805.118498] #PF: supervisor read access in kernel mode
[  805.118502] #PF: error_code(0x0000) - not-present page

The amdgpu is an alternative on this particular APU if you can live without the ability resume when the system has been suspended to disk.

AMD Athlon 5350 APU with Radeon R3

AMD Athlon 5350 APU with Radeon R3
radeon is used by default, force amdgpu with
radeon.cik_support=0 amdgpu.cik_support=1
OpenGL Vulkan Hardware Video

Encoding/Decoding

Suspend To RAM Suspend To Disk HDMI audio
amdgpu Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg
radeon Dialog-ok.svg Dialog-cancel.svg Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg Dialog-ok.svg

Conclusions

The amdgpu kernel driver is primarily made for newer AND graphics chips. It can be used with older GCN based cards and it may work flawlessly. That is the case with the AMD Athlon 5350 APU but it is not the case with other AMD technology like the AMD E1-6010 APU or the Radeon HD 7850 GPU. There is a reason why the radeon driver remains the default for those older graphics chips.

You have to use the amdgpu driver if you want to be able to use Vulkan applications. Forcefully enabling it on a machine with an older AMD graphics chip may be worth it if that is something you really want - just make sure you test that things like suspend to disk still works as expected once you enable it. You may find that you get a horrible kernel panic when an older system using amdgpu returns from hibernation. That is of course less relevant if you have an older system where it does not work regardless of which graphics driver you are using. It really is quite sad that it remains impossible to use certain functionality with AMD graphics cards a decade after they were released.

0.00
(0 votes)


Add your comment
LinuxReviews welcomes all comments. If you do not want to be anonymous, register or log in. It is free.