The drm subsystem creates additional modes beyond what EDID makes available
Brief summary of the problem:
Caveat: This may be a broader issue with some component of the drm subsystem, but the kernel bugzilla asked I submit this to this bugzilla first instead in case it's amdgpu specific.
Using an EDID written to only allow for a single fixed resolution numerous additional smaller resolutions are added, without regard to aspect ratio and by only changing the visible-pixel settings on the one advanced timing mode included in the EDID.
Linux is the only OS that shows this behavior, and these modes are visible from the CLI using utilities such as the attached output from drm_info showing 1680x1050, 1280x1024, 1440x900, 1280x800, 1280x720, 1024x768, 800x600, and 640x480 modes added, indicating these are being generated by something inside the drm subsystem.
In Windows and on other systems where I've used similar EDIDs there should only be a single mode available. In this case I noticed that it was re-using the same advanced timing adjustments I have for the 120Hz 1080p mode for all the smaller ones but adjusting only the 'visible pixels' settings for the smaller resolutions, indicating these were being generated somewhere in the DRM subsystem or AMDGPU driver itself as the 'allowed monitor ranges' are tuned to only a 1-value window around the intended resolution.
I'm applying this custom EDID via drm.edid_firmware=eDP:edid.bin
and can confirm it is loading:
[ 3.302176] [drm] Got external EDID base block and 0 extensions from "edid.bin" for connector "eDP-1"
Hardware description:
- CPU: 5800H
- GPU: 06:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [1002:1638] (rev c5)
- System Memory: 64GB (2 * 32GB G.Skill F4-3200C22-32GRS's)
- Display(s): Built-in 1080p144 panel.
- Type of Display Connection: eDP
System information:
- Distro name and Version: Ubuntu 22.04.1 LTS
- Kernel version: Linux legion 5.15.0-56-generic #62 (closed)-Ubuntu SMP Tue Nov 22 19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
- Custom kernel: N/A
- AMD official driver version: N/A
How to reproduce the issue:
Load the above EDID via properly written drm.edid_firmware argument, note additional modes created somewhere in the kernel in the output from drm_info or other inspection methods.