EDID (Extended Display Identification Data) is metadata provided by a display to the operating system, to inform the later about supported resolutions, refresh rates, etc. It also provides defaults or recommendations for those values.
Some displays provide wrong EDID, resulting in bad default resolutions and refresh rates, as well as issues such as GPU memory clock being stuck resulting in enormous power draw during idle. This happens due to the driver not having time to clock down without causing flickering, due to wrong blank timing provided by EDID.
Additionally, modifying the EDID allows having the desired resolution and refresh rate set by deault in most programs, which usually take the default suggested by EDID, that is more often than not less than the display is capable of.
For those reasons it is very useful to load custom EDID.
/sys/class/drm/@GPU@-@DISPLAY@/edid,
e.g.
cat /sys/class/drm/card0-DP-1/edid > default.bin.
sys/kernel/debug/dri/@GPUNUM@/@DISPLAY@/edid_override
e.g.
cat @NEWEDIDFILE > sys/kernel/debug/dri/0/DP-1/edid_override.
Then replug the monitor and check if it worked.
/lib/firmware/edid/@FILE@,
e.g. /lib/firmware/edid/DP-1.bin.
drm.edid_firmware=@DISPLAY@:edid/@FILE@,@DISPLAY2@:edid/@FILE2@,
e.g.
drm.edid_firmware=DP-1:edid/DP-1.bin,DP-2:edid/DP-2.bin.
This can be done before compilation in
make menuconfig at
Processor type and features -> Built-in kernel command line
or in the bootloader settings.