Forcing GPU to use a custom EDID

Greetings,
I have installed Fedora Silverblue 42 on my machine but have encountered a problem with incorrect screen resolution and refresh rate, which I assume originates from my GPU not reading any EDIDs from connected displays.

Description of the problem

When installing Fedora Silverblue 42 on my system with a Radeon RX 6600 XT the only screen resolution and refresh rate is 800x600 with 60 Hz.
This is independent of the monitor (I have tried multiple).

When switching to another GPU (Nvidia GTX 960) everything seems to work fine with correct resolutions.

I found that for the Nvidia GPU ls /sys/class/drm/ has folders like card0-DP-1 with a non empty edid (checked by using cat /sys/class/drm/card0-DP-1/edid) while for the AMD GPU the folder is named card0-Unknown-1 and contains an empty edid file.
Because of this my current assumption is that the AMD GPU is in someway broken and can’t read the EDIDs of displays correctly.
Because of this I want to try to force the AMD GPU to use the correct EDID (to avoid having to buy a new GPU) but I am not sure how to achieve this in Silverblue.

My idea was to just copy the EDID read with the Nvidia GPU and somehow apply this to the AMD GPU.
But I am not sure where I actually need to apply the EDID to and how to actually make Silverblue use that EDID.

Attempted solution

With the help of search engines and AI I have tried the following, but this did not really work out:

  1. Copy the EDID when using the Nvidia GPU cp /sys/class/drm/card0-DP-1/edid ~/my_monitor.edid
  2. Create an rpm package for the EDID (using fpm GitHub - jordansissel/fpm: Effing package management! Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity.)
mkdir -p ~/edid-rpm/lib/firmware/edid
cp my_monitor.edid ~/edid-rpm/lib/firmware/edid/

cd ~/edid-rpm
fpm -s dir -t rpm -n custom-edid-firmware .
  1. Install the package rpm-ostree install ./custom-edid-firmware-*.rpm
  2. Enable initramfs (I dont really know what that is) rpm-ostree initramfs --enable
  3. Updating kernel arguments rpm-ostree kargs --editor by adding drm.edid_firmware=edid/my_monitor.edid
  4. Reboot

After doing this: With the Nvidia GPU the system work as before, with the AMD GPU the system now seemed to boot with the correct resolution but freezed at the actual booting (Fedora logo with spinning circle at the bottom of the screen).

Additional information

Here is some more of my system information (collected by using fastfetch inside a toolbox)

OS: Fedora Linux 42 (Toolbx Container Image) x86_64
Host: B650E PG Riptide WiFi
Kernel: Linux 6.16.7-200.fc42.x86_64
Display (Unknown 10"): 800x600 @ 60 Hz in 10"
DE: GNOME 48.4
WM: Mutter (Wayland)
WM Theme: Adwaita
CPU: AMD Ryzen 9 7900X (24) @ 5.74 GHz
GPU 1: AMD Radeon RX 6600 XT
GPU 2: AMD Raphael

Thanks for any help in advance!

There have been a few discussions of low refresh rates and resolutions here on Discussion recently. Unfortunately I can’t remember the outcomes - so have a search and a browse these forums and you might find the answer. I’d tell you straigt away if only I could remember :slight_smile:

Welcome to Fedora! And do post your outcomes here, it will help others. Nice and comprehensive first post BTW.