Modifier le fichier EDID pour forcer le format RGB en HDR avec le pilote AMDGPU

Les données d'identification d'affichage étendues (en anglais Extended Display Identification Data, EDID) sont un format de métadonnées permettant aux périphériques d'affichage de décrire leurs capacités telles que la résolution, la taille de l'affichage, la synchronisation, la profondeur du bit et la fréquence de mise à jour. Ces données sont écrite dans un fichier edid sous Linux. Dans ce fichier se trouve également la propriété d'espace colorimétrique. Un bug du pilote AMDGPUf est lié à ce fameux espace colorimétrique. Quand on active le HDR sur un écran compatible, on peut se retrouver avec des couleurs roses ou vertes car le format d'espace colorimétrique utilisé par le pilote AMDGPU est YCbCr alors que le format attendu par l'écran est RGB. Ce qui provoque l'affichage de couleurs foireuses quand on active le HDR. Le seul moyen de modifier le format de l'espace colorimétrique utilisé par le pilote AMDGPU est donc de modifier le fichier edid.bin.

Vous aurez besoin d'installer le logiciel wdedid pour pouvoir modifier le fichier edid.bin.

La première étape consiste à récupérer le fichier edid utilisé pour votre écran. Ces fichiers se trouve dans le répertoire /sys/class/drm/*/edid. Je vais partir du principe que vous avez deux écrans connectés car ce bug concerne souvent les écran TV connecté au PC. Pour savoir quel fichier correspond à votre écran, débranchez ou coupez l'alimentation de votre TV et tapez la commande suivante :

xrandr --props

. Ca va vous afficher le port HDMI sur lequel est branché votre écran de bureau, par exemple :

Screen 0: minimum 16 x 16, current 3590 x 1080, maximum 32767 x 32767
HDMI-A-2 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 299mm

Branchez votre TV et relancez la commande pour savoir sur quel port HDMI est branché votre TV (un port de plus va s'ajouter à la liste).

Dans mon cas, ma TV est branchée sur le port HDMI-A-1, donc il faudra remplacer ce port par le votre dans les commandes qui vont suivre.

Pour trouvez le fichier edid de votre écran, tapez la commande suivante :

sudo find /sys/devices/pci*/*/*/*/*/*HDMI-A-1 -name "*edid*"

Si cette commande vous renvoi plusieurs résultats, il faut garder celui qui a cardX (avec X pouvant être 0, 1, etc) dans le chemin.

Faites une copie de ce fichier dans le répertoire /usr/lib/firmware/edid/ (vous devez créer le dossier edid) et renommez le edid.bin.

On va utiliser le logiciel wxedid pour modifiez le fichier edid. Tapez la commande suivante :

sudo wxedid /usr/lib/firmware/edid/edid.bin

Voici ce que vous allez devoir modifier :

  • Dans SPF : Supported features > vsig_format : remplacez 0b01 par 0b00
  • Dans CHD : CEA-861 header : changez la valeur de YCbCr420 et YCbCr444 à 0
  • Dans VSD : Vendor Specific Data Block : changez la valeur de DC_Y444 à 0

Dans le menu Options, cliquez sur Assemble EDID pour appliquer les modifications.

Le but de ces modifications est de faire croire que l'écran ne supporte pas le format YCbCr afin de forcer l'utilisation du mode RGB.

Pour que le système utilise ce fichier il va falloir modifier le fichier grub. Ouvrez le avec la commande suivante :

sudo nano /etc/default/grub

A la ligne GRUB_CMDLINE_LINUX_DEFAULT, ajoutez drm.edid_firmware=HDMI-A-1:edid/edid.bin avant le guillemet de fin. L'écran branché sur le port HDMI-A-1 utilisera le fichier EDID /usr/lib/firmware/edid/edid.bin

Sauvez avec CTRL + o puis quitter avec CTRL +x, et lancez la commande suivante pour appliquer la modification :

sudo grub-mkconfig -o /boot/grub/grub.cfg

Redémarrez le PC puis activez le HDR.

Si l'écran le supporte, vous pouvez également forcer l'utilisation du fichier pour tester avec la commande :

echo 1 > /sys/kernel/debug/dri/0000\:09\:00.0/HDMI-A-1/trigger_hotplug
Vous pourriez laisser un commentaire si vous étiez connecté.
  • gnu_linux/modifier_fichier_edid.txt
  • Dernière modification : 2025/10/12 10:05
  • de fate