# [SOLVED] Kernel does not find firmware for amdgpu after 4.19

## printf

Just updated the kernel from 4.18 to 4.19 and noticed that the amd card from my system is not working (dell notebook with an intel card and an amd card).

Here is the dmesg error:

```
[    0.275619] [drm] amdgpu kernel modesetting enabled.

[    0.275649] amdgpu 0000:01:00.0: enabling device (0000 -> 0003)

[    0.317971] amdgpu 0000:01:00.0: Direct firmware load for amdgpu/oland_mc.bin failed with error -2

[    0.317974] amdgpu 0000:01:00.0: si_mc: Failed to load firmware "amdgpu/oland_mc.bin"

[    0.317976] amdgpu 0000:01:00.0: Failed to load mc firmware!

[    0.317981] amdgpu 0000:01:00.0: amdgpu_device_ip_init failed

[    0.317983] amdgpu 0000:01:00.0: Fatal error during GPU init

[    0.317984] [drm] amdgpu: finishing device.

[    0.318251] amdgpu: probe of 0000:01:00.0 failed with error -2

```

here is the 4.18 config: https://pastebin.com/raw/YiWg0HJK

here is the 4.19 config: https://pastebin.com/raw/eSXDqkPe

previously i generated the firmware config line according to the wiki (https://wiki.gentoo.org/wiki/AMDGPU#Firmware):

```
radeon/{oland_{ce,mc,me,pfp,rlc,smc},TAHITI_uvd}.bin
```

it's clear that the files were in the /lib/radeon folder, but i do not know why it is trying to search it there

also i tried a "locate oland":

```
/lib64/firmware/amdgpu/oland_ce.bin

/lib64/firmware/amdgpu/oland_k_smc.bin

/lib64/firmware/amdgpu/oland_mc.bin

/lib64/firmware/amdgpu/oland_me.bin

/lib64/firmware/amdgpu/oland_pfp.bin

/lib64/firmware/amdgpu/oland_rlc.bin

/lib64/firmware/amdgpu/oland_smc.bin

/lib64/firmware/radeon/oland_ce.bin

/lib64/firmware/radeon/oland_k_smc.bin

/lib64/firmware/radeon/oland_mc.bin

/lib64/firmware/radeon/oland_me.bin

/lib64/firmware/radeon/oland_pfp.bin

/lib64/firmware/radeon/oland_rlc.bin

/lib64/firmware/radeon/oland_smc.bin

/mnt/support/portage/dev-python/colander

/mnt/support/portage/dev-python/colander/Manifest

/mnt/support/portage/dev-python/colander/colander-1.3.1.ebuild

/mnt/support/portage/dev-python/colander/metadata.xml

/mnt/support/portage/dev-util/goland

/mnt/support/portage/dev-util/goland/Manifest

/mnt/support/portage/dev-util/goland/goland-2018.1.3.ebuild

/mnt/support/portage/dev-util/goland/goland-2018.1.4.ebuild

/mnt/support/portage/dev-util/goland/goland-2018.1.5.ebuild

/mnt/support/portage/dev-util/goland/goland-2018.2.ebuild

/mnt/support/portage/dev-util/goland/metadata.xml

/mnt/support/portage/metadata/md5-cache/dev-python/colander-1.3.1

/mnt/support/portage/metadata/md5-cache/dev-util/goland-2018.1.3

/mnt/support/portage/metadata/md5-cache/dev-util/goland-2018.1.4

/mnt/support/portage/metadata/md5-cache/dev-util/goland-2018.1.5

/mnt/support/portage/metadata/md5-cache/dev-util/goland-2018.2

/usr/lib64/clc/oland-amdgcn--.bc

/usr/lib64/clc/oland-amdgcn-mesa-mesa3d.bc

/usr/portage/dev-python/colander

/usr/portage/dev-python/colander/Manifest

/usr/portage/dev-python/colander/colander-1.3.1.ebuild

/usr/portage/dev-python/colander/metadata.xml

/usr/portage/dev-util/goland

/usr/portage/dev-util/goland/Manifest

/usr/portage/dev-util/goland/goland-2018.1.3.ebuild

/usr/portage/dev-util/goland/goland-2018.1.4.ebuild

/usr/portage/dev-util/goland/goland-2018.1.5.ebuild

/usr/portage/dev-util/goland/goland-2018.2.ebuild

/usr/portage/dev-util/goland/metadata.xml

/usr/portage/metadata/md5-cache/dev-python/colander-1.3.1

/usr/portage/metadata/md5-cache/dev-util/goland-2018.1.3

/usr/portage/metadata/md5-cache/dev-util/goland-2018.1.4

/usr/portage/metadata/md5-cache/dev-util/goland-2018.1.5

/usr/portage/metadata/md5-cache/dev-util/goland-2018.2

/usr/share/vim/vim80/lang/menu_polish_poland.1250.vim

/usr/share/zoneinfo/Poland

/usr/src/linux-4.16_p6-pf/firmware/radeon/.oland_ce.bin.gen.o.cmd

/usr/src/linux-4.16_p6-pf/firmware/radeon/.oland_mc.bin.gen.o.cmd

/usr/src/linux-4.16_p6-pf/firmware/radeon/.oland_me.bin.gen.o.cmd

/usr/src/linux-4.16_p6-pf/firmware/radeon/.oland_pfp.bin.gen.o.cmd

/usr/src/linux-4.16_p6-pf/firmware/radeon/.oland_rlc.bin.gen.o.cmd

/usr/src/linux-4.16_p6-pf/firmware/radeon/.oland_smc.bin.gen.o.cmd

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_ce.bin.gen.S

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_ce.bin.gen.o

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_mc.bin.gen.S

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_mc.bin.gen.o

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_me.bin.gen.S

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_me.bin.gen.o

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_pfp.bin.gen.S

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_pfp.bin.gen.o

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_rlc.bin.gen.S

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_rlc.bin.gen.o

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_smc.bin.gen.S

/usr/src/linux-4.16_p6-pf/firmware/radeon/oland_smc.bin.gen.o

/usr/src/linux-4.17_p1-pf/firmware/radeon/.oland_ce.bin.gen.o.cmd

/usr/src/linux-4.17_p1-pf/firmware/radeon/.oland_mc.bin.gen.o.cmd

/usr/src/linux-4.17_p1-pf/firmware/radeon/.oland_me.bin.gen.o.cmd

/usr/src/linux-4.17_p1-pf/firmware/radeon/.oland_pfp.bin.gen.o.cmd

/usr/src/linux-4.17_p1-pf/firmware/radeon/.oland_rlc.bin.gen.o.cmd

/usr/src/linux-4.17_p1-pf/firmware/radeon/.oland_smc.bin.gen.o.cmd

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_ce.bin.gen.S

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_ce.bin.gen.o

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_mc.bin.gen.S

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_mc.bin.gen.o

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_me.bin.gen.S

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_me.bin.gen.o

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_pfp.bin.gen.S

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_pfp.bin.gen.o

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_rlc.bin.gen.S

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_rlc.bin.gen.o

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_smc.bin.gen.S

/usr/src/linux-4.17_p1-pf/firmware/radeon/oland_smc.bin.gen.o

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/.oland_ce.bin.gen.o.cmd

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/.oland_mc.bin.gen.o.cmd

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/.oland_me.bin.gen.o.cmd

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/.oland_pfp.bin.gen.o.cmd

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/.oland_rlc.bin.gen.o.cmd

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/.oland_smc.bin.gen.o.cmd

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_ce.bin.gen.S

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_ce.bin.gen.o

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_mc.bin.gen.S

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_mc.bin.gen.o

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_me.bin.gen.S

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_me.bin.gen.o

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_pfp.bin.gen.S

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_pfp.bin.gen.o

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_rlc.bin.gen.S

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_rlc.bin.gen.o

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_smc.bin.gen.S

/usr/src/linux-4.18_p1-r1-pf/firmware/radeon/oland_smc.bin.gen.o

/usr/src/linux-4.18_p4-pf/firmware/radeon/.oland_ce.bin.gen.o.cmd

/usr/src/linux-4.18_p4-pf/firmware/radeon/.oland_mc.bin.gen.o.cmd

/usr/src/linux-4.18_p4-pf/firmware/radeon/.oland_me.bin.gen.o.cmd

/usr/src/linux-4.18_p4-pf/firmware/radeon/.oland_pfp.bin.gen.o.cmd

/usr/src/linux-4.18_p4-pf/firmware/radeon/.oland_rlc.bin.gen.o.cmd

/usr/src/linux-4.18_p4-pf/firmware/radeon/.oland_smc.bin.gen.o.cmd

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_ce.bin.gen.S

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_ce.bin.gen.o

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_mc.bin.gen.S

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_mc.bin.gen.o

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_me.bin.gen.S

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_me.bin.gen.o

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_pfp.bin.gen.S

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_pfp.bin.gen.o

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_rlc.bin.gen.S

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_rlc.bin.gen.o

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_smc.bin.gen.S

/usr/src/linux-4.18_p4-pf/firmware/radeon/oland_smc.bin.gen.o

```

it seems, for 4.19 it does not even try to include it in the kernelLast edited by printf on Mon Nov 19, 2018 9:58 pm; edited 1 time in total

----------

## ct85711

For builtin modules, you have to specifically specify the firmware to build into the kernel.  The ability for the kernel to just go look for the firmware needed was discontinued, with the exception for the stuff that is built as a module (which will grab the needed firmware as the module is loaded.  The big thing is that there is a big difference on when those modules are started, builtin modules is available immediately, where modules are started later as it is needed.

https://wiki.gentoo.org/wiki/Linux_firmware

----------

## Hu

As I understand it, the kernel still seeks the firmware when needed.  The problem is that, "when needed" is now defined as "when the relevant driver initializes."  Builtin drivers initialize before the root filesystem is mounted, so when they seek firmware, the only places they can look are in the builtin firmware and possibly in the initramfs.  They cannot look in the /lib/firmware on your disk because / has not been mounted yet.  Drivers built as modules cannot be loaded until the storage containing the module is available.  When that storage also contains the firmware, the ordering dependency prevents the kernel trying to initialize the driver or require the firmware too early.

----------

## printf

i looked around on the wiki and in the kernel menu config and it seems to me that all option are set, that force firmware to be built into the kernel.

am i missing something?

----------

## Marlo

 *printf wrote:*   

> ...am i missing something?

 

You don't miss anything!

Your configuration for both kernels looks right. Make sure the link is correct:

 "eselect kernel list"

And rebuild the kernel.

----------

## Hu

 *Marlo wrote:*   

>  *printf wrote:*   ...am i missing something? You don't miss anything!
> 
> Your configuration for both kernels looks right.

 I disagree.  His dmesg says it wants amdgpu/oland_mc.bin.  His 4.19 kernel configuration embeds radeon/oland_mc.bin (among other files).  These are not the same string, so one is not an acceptable substitute for the other.  The strings must match exactly.

----------

## Marlo

Ok HU!

The wiki says to oland "radeon/".

```

tux ~ $ echo radeon/{oland_{ce,mc,me,pfp,rlc,smc},TAHITI_uvd}.bin

radeon/oland_ce.bin radeon/oland_mc.bin radeon/oland_me.bin radeon/oland_pfp.bin radeon/oland_rlc.bin radeon/oland_smc.bin radeon/TAHITI_uvd.bin

```

Until kernel 4.18. that was apparently correct and worked.

If the kernel 4.19. want "amdgpu/" then the kernel can have that.

```

tux ~ $ echo amdgpu/{oland_{ce,mc,me,pfp,rlc,smc},TAHITI_uvd}.bin

amdgpu/oland_ce.bin amdgpu/oland_mc.bin amdgpu/oland_me.bin amdgpu/oland_pfp.bin amdgpu/oland_rlc.bin amdgpu/oland_smc.bin amdgpu/TAHITI_uvd.bin

```

But that does not clarify the cause of the error. Why denied 4.19. radeon/oland_mc.bin? Although he accepts all other radeon/oland*?

Why does the 4.19. switch from the commanded radeon/ to the not issued instruction amdgpu/?

----------

## Hu

 *Marlo wrote:*   

> But that does not clarify the cause of the error. Why denied 4.19. radeon/oland_mc.bin? Although he accepts all other radeon/oland*?
> 
> Why does the 4.19. switch from the commanded radeon/ to the not issued instruction amdgpu/?

 I don't understand your questions.  4.19 is not denying anything.  It is ignoring an inappropriate file.  It wants a file the user failed to embed in the kernel (because it was previously not required, so the user did not expect the change).  If I had to guess, 4.19 either is using a different driver for this graphics card, or the kernel developers decided that a different firmware blob was more appropriate to this card.

----------

## printf

updated kernel to 4.19.0-p4 (from 4.19.0-p3) and the problem still persists

also googling around found someone with similar problem: https://github.com/xanmod/linux/issues/14

----------

## Ant P.

Have you made any attempt to use the correct firmware paths as described above?

----------

## printf

 *Ant P. wrote:*   

> Have you made any attempt to use the correct firmware paths as described above?

 

not yet...

was hoping for an explanation first, but when i saw the dmesg output, it passed trough my mind.

will try tonight hopefully

----------

## printf

using this line:

```
CONFIG_EXTRA_FIRMWARE="iwlwifi-6000g2b-6.ucode amdgpu/oland_ce.bin amdgpu/oland_mc.bin amdgpu/oland_me.bin amdgpu/oland_pfp.bin amdgpu/oland_rlc.bin amdgpu/oland_smc.bin radeon/TAHITI_uvd.bin"
```

fixed it after i did a make clean -> make -> make install

NOTE: TAHITI_uvd.bin is still from the radeon folder as it is not found in the amdgpu folder

----------

