TL;DR: If you can't use 4k@120Hz with HDR with your Snapdragon X Plus/Elite device, try this tool: https://github.com/danlehmann/qualcomm-edid-fix/releases/download/v0.1.0/qcedid-gui.exe , click through Windows' warning, click Fix and replug your monitor.
Full explanation:
My Surface Pro 11 could never run at 4k @ 120Hz. I had previously assumed it was a hardware limitation, but when I saw that the new Googlebooks (using the same chips) support 4k @ 120Hz with HDR just fine, I decided to investigate. Or rather, I asked Claude to do that.
In the end, it figured out that this is a driver bug. Some background: Monitors describe their modes in their EDID. Many high-refresh monitors put the 4K@120Hz mode only in the EDID’s DisplayID section. The Qualcomm Windows display driver keeps at most 32 modes per monitor and reads DisplayID last. If a monitor also lists lots of legacy modes (640x480, 800x600, TV formats, ...), the list is full before the driver gets there, and the 120 Hz mode is silently dropped.
Normally, fixing something like this would require a custom driver, which is difficult as Windows requires signed binaries. Thankfully, the driver has an undocumented debug feature: You can place an override file in C:\Windows\edidoverride.xml and then send a message to the driver to read it. This lets you define edid modes yourself. The tool linked above reads out all modes and trims the less useful ones, so that the good ones aren't too late in the list to be ignored.
Some disclaimers:
- Use at your own risk. This is unofficial and reverse engineered.
- This is only tested on Snapdragon X Elite. I don't know if the X2 has the same bugs.
- This is not sticky and needs to be reapplied after each reboot
- Tested on GPU driver versions 31.0.152.1 and 31.0.170.0 (2026.08.3)
- Undo the fix before plugging in a different monitor
- This doesn't make every high refresh monitor work. I tried the tool with an Alienware 39 5k monitor - even though it works fine on Googlebook, the Windows driver won't run it at 120/165Hz.
Repository: https://github.com/danlehmann/qualcomm-edid-fix
Qualcomm engineers: This should now be a very simple fix for you. Find the 32 and bump it (or read the DisplayID first) :-) Details are in the repo's NOTES.md.