1

The R9-290/290X Hawaii range of cards do not work with Linux kernels 4.19.x and 4.20.x in ubuntu 18 The last fully functioning kernel version is 4.18.20 This is with the latest stable mesa driver and the amdgpu drm driver in-kernel.

4.19.x and 4.20.x results in failed boots or it doesn't boot at all (black screen after grub, no tty).

Depending on the grub linux commandline parameters, I was able to get an unstable desktop booting to further investigate and gather state evidence. Here it is...

Kernel and command line

kernel:

Linux version 4.20.0-042000-generic (kernel@tangerine) (gcc version 8.2.0 (Ubuntu 8.2.0-12ubuntu1)) #201812232030 SMP Mon Dec 24 01:32:58 UTC 2018

Kernel Command line:

BOOT_IMAGE=/vmlinuz-4.20.0-042000-generic root=/dev/mapper/ubuntu--vg-root ro quiet splash radeon.si_support=0 radeon.cik_support=0 amdgpu.si_support=1 amdgpu.cik_support=1 amdgpu.dc=1

lspci -v for Linux Kernel 4.20.0

01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii XT / Grenada XT [Radeon R9 290X/390X] (prog-if 00 [VGA controller])
    Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii XT / Grenada XT [Radeon R9 290X/390X]
    Flags: fast devsel, IRQ 16
    Memory at d0000000 (64-bit, prefetchable) [size=256M]
    Memory at ef800000 (64-bit, prefetchable) [size=8M]
    I/O ports at ae00 [size=256]
    Memory at fb980000 (32-bit, non-prefetchable) [size=256K]
    [virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
    Capabilities: [48] Vendor Specific Information: Len=08 <?>
    Capabilities: [50] Power Management version 3
    Capabilities: [58] Express Legacy Endpoint, MSI 00
    Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
    Capabilities: [150] Advanced Error Reporting
    Capabilities: [270] #19
    Capabilities: [2b0] Address Translation Service (ATS)
    Capabilities: [2c0] Page Request Interface (PRI)
    Capabilities: [2d0] Process Address Space ID (PASID)
    Kernel modules: radeon, amdgpu

01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii HDMI Audio [Radeon R9 290/290X / 390/390X]
    Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii HDMI Audio [Radeon R9 290/290X / 390/390X]
    Flags: bus master, fast devsel, latency 0, IRQ 32
    Memory at fb9fc000 (64-bit, non-prefetchable) [size=16K]
    Capabilities: [48] Vendor Specific Information: Len=08 <?>
    Capabilities: [50] Power Management version 3
    Capabilities: [58] Express Legacy Endpoint, MSI 00
    Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
    Capabilities: [150] Advanced Error Reporting
    Kernel driver in use: snd_hda_intel
    Kernel modules: snd_hda_intel

last boot Kernel 4.20 only one display working.

Other display forced mirroring. Other GPU ports not working. journalctl -b | grep drm output:

[drm] amdgpu kernel modesetting enabled.
[drm] initializing kernel modesetting (HAWAII 0x1002:0x67B0 0x1002:0x0B00 0x00).
[drm] register mmio base: 0xFB980000
[drm] register mmio size: 262144
[drm] add ip block number 0 <cik_common>
[drm] add ip block number 1 <gmc_v7_0>
[drm] add ip block number 2 <cik_ih>
[drm] add ip block number 3 <gfx_v7_0>
[drm] add ip block number 4 <cik_sdma>
[drm] add ip block number 5 <powerplay>
[drm] add ip block number 6 <dm>
[drm] add ip block number 7 <uvd_v4_2>
[drm] add ip block number 8 <vce_v2_0>
[drm] vm size is 128 GB, 2 levels, block size is 10-bit, fragment size is 9-bit
[drm:gmc_v7_0_sw_init [amdgpu]] *ERROR* Failed to load mc firmware!
[drm:amdgpu_device_init.cold.31 [amdgpu]] *ERROR* sw_init of IP block <gmc_v7_0> failed -2
[drm] amdgpu: finishing device.

Last SUCCESSFUL boot of linux Kernel 4.18.20.

All displays working. Everything worked ok. Here for reference, journalctl | grep drm output:

[drm] amdgpu kernel modesetting enabled.
fb: switching to amdgpudrmfb from VESA VGA
[drm] initializing kernel modesetting (HAWAII 0x1002:0x67B0 0x1002:0x0B00 0x00).
[drm] register mmio base: 0xFB980000
[drm] register mmio size: 262144
[drm] probing gen 2 caps for device 8086:151 = 261ac83/e
[drm] probing mlw for device 8086:151 = 261ac83
[drm] add ip block number 0 <cik_common>
[drm] add ip block number 1 <gmc_v7_0>
[drm] add ip block number 2 <cik_ih>
[drm] add ip block number 3 <ci_dpm>
[drm] add ip block number 4 <dm>
[drm] add ip block number 5 <gfx_v7_0>
[drm] add ip block number 6 <cik_sdma>
[drm] add ip block number 7 <uvd_v4_2>
[drm] add ip block number 8 <vce_v2_0>
[drm] vm size is 64 GB, 2 levels, block size is 10-bit, fragment size is 9-bit
[drm] Detected VRAM RAM=4096M, BAR=256M
[drm] RAM width 512bits GDDR5
[drm] amdgpu: 4096M of VRAM memory ready
[drm] amdgpu: 4096M of GTT memory ready.
[drm] GART: num cpu pages 262144, num gpu pages 262144
[drm] PCIE GART of 1024M enabled (table at 0x000000F4007E9000).
[drm] Internal thermal controller with fan control
[drm] Invalid PCC GPIO: 13!
[drm] amdgpu: dpm initialized
[drm] Found UVD firmware Version: 1.64 Family ID: 9
[drm] Found VCE firmware Version: 50.10 Binary ID: 2
[drm] PCIE gen 3 link speeds already enabled
[drm] dce110_link_encoder_construct: Failed to get encoder_cap_info from VBIOS with error code 4!
[drm] dce110_link_encoder_construct: Failed to get encoder_cap_info from VBIOS with error code 4!
[drm] dce110_link_encoder_construct: Failed to get encoder_cap_info from VBIOS with error code 4!
[drm] Display Core initialized with v3.1.44!
[drm] SADs count is: -524, don't need to read it
[drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[drm] Driver supports precise vblank timestamp query.
[drm] UVD initialized successfully.
[drm] VCE initialized successfully.
[drm] fb mappable at 0xD0BD0000
[drm] vram apper at 0xD0000000
[drm] size 8294400
[drm] fb depth is 24
[drm]    pitch is 7680
fbcon: amdgpudrmfb (fb0) is primary device
[drm] dce_get_required_clocks_state: clocks unsupported disp_clk 681000 pix_clk 148500
amdgpu 0000:01:00.0: fb0: amdgpudrmfb frame buffer device
[drm] Initialized amdgpu 3.26.0 20150101 for 0000:01:00.0 on minor 0
1

Thanks to Alex Deucher (AMD driver developer for linux) who helped me troubleshoot and get started solving my own problem.

The problem and work-around solution was first documented in this bug-tracker... https://bugs.freedesktop.org/show_bug.cgi?id=108781

The solution I'm about to detail underneath will unlikely ever get fixed in linux kernels 4.19.x and 4.20.x. I'm hoping it gets sorted in future kernels. If you want something easy, stick to 4.18.20 or below. If you want to take advantage of whatever fixes are in the 4.19.x/4.20.x kernels then you can try the following underneath which worked for me....

WORK-AROUND SOLUTION:

  1. Removed amdgpu.dpm=x completely from linux commandline and updated grub. '0' or '1' will NOT work and will not boot, NOT even tty
  2. copied /lib/firmware/radeon/* to /lib/firmware/amdgpu/
  3. backed-up all contents of /lib/firmware/radeon/*
  4. Deleted /lib/firmware/radeon/
  5. Ensured initrd for 4.20.0 was in the /boot location
  6. ~$ sudo update-initramfs -u
  7. Confirm contents of functioning/working kernel via lsinitramfs /boot/initrd.img-<YOUR-KERNEL>-generic | grep hawaii It needs to still point to the /lib/firmware/radeon even though we have deleted it.
  8. Confirm contents of new kernel that isn't functioning. For me the kernel was lsinitramfs /boot/initrd.img-4.20.0-042000-generic | grep hawaii. It should only contain /lib/firmware/amdgpu/*
  9. Restore /lib/firmware/radeon/* from backup. This is so you can recover to the previous kernel version if necessary.
  10. Restart/Reboot
  11. [OPTIONAL-IMPORTANT] If all working well (it is for me) then for no conflicts for future kernels, delete /lib/firmware/radeon THEN delete all previous kernels prior to the new kernel that is now functioning. If you do NOT do this AND install a new Kernel AND then run the command update-initramfs, then you will have duplicate paths in the initrd for the future kernel. Not sure what happens when that happens, I'm not testing to find out as haven't got time for it.
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.