LINUX.ORG.RU
решено ФорумAdmin

Ядро не может найти сжатую прошивку для GPU

 


0

1

Привет. Собираю своё linux ядро, мне не делать нечего, а иначе никак - на свежих ядрах начала зависать система, какие-то GPU related косяки, решил откатиться.

Проблема вот в чем - во время загрузки в ГПУ нужно влить прошивку, в комплекте дистра прошивки идут zstd сжатые, моё ядро пытается найтие не сжатую версию, ожидаемо происходит ошибка и ГПУ отваливается. В логах это выглядит так:

[    0.591319] [drm] Loading kaveri Microcode
[    0.591341] radeon 0000:00:01.0: Direct firmware load for radeon/kaveri_pfp.bin failed with error -2
[    0.591359] radeon 0000:00:01.0: Direct firmware load for radeon/KAVERI_pfp.bin failed with error -2
[    0.591366] [drm:cik_init] *ERROR* Failed to load firmware!
[    0.591376] radeon 0000:00:01.0: Fatal error during GPU init
[    0.591379] [drm] radeon: finishing device.

Искомая прошивка существует в виде:

/usr/lib/firmware/amdgpu/kaveri_pfp.bin.zst

В ядре я включил это:

CONFIG_FW_LOADER_COMPRESS: 

This option enables the support for loading compressed firmware files. ...

Но прошивка всё равно не находится. Где крутить?

Перемещено hobbit из general


Ответ на: комментарий от andytux

Тут в общем небольшие исследования говорят о том, что ГПУ инициализируется перед монтированием root ФС, а прошивки на ней в /lib/firmware, т.е. шансов найти нет. Но есть возможность вкомпилить прошивку в бинарь с ядром, что я и сделал. Но опять фейл, файл не найден, но имя изменилось с kaveri_pfp.bin на:

radeon 0000:00:01.0: Direct firmware load for radeon/kaveri_me.bin failed with error -2

Вкомпилять пробовал распакованную прошивку.

В общем надо либо подмонтировать корень перед настройкой ГПУ (советы как это сделать приветствуются), либо разбираться с initramfs, если я правильно понимаю её смысл.

Хотя фейл при влинкованной прошивки в ядро - мне вообще не ясен, мне казалось, что будет успех

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)
Ответ на: комментарий от andytux

Да это все понятно, поверь, я это все вертел и так и сяк, просто в момент заливки прошивки настоящий корень ещё не подмонтирован, это видно по логам.

Сделал следующим образом - подсунул своему ядру ту initramfs, что идёт вместе с ядром дистра, там все нужные прошивки вшиты. В общем удалось получить работающую конфигурации (хотя бы с картинкой), дальше уже дошлифую. Конечно в идеале разобраться и сделать свою initramfs под свое ядро, но, по-моему, на сегодня боли и так было достаточно.

Спасибо всем, мне было с вами хорошо

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

ГПУ инициализируется перед монтированием root ФС

GPU инициализируется драйвером/модулем ядра, который у тебя, скорее всего, вкомпилен в ядро. Сделай его модулем CONFIG_<modname>=m, и грузи с корня вместе с прошивками.

anonymous
()
Ответ на: комментарий от anonymous

Драйвер - часть ядра, а вот прошивка - нет. Там есть способ вшить её, но как-то не выходит, я пробовал влинковать разжатую версию прошивки, хз почему без успеха

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)

В общем откатился я на ядро 6.6.89, а система всё равно виснет, значит не в нем дело. То ли mesa, то ли вяленный (стоит sway), но итог в том, что иногда система стала виснуть намертво (в процессе возни в браузере, стабильно когда ковыряю п2п стакан на bybit’e). dmesg изобилует подобными сообщения при этом (на разных ядрах содержание различно), например такое:

[  455.837965] VM fault (0x0c, vmid 1) at page 2110, read from 'TC0' (0x54433000) (96)
[  457.880192] radeon 0000:00:01.0: couldn't schedule ib
[  457.880230] [drm:radeon_gem_va_ioctl [radeon]] *ERROR* Couldn't update BO_VA (-22)
[  457.881219] radeon 0000:00:01.0: couldn't schedule ib
[  457.881243] [drm:radeon_gem_va_ioctl [radeon]] *ERROR* Couldn't update BO_VA (-22)
[  457.881591] radeon 0000:00:01.0: GPU fault detected: 146 0x07c2200c
[  457.881630] radeon 0000:00:01.0:   VM_CONTEXT1_PROTECTION_FAULT_ADDR   0x0000083E
[  457.881653] radeon 0000:00:01.0:   VM_CONTEXT1_PROTECTION_FAULT_STATUS 0x0202000C
[  457.881656] VM fault (0x0c, vmid 1) at page 2110, read from 'TC2' (0x54433200) (32)

Или такими:

[18546.454306] radeon 0000:00:01.0: ring 2 stalled for more than 10081msec
[18546.454326] radeon 0000:00:01.0: GPU lockup (current fence id 0x000000000000011b last fence id 0x000000000000011d on ring 2)

а тут call stack показало:

[  975.385195] Call Trace:
[  975.385203]  <TASK>
[  975.385211]  ? radeon_flip_work_func+0x1a8/0x260 [radeon 361a4ba895fcbe072b989e5212138708eb22e817]
[  975.385298]  radeon_unpin_work_func+0xad/0xe0 [radeon 361a4ba895fcbe072b989e5212138708eb22e817]
[  975.385387]  process_one_work+0x17f/0x340
[  975.385397]  worker_thread+0x2d2/0x400
[  975.385401]  ? __pfx_worker_thread+0x10/0x10
[  975.385405]  kthread+0xef/0x230
[  975.385412]  ? __pfx_kthread+0x10/0x10
[  975.385416]  ret_from_fork+0x34/0x50
[  975.385424]  ? __pfx_kthread+0x10/0x10
[  975.385429]  ret_from_fork_asm+0x1a/0x30
[  975.385438]  </TASK>
[  975.385441] ---[ end trace 0000000000000000 ]---

Не знаю что с этой хренью делать, и на иксах та же хрень. То ли железные проблемы, то ли firefox со всякими mesa’ми что-то недопустимое делает. Хотя последнее вызывает сомнения - как бы оно там ни было, между ними и железом драйвер, при любом раскладе он вряд ли должен вызывать зависание. А я точно откатился туда, где с этим драйвером все ок было

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)