LINUX.ORG.RU

fb: switching to amdgpudrmfb from EFI VGA

 ,


0

1

Хочу перекатиться на Gentoo / KDE, т.к. годы берут своё, хочется просто быть пользователем системы, а в эпоху мракобесия и SJW выбор пал на последний оплот стабильности Gentoo.

Железо Ryzen 2700X / RX 570 8G / GIGABYTE X470 AORUS ULTRA GAMING

Система загружается, то есть, я могу ввести root, toor, poweroff «вслепую», но только экран зависает на этой вот картинке.

fb: switching to amdgpudrmfb from EFI VGA (16 пингвинчиков не влезают)

Как бывший пользователь CRUX / Linux 5.4.13 скажу, что проблема ниразу не в Gentoo и не в «старом» ядре линукса. Рядом CRUX (читай: полностью ванильный софт на ванильном же ядре) отказывается грузиться...обновлять экран с той же ошибкой. Грешу в сторону RX 570. На встройке APU Athlon 200GE / Vega 3 точно такая же проблема.

У синих такой проблемы нет, благодаря чему могу это написать.

Разумеется, AMDGPU включены, как видно из скриншота. В ядре пробовал отключать опцию CONFIG_FB_EFI (EFI-based Framebuffer Support), тогда картина с «зависанием» наблюдается сразу после GRUB2.

В make.conf:

USE="-gnome -gtk -vlc"
INPUT_DEVICES="evdev keyboard mouse synaptics"
VIDEO_CARDS="intel i965 amdgpu radeonsi"

Вроде бы драйвера все установлены. linux-firmware установлена.

ЧЯДНТ?

--------

Таким образом, если вы не можете загрузиться, то

1) В меню grub2 при загрузке нажимаем клавишу «e» чтобы отредактировать параметры загрузки, добавляем опцию nomodeset, загружаемся.

2) cd /usr/src/linux && make menuconfig

3) Выставляем загружаться CONFIG_AMDGPU=m как модуль. Большие ничего исправлять не нужно.

4) ?????

5) PROFIT!

Огромное спасибо всем за участие в дискуссии! Вот вам скриншот успешного АМуДэ — Боярина.

★★★★★

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

GRUB_CMDLINE_LINUX="modprobe.blacklist=radeon amdgpu.si_support=0 amdgpu.cik_support=1 amdgpu.vm_fragment_size=9 amdgpu.ppfeaturemask=0"
Rx0
()

Пробуй разные live образы, самое главное тебе версию ядра узнать где все работает. У меня сейчас две встройки amd (одна из них 200ge), все работают с ядром 5.3 на Ubuntu 19.10.

Aber ★★★★★
()

Если я правильно понял, то возможно, проблема в последней строке make.conf. radeonsi уберите из VIDEO_CARDS. Это устаревший драйвер. Да и «синее» «железо» из списка тоже.

Второй вариант — добавить к строке загрузки ядра в настройках GRUB нужное «заклинание» на отключение... а вот чего, не помню. Гугл должен помочь.

И я бы не советовал включать поддержку SI и CIK в ядре. Если я правильно помню, Polaris к ним не относится вообще.

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

добавить к строке загрузки ядра в настройках GRUB нужное «заклинание» на отключение.

Вариант 2 - полное отключение SI/CIK:

GRUB_CMDLINE_LINUX="modprobe.blacklist=radeon amdgpu.si_support=0 amdgpu.cik_support=0 amdgpu.vm_fragment_size=9 amdgpu.ppfeaturemask=0"
Rx0
()

А ты можешь полный dmesg глянуть по ssh или вытащить из логов предыдущего запуска? Думаю просто загрузись с параметром modprobe.blacklist=amdgpu, видокарат тогда будет наверное работать в каком нибудь vesa mode без ускорения, вытащи логи ядра из kernel.log.N неудачного запуска и кинь нам.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 1)

Это может быть баг биоса, переключи видео в режим CSM (эмуляция VGA) и попробуй загрузиться так.

Хотя нет, там же в логе видно «Failed to load firmware „amdgpu/polaris10_mc.bin“»

Khnazile ★★★★★
()
Последнее исправление: Khnazile (всего исправлений: 2)
Ответ на: комментарий от Khnazile

очень странная музыка

# find /lib/firmware/ | grep amdgpu | grep polaris10_mc
/lib/firmware/amdgpu/polaris10_mc.bin

хорошо, я ему вшил

CONFIG_EXTRA_FIRMWARE="amdgpu/polaris10_mc.bin"
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"

аналогично, fb: switching to amdgpudrmfb from EFI VGA

=(

Spoofing ★★★★★
() автор топика
Ответ на: очень странная музыка от Spoofing

Пока это есть в dmesg работать не будет.

[    0.272777] amdgpu 0000:09:00.0: Direct firmware load for amdgpu/polaris10_mc.bin failed with error -2

Rx0
()
Ответ на: очень странная музыка от Spoofing

У тебя очивиндно проблема с загрузкой firmware.

Как у меня проходит загрузка:

[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.3.0-26-generic root=/dev/mapper/NB20191023-ubuntu_root ro quiet splash amdgpu.noretry=0 vt.handoff=7
...
[    3.241886] fb0: switching to amdgpudrmfb from EFI VGA
[    3.241967] Console: switching to colour dummy device 80x25
[    3.242000] amdgpu 0000:05:00.0: vgaarb: deactivate vga console
[    3.242046] amdgpu 0000:05:00.0: enabling device (0006 -> 0007)
[    3.242179] [drm] initializing kernel modesetting (RAVEN 0x1002:0x15D8 0x1043:0x18F1 0xC2).
...
[    3.263206] amdgpu: [powerplay] hwmgr_sw_init smu backed is smu10_smu
[    3.265167] [drm] Found VCN firmware Version ENC: 1.9 DEC: 1 VEP: 0 Revision: 28
[    3.265178] [drm] PSP loading VCN firmware
[    3.287313] [drm] reserve 0x400000 from 0xf400c

Firmware в initram у меня нет, значит оно берется из рута:

$ ls -1 /usr/lib/firmware/amdgpu/ | grep vega10
vega10_acg_smc.bin
vega10_asd.bin
vega10_ce.bin
vega10_gpu_info.bin
...

У тебя должно быть polaris10:

$ ls -1 /usr/lib/firmware/amdgpu/ | grep polaris10
polaris10_ce_2.bin
polaris10_ce.bin
polaris10_k2_smc.bin
polaris10_k_mc.bin
polaris10_k_smc.bin
...

И я так понимаю это параметры с которыми собрано убунтовское ядро в котором все работает:

$ cat /boot/config-5.3.0-26-generic  | grep -iE "\WDRM\W|AMDGPU|FIRMWARE" | grep -v "^#"
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_EXTRA_FIRMWARE=""
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
CONFIG_RT2X00_LIB_FIRMWARE=y
CONFIG_CYPRESS_FIRMWARE=m
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_AMDGPU=m
CONFIG_DRM_AMDGPU_SI=y
CONFIG_DRM_AMDGPU_CIK=y
CONFIG_DRM_AMDGPU_USERPTR=y
CONFIG_FIRMWARE_EDID=y
CONFIG_SND_SOC_INTEL_SST_FIRMWARE=m
CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m
CONFIG_GREYBUS_FIRMWARE=m

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 2)
Ответ на: комментарий от Korchevatel

radeonsi уберите из VIDEO_CARDS. Это устаревший драйвер.

radeonsi - это реализация OpenGL для современных видеокарт от AMD.

Meyer ★★★★★
()
Ответ на: очень странная музыка от Spoofing

А у тебя initrd вообще есть? Помнится, раньше у гентушников считалось, что initrd это костыль для пользователей бинарных дистрибутивов, и все драйверы старались встроить в ядро. Короче, если initrd нет, то собирай amdgpu модулем, чтобы он грузился уже с файловой системы, когда та станет доступна.

Khnazile ★★★★★
()

VIDEO_CARDS=«intel i965 amdgpu radeonsi»

Не знаю, зачем тебе с AMDшной видеокартой intel i965. Тебе нужно встроить firmware в ядро или initramfs. Какое именно - смотри на Gentoo wiki про AMDGPU, т.к я не могу точно сказать.

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

radeonsi - это реализация OpenGL для современных видеокарт от AMD.

Смотрим тут для понимания:

drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c

#ifdef CONFIG_DRM_AMDGPU_SI
        if (!amdgpu_si_support) {
                switch (flags & AMD_ASIC_MASK) {
                case CHIP_TAHITI:
                case CHIP_PITCAIRN:
                case CHIP_VERDE:
                case CHIP_OLAND:
                case CHIP_HAINAN:
                        dev_info(&pdev->dev,
                                 "SI support provided by radeon.\n");
                        dev_info(&pdev->dev,
                                 "Use radeon.si_support=0 amdgpu.si_support=1 to override.\n"
                                );
                        return -ENODEV;
                }
        }
#endif
#ifdef CONFIG_DRM_AMDGPU_CIK
        if (!amdgpu_cik_support) {
                switch (flags & AMD_ASIC_MASK) {
                case CHIP_KAVERI:
                case CHIP_BONAIRE:
                case CHIP_HAWAII:
                case CHIP_KABINI:
                case CHIP_MULLINS:
                        dev_info(&pdev->dev,
                                 "CIK support provided by radeon.\n");
                        dev_info(&pdev->dev,
                                 "Use radeon.cik_support=0 amdgpu.cik_support=1 to override.\n"
                                );
                        return -ENODEV;
                }
        }
#endif
Rx0
()
Ответ на: комментарий от Rx0

И что ты хотел этим сказать? radeonsi - это не ядерный драйвер radeon, а реализация OpenGL (ES тоже) в mesa.

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

А firmware может быть прямо в ядре? В этом случае как узнать что оно там? Это будет просто массив байт по определенному адресу в бинарной сборке ядра? В бинарных дистрах такого значит нет, т.к. build-essential не обязательный пакет, а ядра распространяются без firmware.

Просто в убунту нету в initram никакого firmware для gpu, если смотреть так lsinitramfs /boot/initrd.img-$(uname -r) | grep amdgpu. Я понял что ядро загружает все нужное из рута, т.к. параметрами ядра передается путь к руту на блочном уст-ве, в моем случае так: root=/dev/mapper/NB20191023-ubuntu_root ro

Aber ★★★★★
()
Ответ на: комментарий от Meyer

Вот это все amdgpu/polaris10_ce.bin amdgpu/polaris10_ce_2.bin amdgpu/polaris10_k_smc.bin amdgpu/polaris10_k2_smc.bin amdgpu/polaris10_k_mc.bin amdgpu/polaris10_mc.bin amdgpu/polaris10_me.bin amdgpu/polaris10_me_2.bin amdgpu/polaris10_mec2.bin amdgpu/polaris10_mec2_2.bin amdgpu/polaris10_mec.bin amdgpu/polaris10_mec_2.bin amdgpu/polaris10_pfp.bin amdgpu/polaris10_pfp_2.bin amdgpu/polaris10_rlc.bin amdgpu/polaris10_sdma1.bin amdgpu/polaris10_sdma.bin amdgpu/polaris10_smc.bin amdgpu/polaris10_smc_sk.bin amdgpu/polaris10_uvd.bin amdgpu/polaris10_vce.bin

Засунь вот сюда

Device Drivers ---> Generic Driver Options ---> Firmware loader ---> -*- Firmware loading facility

Meyer ★★★★★
()
Ответ на: комментарий от Aber

А firmware может быть прямо в ядре?

Да, при сборке можно в Firmware loading facility прописать.

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

Чичас, сперва попробую AMDGPU модулем собрать, а потом уже всю фирмварь засунуть, хотя я уже выше пробовал. Но забыл глянуть dmesg как оно там себя чувствует, в этот раз гляну.

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

Просто в убунту нету в initram никакого firmware для gpu

Странно. А вообще это нужно для early KMS.

Meyer ★★★★★
()
Ответ на: комментарий от Rx0

amdgpu.si не как ни относится к radeonsi.

amdgpu это модуль ядра, а si в данном контексте называется Southern Islands серия gpu, которые имеют экспериментальную поддержку в amdgpu модуле, а официально они поддерживаются модулем radeon.

radeonsi это такое же название как r600 или radv, т.е. реализации графических api, все они являются частью mesa драйвера.

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

amdgpu.si не как ни относится к radeonsi.

А я где-то это говорил?

официально они поддерживаются модулем radeon.

Мы тут говорим про amdgpu, не radeon.

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

УМВР, тут уж сложности генту правильно подготовить блобы firmware. У nvidia кстати тоже параллельные ветки драйверов, просто это ж для всех черные ящики, потому никто кроме разрабов nvidia квалифицированно рассказать не может как там все загружается, а они не рассказывают из-за подписанного NDA.

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

тут уж сложности генту правильно подготовить блобы firmware.

По идее, оно должно загружать firmware после монтирования рута, но до этого придется созерцать черный экран. Но если у ТСа установлен linux-firmware, а видимокарта не инициализируется - видимо, он не включил нужные для поляриса опции в amdgpu при сборке.

Meyer ★★★★★
()
Ответ на: комментарий от Aber

Просто в убунту нету в initram никакого firmware для gpu, если смотреть так lsinitramfs /boot/initrd.img-$(uname -r) | grep amdgpu.

Ну тут ты не знал. )

$ lsb_release -a
LSB Version:    core-11.0.1ubuntu1-noarch:security-11.0.1ubuntu1-noarch
Distributor ID: Ubuntu
Description:    Ubuntu 19.10
Release:        19.10
Codename:       eoan
$ lsinitramfs /boot/initrd.img-$(uname -r) | grep polaris
usr/lib/firmware/amdgpu/polaris10_ce.bin
usr/lib/firmware/amdgpu/polaris10_ce_2.bin
usr/lib/firmware/amdgpu/polaris10_k2_smc.bin
usr/lib/firmware/amdgpu/polaris10_k_mc.bin
usr/lib/firmware/amdgpu/polaris10_k_smc.bin
usr/lib/firmware/amdgpu/polaris10_mc.bin
usr/lib/firmware/amdgpu/polaris10_me.bin
usr/lib/firmware/amdgpu/polaris10_me_2.bin
usr/lib/firmware/amdgpu/polaris10_mec.bin
usr/lib/firmware/amdgpu/polaris10_mec2.bin
usr/lib/firmware/amdgpu/polaris10_mec2_2.bin
usr/lib/firmware/amdgpu/polaris10_mec_2.bin
usr/lib/firmware/amdgpu/polaris10_pfp.bin
usr/lib/firmware/amdgpu/polaris10_pfp_2.bin
usr/lib/firmware/amdgpu/polaris10_rlc.bin
usr/lib/firmware/amdgpu/polaris10_sdma.bin
usr/lib/firmware/amdgpu/polaris10_sdma1.bin
usr/lib/firmware/amdgpu/polaris10_smc.bin
usr/lib/firmware/amdgpu/polaris10_smc_sk.bin
usr/lib/firmware/amdgpu/polaris10_uvd.bin
usr/lib/firmware/amdgpu/polaris10_vce.bin
usr/lib/firmware/amdgpu/polaris11_ce.bin
usr/lib/firmware/amdgpu/polaris11_ce_2.bin
usr/lib/firmware/amdgpu/polaris11_k2_smc.bin
usr/lib/firmware/amdgpu/polaris11_k_mc.bin
usr/lib/firmware/amdgpu/polaris11_k_smc.bin
usr/lib/firmware/amdgpu/polaris11_mc.bin
usr/lib/firmware/amdgpu/polaris11_me.bin
usr/lib/firmware/amdgpu/polaris11_me_2.bin
usr/lib/firmware/amdgpu/polaris11_mec.bin
usr/lib/firmware/amdgpu/polaris11_mec2.bin
usr/lib/firmware/amdgpu/polaris11_mec2_2.bin
usr/lib/firmware/amdgpu/polaris11_mec_2.bin
usr/lib/firmware/amdgpu/polaris11_pfp.bin
usr/lib/firmware/amdgpu/polaris11_pfp_2.bin
usr/lib/firmware/amdgpu/polaris11_rlc.bin
usr/lib/firmware/amdgpu/polaris11_sdma.bin
usr/lib/firmware/amdgpu/polaris11_sdma1.bin
usr/lib/firmware/amdgpu/polaris11_smc.bin
usr/lib/firmware/amdgpu/polaris11_smc_sk.bin
usr/lib/firmware/amdgpu/polaris11_uvd.bin
usr/lib/firmware/amdgpu/polaris11_vce.bin
usr/lib/firmware/amdgpu/polaris12_ce.bin
usr/lib/firmware/amdgpu/polaris12_ce_2.bin
usr/lib/firmware/amdgpu/polaris12_k_mc.bin
usr/lib/firmware/amdgpu/polaris12_k_smc.bin
usr/lib/firmware/amdgpu/polaris12_mc.bin
usr/lib/firmware/amdgpu/polaris12_me.bin
usr/lib/firmware/amdgpu/polaris12_me_2.bin
usr/lib/firmware/amdgpu/polaris12_mec.bin
usr/lib/firmware/amdgpu/polaris12_mec2.bin
usr/lib/firmware/amdgpu/polaris12_mec2_2.bin
usr/lib/firmware/amdgpu/polaris12_mec_2.bin
usr/lib/firmware/amdgpu/polaris12_pfp.bin
usr/lib/firmware/amdgpu/polaris12_pfp_2.bin
usr/lib/firmware/amdgpu/polaris12_rlc.bin
usr/lib/firmware/amdgpu/polaris12_sdma.bin
usr/lib/firmware/amdgpu/polaris12_sdma1.bin
usr/lib/firmware/amdgpu/polaris12_smc.bin
usr/lib/firmware/amdgpu/polaris12_uvd.bin
usr/lib/firmware/amdgpu/polaris12_vce.bin
Rx0
()
Ответ на: комментарий от Meyer

но до этого придется созерцать черный экран.

Т.е. freedos загрузить и увидеть командую строку не получится ? :) Я думаю все режимы совместимости c vga остались, раньше какой-то был vesa mode способный выводить больше 256 цветов, так что он все увидит, пусть и в не родном разрешении.

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

Т.е. freedos загрузить и увидеть командую строку не получится ? :) Я думаю все режимы совместимости c vga остались, раньше какой-то был vesa mode способный выводить больше 256 цветов, так что он все увидит, пусть и в не родном разрешении.

Должно получится, но в случае с линуксом (если загрузился amdgpu и идет попытка инициализировать фреймбуфер) будет чОрный экран.

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

Скопипасил твои команды:

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 19.10
Release:	19.10
Codename:	eoan
$ lsinitramfs /boot/initrd.img-$(uname -r) | grep polaris
$ 
$ lsinitramfs /boot/initrd.img-$(uname -r) | grep polaris | wc -l
0
$ lsinitramfs /boot/initrd.img-$(uname -r) | grep amdgpu | wc -l
0
$ lsinitramfs /boot/initrd.img-$(uname -r) | grep vega | wc -l
0

Что я делаю не так?

Aber ★★★★★
()
Ответ на: комментарий от Rx0
$ uname -a
Linux asus-fx 5.3.0-26-generic #28-Ubuntu SMP Wed Dec 18 05:37:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ uname -r
5.3.0-26-generic
Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 1)
Ответ на: комментарий от Aber

Дефолт использую, а ты какое?

У меня свое дерево основанное на текущем mainline + собственные наработки + наработки других разработчиков которые еще не вошли в ядро или вообще могут никогда не войти.

$ uname -a
Linux rx0 5.5.0-trixy-sb #202001190001 TRIXY SMP Sun Jan 19 07:49:27 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ systemd-analyze 
Startup finished in 5.987s (kernel) + 24.827s (userspace) = 30.815s 
graphical.target reached after 24.817s in userspace
Rx0
()

Парни, парни! Всё получилось! А всего-то надо было, CONFIG_AMDGPU=m сделать модулем! Теперь я успешный АМуДэ — Боярин..

Загрузка теперь выглядит так: загружается ядро, консоль не переключается в графический режим EFI, затем ядро пытается загрузить модуль AMDGPU, и когда она его загружает, тогда уже экран гаснет на пол секунды, и просыпается уже графоний, подгрузив фирмварь. Так-то.

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

Крута конечно, но загрузка почему так долго?

$ systemd-analyze 
Startup finished in 6.422s (firmware) + 3.102s (loader) + 2.430s (kernel) + 8.042s (userspace) = 19.997s 
graphical.target reached after 8.031s in userspace

Это дефолтный дистрибутив на ноуте с 3550h и ssd.

Aber ★★★★★
()

Выставляем загружаться CONFIG_AMDGPU=m как модуль. Большие ничего исправлять не нужно.

Ты забыл сказать что ты еще взял ядро последний стейбл (на скриншоте видно) и изначально допустил ошибку при конфигурировании ядра загнав модуль amdgpu в ядро (не модулем).

Удачи! )

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

Крута конечно, но загрузка почему так долго?

Это не долго. ) Для того что-бы понять надо видеть мой dmesg и бут лог. У меня много чего для работы грузится и для тестов.

Rx0
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.