AMD eGPU on Fedora 33 - No Screens Found

Hi,

I’ve got a laptop running Fedora 33, and a Razer Core X Chroma with an R9 390X GPU. I’m having trouble getting the GPU working though.

I’ve blacklisted the radeon driver, so that it uses amdgpu. I’ve set up egpu-switcher so that it activates my alternative xorg.conf on boot. I deliberately boot to runlevel 3 in order to see the error logs, and it works at that stage… But when I run startx, it crashes out saying “No screens found”. Despite this, when that monitor is on (with the correct input selected), it does display a black screen - I’m not sure if this is a black output or “no output”. But it knows that the monitor is plugged in, which it didn’t on the radeon driver.

I found something that said that it might need x11 to run as root, so I did the Xwrapper.config thing (just needs_root_rights = yes), but that doesn’t seem to have helped.

Could anyone point me in the right direction?

Hmmm. I think at this point this should Just Work out of the box with the Radeon driver, but it might need the newest kernel…

Isn’t the radeon driver old and out of date? I’m using amdgpu instead.
I’ve been updating my kernels regularly, so that’s not the issue…

With the radeon driver not blacklisted, I get this log when running startx:

[    41.764] 
X.Org X Server 1.20.10
X Protocol Version 11, Revision 0
[    41.764] Build Operating System:  5.7.11-200.fc32.x86_64 
[    41.764] Current Operating System: Linux localhost.localdomain 5.10.19-200.fc33.x86_64 #1 SMP Fri Feb 26 16:21:30 UTC 2021 x86_64
[    41.764] Kernel command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.10.19-200.fc33.x86_64 root=UUID=443fea9b-ec8a-41af-a847-eb4cdd14f443 ro rootflags=subvol=root resume=UUID=b6269a05-5ea8-4032-add8-a8fc31ece074 rhgb quiet 3
[    41.764] Build Date: 02 December 2020  12:00:00AM
[    41.764] Build ID: xorg-x11-server 1.20.10-1.fc33 
[    41.764] Current version of pixman: 0.40.0
[    41.764] 	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.
[    41.764] Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[    41.765] (==) Log file: "/var/log/Xorg.0.log", Time: Thu Mar  4 19:49:44 2021
[    41.766] (==) Using config file: "/etc/X11/xorg.conf"
[    41.766] (==) Using config directory: "/etc/X11/xorg.conf.d"
[    41.766] (==) Using system config directory "/usr/share/X11/xorg.conf.d"
[    41.767] (==) No Layout section.  Using the first Screen section.
[    41.767] (==) No screen section available. Using defaults.
[    41.767] (**) |-->Screen "Default Screen Section" (0)
[    41.767] (**) |   |-->Monitor "<default monitor>"
[    41.767] (==) No device specified for screen "Default Screen Section".
	Using the first device section listed.
[    41.767] (**) |   |-->Device "Device0"
[    41.767] (==) No monitor specified for screen "Default Screen Section".
	Using a default monitor configuration.
[    41.767] (==) Automatically adding devices
[    41.767] (==) Automatically enabling devices
[    41.767] (==) Automatically adding GPU devices
[    41.767] (==) Automatically binding GPU devices
[    41.767] (==) Max clients allowed: 256, resource mask: 0x1fffff
[    41.767] (==) FontPath set to:
	catalogue:/etc/X11/fontpath.d,
	built-ins
[    41.767] (==) ModulePath set to "/usr/lib64/xorg/modules"
[    41.767] (II) The server relies on udev to provide the list of input devices.
	If no devices become available, reconfigure udev or disable AutoAddDevices.
[    41.767] (II) Loader magic: 0x556414ea0b20
[    41.767] (II) Module ABI versions:
[    41.767] 	X.Org ANSI C Emulation: 0.4
[    41.767] 	X.Org Video Driver: 24.1
[    41.767] 	X.Org XInput driver : 24.1
[    41.767] 	X.Org Server Extension : 10.0
[    41.767] (++) using VT number 1

[    41.768] (II) systemd-logind: took control of session /org/freedesktop/login1/session/_31
[    41.769] (II) xfree86: Adding drm device (/dev/dri/card0)
[    41.769] (II) systemd-logind: got fd for /dev/dri/card0 226:0 fd 13 paused 0
[    41.769] (II) xfree86: Adding drm device (/dev/dri/card1)
[    41.770] (II) systemd-logind: got fd for /dev/dri/card1 226:1 fd 14 paused 0
[    41.772] (--) PCI:*(0@0:2:0) 8086:8a52:1028:08b0 rev 7, Mem @ 0x603d000000/16777216, 0x4000000000/268435456, I/O @ 0x00005000/64, BIOS @ 0x????????/131072
[    41.773] (--) PCI: (48@0:0:0) 1002:67b0:1462:2015 rev 128, Mem @ 0x80000000/268435456, 0x90000000/8388608, 0x9c900000/262144, I/O @ 0x00004000/256, BIOS @ 0x????????/131072
[    41.773] (II) "glx" will be loaded by default.
[    41.773] (II) LoadModule: "modesetting"
[    41.773] (II) Loading /usr/lib64/xorg/modules/drivers/modesetting_drv.so
[    41.773] (II) Module modesetting: vendor="X.Org Foundation"
[    41.773] 	compiled for 1.20.10, module version = 1.20.10
[    41.773] 	Module class: X.Org Video Driver
[    41.773] 	ABI class: X.Org Video Driver, version 24.1
[    41.773] (II) LoadModule: "glx"
[    41.774] (II) Loading /usr/lib64/xorg/modules/extensions/libglx.so
[    41.778] (II) Module glx: vendor="X.Org Foundation"
[    41.778] 	compiled for 1.20.10, module version = 1.0.0
[    41.778] 	ABI class: X.Org Server Extension, version 10.0
[    41.778] (II) LoadModule: "amdgpu"
[    41.778] (II) Loading /usr/lib64/xorg/modules/drivers/amdgpu_drv.so
[    41.781] (II) Module amdgpu: vendor="X.Org Foundation"
[    41.781] 	compiled for 1.20.8, module version = 19.1.0
[    41.781] 	Module class: X.Org Video Driver
[    41.781] 	ABI class: X.Org Video Driver, version 24.1
[    41.781] (II) modesetting: Driver for Modesetting Kernel Drivers: kms
[    41.781] (II) AMDGPU: Driver for AMD Radeon:
	All GPUs supported by the amdgpu kernel driver
[    41.781] (WW) Falling back to old probe method for modesetting
[    41.781] (EE) AMDGPU(0): amdgpu_device_initialize failed
[    41.781] (II) AMDGPU(1): [KMS] Kernel modesetting enabled.
[    41.781] (EE) AMDGPU(1): [drm] failed to set drm interface version.
[    41.781] (II) modeset(G0): using drv /dev/dri/card0
[    41.781] (II) modeset(G1): using drv /dev/dri/card1
[    41.781] (EE) Screen 0 deleted because of no matching config section.
[    41.781] (II) UnloadModule: "amdgpu"
[    41.781] (EE) Screen 0 deleted because of no matching config section.
[    41.781] (II) UnloadModule: "amdgpu"
[    41.781] (EE) Device(s) detected, but none match those in the config file.
[    41.781] (EE) 
Fatal server error:
[    41.781] (EE) no screens found(EE) 
[    41.781] (EE) 
Please consult the Fedora Project support 
	 at http://wiki.x.org
 for help. 
[    41.781] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
[    41.781] (EE) 
[    41.816] (EE) Server terminated with error (1). Closing log file.

Reading this a bit more carefully (it’s a tiny 4k screen so I was skimming most of this before), I think this might be the issue?
(EE) AMDGPU(1): [drm] failed to set drm interface version.

Possibly it should work with either? I’m pretty sure the radeon driver supports the R9 cards (but I’m not a deep GPU expert). I think think the R9 R390X is a “HAWAII” GPU (based on Radeon R9 390 Series: Return To Hawaii - AMD Launches Retail Radeon 300 Series: A Prelude To Fury), and the radeon man page lists that as supported hardware. Possibly amdgpu also works.

I found this bug Radeonsi on Grenada cards (r9 390) exceptionally unstable and poorly performing (#1222) · Issues · Mesa / mesa which was closed a month ago as having been a kernel issue. This leads me to believe that it all should work out of the box, without an alternative xorg.conf or anything.

What happened that set you down this path? An additional complication with the debug steps you’re taking is that by default Fedora Workstation is going to use Wayland, not X.org, and startx only knows about the latter. To run GNOME under wayland, try XDG_SESSION_TYPE=wayland dbus-run-session gnome-session.

What happens if you boot with a Fedora 34 nightly pre-release image, or from this official Fedora 33 respin?

Oh, also: is this with an external monitor, or is it not finding the laptop’s built-in monitor?

Oh, man, I’ve been a bit dumb about giving you context here ^^;
So I’m actually using KDE, not GNOME, which is why I’m messing with X and not wayland.

Unfortunately I don’t really know much about AMD cards - I got this one from a friend because she had it lying around and GPUs are crazy expensive at the moment. I think you’re right that it’s supported on both drivers, as the system seems to be happy using the radeon driver by default and the amdgpu driver as a backup (if I don’t try to specify which one to use.

This is with an external monitor plugged in, but nothing shows on it so I have to do all the debugging on the internal. Once it’s working, my intention is to use just the external with the eGPU, as this is really just for games.

I’ll give those two images a try in the morning, but I just wanted to clear that up :slight_smile:

Well, that was interesting. I tried the second link you suggested, the 33 respin, and you were right that it detected and tried to use the egpu without problems. But although it was aware that the external display existed and was trying to output to it (and interestingly xrandr didn’t show disconnected displays like it does for me normally), the screen itself didn’t detect any signal coming from the GPU.

With my regular install, it turns on the display but sends no video. But this seems to be the opposite - it’s trying to send a video signal, but the monitor doesn’t think that the connected socket is even on. Very confusing…

So, I decided to try just ditching x11 and KDE, and installing GNOME specifically for the egpu. I’m not a fan of GNOME but I’m only really using this setup once in a while to play intensive games, so it’s an okay compromise.
And it seems to be working! I set up a little script to launch GNOME from runlevel 3, which also sets DRI_PRIME, and although it still claims to be rendering with the internal still, running intensive games shows that it’s definitely not. So we’re all good :smiley:

The script I used, for reference, is just a shell script with:

export DRI_PRIME=1
XDG_SESSION_TYPE=wayland dbus-run-session gnome-session

EDIT:
Nevermind, I spoke too soon. This initially seemed to work, but I guess it was just because I was coming from a cold boot, so nothing was close to throttling :frowning: