Bug 39872 - Не работает "из коробки" на Baikal-M, rock pi, odroid
Summary: Не работает "из коробки" на Baikal-M, rock pi, odroid
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: xorg-server (show other bugs)
Version: unstable
Hardware: aarch64 Linux
: P5 normal
Assignee: Valery Inozemtsev
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-04-05 09:31 MSK by Alexey Sheplyakov
Modified: 2021-05-10 11:55 MSK (History)
3 users (show)

See Also:


Attachments
лог попытки запуска Xorg (5.19 KB, text/x-log)
2021-04-05 09:31 MSK, Alexey Sheplyakov
no flags Details
Лог удачного запуска патченного Xorg на Baikal-M (29.48 KB, text/x-log)
2021-04-05 10:19 MSK, Alexey Sheplyakov
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Alexey Sheplyakov 2021-04-05 09:31:05 MSK
Created attachment 9264 [details]
лог попытки запуска Xorg

[   159.146] (II) xfree86: Adding drm device (/dev/dri/card1)
[   159.150] (II) systemd-logind: got fd for /dev/dri/card1 226:1 fd 12 paused 0
[   159.152] (II) xfree86: Adding drm device (/dev/dri/card0)
[   159.155] (II) systemd-logind: got fd for /dev/dri/card0 226:0 fd 13 paused 0
[   159.165] (II) no primary bus or device found
[   159.165]    falling back to /sys/devices/platform/soc/2a200000.gpu/drm/card1
[   159.165] (II) LoadModule: "glx"
[   159.174] (II) Loading /usr/lib64/X11/modules/extensions/libglx.so
[   159.185] (II) Module glx: vendor="X.Org Foundation"
[   159.185]    compiled for 1.20.10, module version = 1.0.0
[   159.186]    ABI class: X.Org Server Extension, version 10.0
[   159.186] (==) Matched modesetting as autoconfigured driver 0
[   159.186] (==) Matched fbdev as autoconfigured driver 1
[   159.187] (==) Assigned the driver to the xf86ConfigLayout
[   159.187] (II) LoadModule: "modesetting"
[   159.189] (II) Loading /usr/lib64/X11/modules/drivers/modesetting_drv.so
[   159.193] (II) Module modesetting: vendor="X.Org Foundation"
[   159.193]    compiled for 1.20.10, module version = 1.20.10
[   159.194]    Module class: X.Org Video Driver
[   159.194]    ABI class: X.Org Video Driver, version 24.1
[   159.194] (II) LoadModule: "fbdev"
[   159.196] (II) Loading /usr/lib64/X11/modules/drivers/fbdev_drv.so
[   159.198] (II) Module fbdev: vendor="X.Org Foundation"
[   159.198]    compiled for 1.20.7, module version = 0.5.0
[   159.198]    Module class: X.Org Video Driver
[   159.198]    ABI class: X.Org Video Driver, version 24.1
[   159.199] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
[   159.200] (II) FBDEV: driver for framebuffer: fbdev
[   159.201] (WW) Falling back to old probe method for modesetting
[   159.201] (II) modeset(0): using default device
[   159.201] (WW) Falling back to old probe method for fbdev
[   159.202] (II) Loading sub module "fbdevhw"
[   159.202] (II) LoadModule: "fbdevhw"
[   159.203] (II) Loading /usr/lib64/X11/modules/libfbdevhw.so
[   159.206] (II) Module fbdevhw: vendor="X.Org Foundation"
[   159.206]    compiled for 1.20.10, module version = 0.0.2
[   159.206]    ABI class: X.Org Video Driver, version 24.1
[   159.207] (II) FBDEV(1): using default device
[   159.207] (II) modeset(G0): using drv /dev/dri/card0
[   159.208] (EE) 
Fatal server error:
[   159.208] (EE) Cannot run in framebuffer mode. Please specify busIDs        for all framebuffer devices
[   159.209] (EE) 
[   159.209] (EE) 
Please consult the The X.Org Foundation support 
         at http://wiki.x.org
 for help. 
[   159.210] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.

Многие ARM SoC имеют два видео устройства. Одно из них умеет из framebuffer сформировать (цифровой) видеосигнал, а второе - умножать матрицы (OpenGL ES).
Причем второе устройство видеовыходов не имеет.

Xorg пытается наугад выбрать одно из двух устройств и ошибается: 

[   159.165] (II) no primary bus or device found
[   159.165]    falling back to /sys/devices/platform/soc/2a200000.gpu/drm/card1

(на самом деле нужно было взять 30260000.vdu_hdmi/drm/card0), после чего случается облом

[   159.199] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
[   159.200] (II) FBDEV: driver for framebuffer: fbdev
[   159.201] (WW) Falling back to old probe method for modesetting
[   159.201] (II) modeset(0): using default device
[   159.201] (WW) Falling back to old probe method for fbdev
[   159.202] (II) Loading sub module "fbdevhw"
[   159.202] (II) LoadModule: "fbdevhw"
[   159.203] (II) Loading /usr/lib64/X11/modules/libfbdevhw.so
[   159.206] (II) Module fbdevhw: vendor="X.Org Foundation"
[   159.206]    compiled for 1.20.10, module version = 0.0.2
[   159.206]    ABI class: X.Org Video Driver, version 24.1
[   159.207] (II) FBDEV(1): using default device
[   159.207] (II) modeset(G0): using drv /dev/dri/card0
[   159.208] (EE) 
Fatal server error:
[   159.208] (EE) Cannot run in framebuffer mode. Please specify busIDs        for all framebuffer devices
[   159.209] (EE) 
[   159.209] (EE) 
Please consult the The X.Org Foundation support 
         at http://wiki.x.org
 for help. 
[   159.210] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
Comment 1 Alexey Sheplyakov 2021-04-05 09:40:30 MSK
В качестве костыля можно подложить следующий xorg.conf (для Baikal-M):

Section "ServerFlags"
        Option  "AutoAddGPU" "off"
EndSection

Section "OutputClass"
        Identifier "BaikalM"
        MatchDriver "baikal_vdu_drm"
        Driver "modesetting"
        Option "PrimaryGPU" "true"
EndSection


Но тогда для каждой платы надо гадать, как называется ее видеодрайвер.
Comment 2 Alexey Sheplyakov 2021-04-05 10:06:59 MSK
Решил научить xorg при поиске устройств игнорировать карты, у которых нет видеовыходов. Потом обнаружил, что добрые люди до меня уже научили, и еще лучше, чем я:

https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/481

#268938 TESTED #1 [test-only] sisyphus xorg-server.git=1.20.10-alt3


И оно таки работает:

[  3267.678] (II) xfree86: Adding drm device (/dev/dri/card1)
[  3267.682] (II) systemd-logind: got fd for /dev/dri/card1 226:1 fd 12 paused 0
[  3267.682] (DB) /dev/dri/card1 has 0 connectors
[  3267.684] (II) xfree86: Adding drm device (/dev/dri/card0)
[  3267.687] (II) systemd-logind: got fd for /dev/dri/card0 226:0 fd 13 paused 0
[  3267.688] (DB) /dev/dri/card0 has 1 connectors
[  3267.696] (II) Choose /sys/devices/platform/soc/30260000.vdu_hdmi/drm/card0 as primary device
[  3267.696] (II) LoadModule: "glx"
[  3267.699] (II) Loading /usr/lib64/X11/modules/extensions/libglx.so
[  3267.707] (II) Module glx: vendor="X.Org Foundation"
[  3267.707]    compiled for 1.20.10, module version = 1.0.0
[  3267.707]    ABI class: X.Org Server Extension, version 10.0
[  3267.707] (==) Matched modesetting as autoconfigured driver 0
[  3267.708] (==) Matched fbdev as autoconfigured driver 1
[  3267.708] (==) Assigned the driver to the xf86ConfigLayout
[  3267.708] (II) LoadModule: "modesetting"
[  3267.710] (II) Loading /usr/lib64/X11/modules/drivers/modesetting_drv.so
[  3267.711] (II) Module modesetting: vendor="X.Org Foundation"
[  3267.711]    compiled for 1.20.10, module version = 1.20.10
[  3267.712]    Module class: X.Org Video Driver
[  3267.712]    ABI class: X.Org Video Driver, version 24.1
[  3267.712] (II) LoadModule: "fbdev"
[  3267.714] (II) Loading /usr/lib64/X11/modules/drivers/fbdev_drv.so
[  3267.715] (II) Module fbdev: vendor="X.Org Foundation"
[  3267.715]    compiled for 1.20.7, module version = 0.5.0
[  3267.716]    Module class: X.Org Video Driver
[  3267.716]    ABI class: X.Org Video Driver, version 24.1
[  3267.716] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
[  3267.717] (II) FBDEV: driver for framebuffer: fbdev
[  3267.718] (II) modeset(0): using drv /dev/dri/card0
[  3267.718] (WW) Falling back to old probe method for fbdev
[  3267.718] (II) Loading sub module "fbdevhw"
[  3267.719] (II) LoadModule: "fbdevhw"
[  3267.720] (II) Loading /usr/lib64/X11/modules/libfbdevhw.so
[  3267.721] (II) Module fbdevhw: vendor="X.Org Foundation"
[  3267.721]    compiled for 1.20.10, module version = 0.0.2
[  3267.722]    ABI class: X.Org Video Driver, version 24.1
[  3267.723] (II) modeset(0): Creating default Display subsection in Screen section
        "Default Screen Section" for depth/fbbpp 24/32
[  3267.723] (==) modeset(0): Depth 24, (==) framebuffer bpp 32
[  3267.723] (==) modeset(0): RGB weight 888
[  3267.724] (==) modeset(0): Default visual is TrueColor
[  3267.723] (==) modeset(0): Depth 24, (==) framebuffer bpp 32
[  3267.723] (==) modeset(0): RGB weight 888
[  3267.724] (==) modeset(0): Default visual is TrueColor
[  3267.724] (II) Loading sub module "glamoregl"
[  3267.724] (II) LoadModule: "glamoregl"
[  3267.725] (II) Loading /usr/lib64/X11/modules/libglamoregl.so
[  3267.738] (II) Module glamoregl: vendor="X.Org Foundation"
[  3267.738]    compiled for 1.20.10, module version = 1.0.1
[  3267.739]    ABI class: X.Org ANSI C Emulation, version 0.4
[  3268.345] (II) modeset(0): glamor X acceleration enabled on Mali T620 (Panfrost)
[  3268.346] (II) modeset(0): glamor initialized
Comment 3 Alexey Sheplyakov 2021-04-05 10:19:17 MSK
Created attachment 9265 [details]
Лог удачного запуска патченного Xorg на Baikal-M
Comment 4 Anton Farygin 2021-04-05 10:32:41 MSK
Вот это изменение от добрых людей крайне желательно проверить ещё и на x86 архитектурах - тут тоже часто встречается конфигурация, когда несколько видеокарт разного производителя.
Comment 5 Ivan A. Melnikov 2021-04-05 12:50:49 MSK
На моём боевом ноуте Xorg запустился (x86_64, intel вместо видюхи, сегодняшний Сизиф + #268938, ядро 5.11.11-un-def-alt1). Пока разницы с alt2 не вижу.
Comment 6 Anton Farygin 2021-04-05 13:38:35 MSK
Разница может вылезти в случае одновременной установки нескольких видеокарт разных производителей.
Comment 7 Alexey Sheplyakov 2021-04-05 15:06:07 MSK
(In reply to Anton Farygin from comment #6)
> Разница может вылезти в случае одновременной установки нескольких видеокарт
> разных производителей.

TL;DR: никакой разницы не ожидается, но проверить все равно надо.

На x86 видеокарты в основном PCI-E. Даже те, которые находятся на одном кристалле или в одном корпусе с процессором. Поэтому [1] их поиском и разбором, кто главнее, занимается xf86PciProbe [2]. И только если не нашлось PCI(-E) карт, xf86platformPrimary попытается что-то сделать. Но на x86 нет "platform" видеокарт, поэтому xf86_num_platform_devices = 0, и xf86platformPrimary ничего не сделает.

[1] https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/hw/xfree86/common/xf86Bus.c#L223xf86platformPrimary
[2] https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/hw/xfree86/common/xf86pciBus.c#L89
[3] http://git.altlinux.org/people/asheplyakov/packages/xorg-server.git?p=xorg-server.git;a=blob;f=hw/xfree86/common/xf86platformBus.c;h=33b2635040ed45c8f54710ce4489e26d00197f89;hb=229a953f5921ad29abdcc2534dc5a93abc9ca192#l746
Comment 8 Alexey Sheplyakov 2021-05-10 11:55:39 MSK
Исправлено в xserver-xorg 1.20.10-alt3