Missing firmware for amdgpu

Solution 1:

You can find firmware at linux-firmware git

It looks like the missing firmware files are there.

You can clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git and copy the missing files to /lib/firmware/amdgpu.

Solution 2:

Update: this is my amateur approach to just “making things work” — there are better answers out there and this probably isn’t the most stable approach. Linux in the home user space is essentially about learning. If you break something you will need to learn to fix it, or start over! This is the case with any system in computing. The sooner you learn to deal with that the sooner you will find a way to “fish for yourself” rather than rely on handout solutions — which might be imperfect.

Do not troubleshoot a business environment with this solution. You have been warned.

——— To save time for new users, and people unfamiliar with the terminal -- the following commands can be copied and pasted directly for ease of use. Please make sure to have git installed, if it's not open a terminal (ctrl + alt + t in most cases) and enter the following command: sudo apt install git -y

If apt complains about updating, update and upgrade with: sudo apt update && sudo apt upgrade -y

then install git with the first command.

The firmware files needed for this can be found at https://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firmware.git

if you've already got git installed, this can be done by typing cd ~/Documents && git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firmware.git

After you've cloned the repository using the above command it's important to put the files in the right place so the program "update-initramfs" can find them and make use of them.

To do this simply enter in the terminal the following command (for ubuntu, as of 18.04)

sudo cp ~/Documents/linux-firmware/amdgpu/* /lib/firmware/amdgpu && sudo update-initramfs -k all -u -v

The above commands assumes you are updating your initramfs image and will use all kernel versions available on the system at the time.

With all this done, APT should no longer complain. :D

Solution 3:

Update as of Jan 2022, as per linux-firmware 1.187.24 source package in Ubuntu, the change-log reads:

amdgpu: add UVD firmware for SI asics (LP: #1953249)

So now simply updating to the latest linux-firmware package may resolve the issues specific to AMD Southern Islands missing firmware.

Previous answer/alternate work-around left below for posterity as other AMD models and firmware could encounter the same issue if/when Ubuntu maintainers update the kernel and AMD driver modules without remembering to update the related firmware package.


Previous answers suggest directly downloading firmware from linux-firmware git. This answer provides an alternative approach the tries to replicate how the Ubuntu release test cycle works more closely and could represent a "more widely tested" combination of official release Kernel with related release firmware.

Downloading directly from the git repo has subtle implications:

  • It can end up mixing potentially very new firmware with possibly slightly older kernel modules which risks straying onto a lesser tested combination firmware vs kernel driver modules.
  • UEFI secure boot may not work when the firmware has not been appropriately signed and gets included into initramfs.

An alternative, assuming a HWE stack, is to try match the release test cycle one assumes happens between the kernel and firmware versions.

  • Get your current release (cat /etc/lsb-release). E.g. "Ubuntu 20.04.3 LTS":
  • Get your kernel version (uname -a). E.g. 5.11.
  • If curious, understand what firmware package version is available from the current repo (apt show linux-firmware | grep Version)
  • Figure out which interim release matches the HWE kernel/stack via https://ubuntu.com/about/release-cycle#ubuntu-kernel-release-cycle. E.g. 5.11 was back-ported to 20.04.3 LTS from Ubuntu 21.04 (hirsute).
  • Use Ubuntu package search (https://packages.ubuntu.com/search?keywords=liinux-firmware&searchon=names) and locate the linux-firmware package version that fits with that particular interim release and kernel combination. E.g. https://packages.ubuntu.com/hirsute-updates/linux-firmware was released along with Kernel 5.11 with hirsute (21.04).
  • Download an manually install the .deb from the hirsute (21.04) release.
  • By using the .deb pacakage from Ubuntu, hopefully the firmware is correctly signed to work with secure boot (for those not stuck on legacy BIOS and with UEFI who care about these mitigations against rootkits and bootoader malware).

E.g. a match for 20.04.3 LTS with kernel 5.11 to linux-firmware from hirsute (21.04) which was v 1.197.3 while the focal (20.04) repo had left linux-firmware out of date on v 1.187.20.

curl -OL http://archive.ubuntu.com/ubuntu/pool/main/l/linux-firmware/linux-firmware_1.197.3_all.deb
sudo dpkg -i linux-firmware_1.197.3_all.deb

Extra hint: Download the deb from your closest mirror because this package is almost 200MB large and the main archive may be slow.

To explain further, Ubuntu HWE stack maintainers updated the kernel (and amdgpu driver) but unfortunately failed to keep the linux-firmware package up to date. So the amdgpu driver was clearly tested/developed on top of firmware that Ubuntu included with the newer interim non-LTS, but then failed to include/back-port with their HWE kernel refresh to the previous LTS.

Everyone getting this sort of error, please register a launchpad account and add your vote with "This bug affects me" the help get Ubuntu to pay some attention and keep HWE kernels and linux-firmware packages in better lockstep: https://bugs.launchpad.net/ubuntu/+source/linux-firmware/+bug/1953249

One drawback to this approach is there will be no automatic updates on the firmware anymore, but it's less complex manually installing the .deb than trying mix in the interim release repos (which would require apt preferences package name pinning and priorities)

Related:

  • enable AMDGPU for R9 270x on 20.04
  • https://bugs.launchpad.net/ubuntu/+source/linux-firmware/+bug/1953249