Project

General

Profile

Bug #2511

[xf86-video-ati]: X can't start

pisechka - 12 months ago - . Updated 4 months ago.

Status:
confirmed
Priority:
bug
Assignee:
% Done:

0%


Description

After update and reboot on second laptop with radeon hd6310, X cant start and tell in startx:

(II) [KMS] Kernel modesettings enabled./usr/lib/Xorg: symbol lookup error: /usr/lib/xorg/modules/drivers/radeon_drv.so: undefined symbol: exaGetPixmapDriverPrivatexinit: giving upxinit: unable to connect to X server: Connection refusedxinit:server error


Related issues

Related to Packages - Bug #2517: xf86-video-ati breaks xorgduplicate

Actions
Related to Packages - Bug #2702: xf86-video-atiduplicate

Actions

History

#1

Updated by v3d 11 months ago

#2

Updated by bill-auger 11 months ago

  • Related to Bug #2517: xf86-video-ati breaks xorg added
#3

Updated by bill-auger 11 months ago

possibly related to #2517

#4

Updated by bill-auger 11 months ago

  • Assignee set to Megver83
#5

Updated by bill-auger 4 months ago

#6

Updated by Megver83 4 months ago

What I'm suspecting is that it is a problem of X, not a firmware not kernel problem

symbol lookup error: /usr/lib/xorg/modules/drivers/radeon_drv.so: undefined symbol: exaGetPixmapDriverPrivatexinit

There you have it. Sometimes updates break stuff. Please, try out the latest version now to know if the issue persists.

#7

Updated by Megver83 4 months ago

I found the following after quick research:

https://forums.gentoo.org/viewtopic-p-8399340.html (unsolved)
https://artixlinux.org/forum/index.php?topic=133.msg909 (solved, but not exactly the same issue)
https://bbs.archlinux.org/viewtopic.php?id=253719 (solved, the same issue, but the OP installed nonfree things. However, the solution may be applicable to Parabola, and does not require any nonfree software)
https://gitlab.freedesktop.org/xorg/driver/xf86-video-ati/issues/188 (looks like this guy managed to make exaGetPixmapDriverPrivate available)

I found others, but they lacked information and were unsolved

#8

Updated by bill-auger 4 months ago

  • Status changed from unconfirmed to info needed
  • Subject changed from X can't start to [xf86-video-ati]: X can't start
#9

Updated by GNUtoo 4 months ago

I didn't have enough time to start trying to fix that.

I've put more info on that bug in a place where multiple FSDG distribution could collaborate: https://libreplanet.org/wiki/Group:Hardware/research/gpu/radeon

This issue will most probably affect Trisquel and other FSDG compliant distributions.

#10

Updated by Megver83 4 months ago

  • Status changed from info needed to confirmed

It looks like Hyperbola fixed this
https://git.hyperbola.info:50100/packages/core.git/commit/linux-libre-lts/radeon_hack.patch?id=88b37e5eb6d206c558d4e3ec5e116f3bb0ac3673

I've not tried the patch, could you try building linux-libre with it, pisechka? (or v3d, or anyone experiencing this issue) just clone the abslibre.git repo, cd to libre/linux-libre and put the patch in the source=() array. You don't need to do anything in prepare() since all patches are applied using a loop

Inside libre/linux-libre, download the patch:

$ wget https://git.hyperbola.info:50100/packages/core.git/plain/linux-libre-lts/radeon_hack.patch

I'll mark this issue as "confirmed", since it's already known: https://www.fsfla.org/pipermail/linux-libre/2016-July/003224.html

P.S: I'm not 100% sure if it is exactly the same issue from 2016, so please test the patch

#11

Updated by GNUtoo 4 months ago

Radeon Linux driver

I've looked at it and in linux-libre we have:

        if (ASIC_IS_DCE5(rdev)) {
                if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
                        r = ni_init_microcode(rdev);
                        if (r) {
                                DRM_ERROR("Failed to load firmware!\n");
                                return r;
                        }
                }

And that define is defined in radeon.h:

#define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS))

If someone has some GPU with CHIP_BARTS, and that it's confirmed to work, we could then send a patch in linux-libre for that.

The issue is that linux-libre requires to test the change on real hardware, so as I don't have a GPU of the "BARTS" family I didn't send a patch for that.

This patch would only make sure that the radeon kernel driver loads on GPUs of the "BARTS" family.

So modprobe radeon will work and is expected to show a text console, if Xorg or other display managers arent started.

Xorg

Once the kenrel driver is loaded fine (without error in dmesg), then we have some text console, but Xorg doesn't always work out of the box.

If I remember well, the issue was that for some chips, Xorg expects 3D acceleration to work and use it to accelerate 2D operations as well.

It's however possible to disable with the configuration that is present in the Libreplanet wiki. But as I mentioned before I didn't have the time to make it automatic for all radeon GPUs, else I would have tried to add it to Parabola.

We need to look more into it:
  • Does it make sense to disable that (Through "Option" "AccellMethod" "none") for all GPUs?
  • Can we select only the GPUs that are affected with some Match<something> ?
  • Is it possible to implement that symbol somehow in a way that can easily be maintained?
#12

Updated by GNUtoo 4 months ago

pisechka, does the radeon module loads fine?

Here's a way to check, that outputs the log, and send it to the radeon_modprobe.log (which it erases if it's already present). The commands have to be run as root:

rmmod radeon
dmesg -c
modprobe radeon
dmesg -c | tee radeon_modprobe.log

Here's an example of failure on one of my computers:

[root@m4a785t-m ~]# rmmod radeon
[root@m4a785t-m ~]# dmesg -c
[root@m4a785t-m ~]# modprobe radeon
[root@m4a785t-m ~]# dmesg -c
[   37.030692] [drm] radeon kernel modesetting enabled.
[   37.030833] radeon 0000:01:05.0: remove_conflicting_pci_framebuffers: bar 0: 0xa8000000 -> 0xafffffff
[   37.030836] radeon 0000:01:05.0: remove_conflicting_pci_framebuffers: bar 2: 0xb8100000 -> 0xb810ffff
[   37.030847] radeon 0000:01:05.0: remove_conflicting_pci_framebuffers: bar 5: 0xb8000000 -> 0xb80fffff
[   37.030849] radeon 0000:01:05.0: vgaarb: deactivate vga console
[   37.031248] [drm] initializing kernel modesetting (RS880 0x1002:0x9710 0x1002:0x0000 0x00).
[   37.031308] radeon 0000:01:05.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0x0000
[   37.031371] [drm:radeon_get_bios [radeon]] *ERROR* Unable to locate a BIOS ROM
[   37.031383] radeon 0000:01:05.0: Fatal error during GPU init
[   37.031385] [drm] radeon: finishing device.
[   37.031386] [TTM] Memory type 2 has not been initialized
[   37.040820] radeon: probe of 0000:01:05.0 failed with error -22

Here it fails to load due to a cause that is not related to this bugreport.

And when it is loaded you usually things in /sys/class/drm like that:

$ ls -l /sys/class/drm
total 0
lrwxrwxrwx 1 root root    0 25 mai   18:12 card0 -> ../../devices/pci0000:00/0000:00:02.0/drm/card0
lrwxrwxrwx 1 root root    0 25 mai   18:12 card0-DP-1 -> ../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1
lrwxrwxrwx 1 root root    0 25 mai   18:12 card0-DP-2 -> ../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-2
lrwxrwxrwx 1 root root    0 25 mai   18:12 card0-DP-3 -> ../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-3
lrwxrwxrwx 1 root root    0 25 mai   18:12 card0-HDMI-A-1 -> ../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1
lrwxrwxrwx 1 root root    0 25 mai   18:12 card0-HDMI-A-2 -> ../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-2
lrwxrwxrwx 1 root root    0 25 mai   18:12 card0-LVDS-1 -> ../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1
lrwxrwxrwx 1 root root    0 25 mai   18:12 card0-VGA-1 -> ../../devices/pci0000:00/0000:00:02.0/drm/card0/card0-VGA-1
lrwxrwxrwx 1 root root    0 25 mai   18:12 renderD128 -> ../../devices/pci0000:00/0000:00:02.0/drm/renderD128
-r--r--r-- 1 root root 4096 25 mai   18:12 version

Here it's my laptop with an Intel GPU, and you can see many card0-* entries for various connectors (HDMI, VGA, etc).

However when it fails, there is no card at all inside /sys/class/drm:

[root@m4a785t-m ~]# ls -la /sys/class/drm
total 0
drwxr-xr-x  2 root root    0  3 avril 03:59 .
drwxr-xr-x 54 root root    0 17 janv.  2001 ..
lrwxrwxrwx  1 root root    0  3 avril 04:05 ttm -> ../../devices/virtual/drm/ttm
-r--r--r--  1 root root 4096  3 avril 03:59 version

#13

Updated by GNUtoo 4 months ago

I forgot, the display is often black when the radeon kernel driver fails to load.

If you disable Xorg or don't enable it (you need to make sure that no display manager is loaded by the init system(systemd, openRC)), then you can boot and have a text console.

Then, after running "modprobe radeon" as root, the display is often black. The keyboard still works but you can't see what you type, so it's not very convenient without SSH.

#14

Updated by GNUtoo 4 months ago

If you can confirm that the kernel driver is loaded and works fine, then using the configuration from the libreplanet wiki radeon page can make it work.

To do that, add, add the following in /usr/share/X11/xorg.conf.d/10-radeon.conf:

Section "OutputClass" 
    Identifier "Radeon" 
    MatchDriver "radeon" 
    Driver "modesetting" 
    Option "AccelMethod" "none" 
EndSection

#15

Updated by GNUtoo 4 months ago

I also added the relevant information in the wiki in the ATI page.

Also available in: Atom PDF