External monitor on USB-C/Alt-DP connection is stuck at 50Hz when it can do 100Hz. Works fine in Windows

Using driver 525.89.02 in Arch Linux (Endeavour OS) with the latest 6.2.2 kernel on an ASUS G14 2021 laptop with an RTX 3060 dGPU running in Hybrid mode.

I have been using the integrated GPU’s HDMI port for a while, but recently got a USB C dock so I can simplify my connections. When using USB-C, the G14 has the display wired to the dGPU. The HDMI out works fine at 100 Hz in Linux.

The monitor is UWQHD with support for up to 100Hz. Both in Arch and Fedora (where I downgraded to driver version 520) a refresh rate test shows it is stuck at 50Hz, even though the monitor is configured for 100Hz. In Windows, the same test yields 100Hz as a result. The difference in refresh rate is noticeable to me, as the Linux desktops feel choppier.

Log report attached
nvidia-bug-report.log.gz (2.6 MB)

Is there any more data I can provide? No one else is having this issue?

Please check if manually clocking up video memory works around it:
nvidia-smi -lmc 8000,8000

That worked. I did get a warning:

Memory clocks set to "(memClkMin 8000, memClkMax 8000)" for GPU 00000000:01:00.0

Warning: persistence mode is disabled on device 00000000:01:00.0. See the Known Issues section of the nvidia-smi(1) man page for more information. Run with [--help | -h] switch to get more information on how to enable persistence mode.
All done.

Can this change be made permanent or is this not a recommended state?

The warning is only for headless systems, can be ignored.
The values I gave are setting clocks to maximum, you might want to experiment with different values, e.g. 4000,6000 and de-/increase the first value to find the sweet spot in terms of power consumption.
You will have to create a script running this on boot or login.

Thanks. What is the default clock value before running this command? I’ve gone down to 1000,1000 with no change in the refresh rate. Running nvidia-smi -q shows that the clock doesn’t go below 5500 no matter what change I make. The Max clock on my device is 6000.

8000,8000 makes it go to 6000, but lowering below 5500 won’t make it drop below that. Which I guess is fine, maybe that’s the minimum it needs to drive the monitor at 100Hz

According to the log, idle clock should be 405MHz, max clock 6001MHz. so it should be 405,6001. There are only few clock steps allowed, though. You can check nvidia-settings for them.
nvidia-smi -rmc
should reset the memory clocks to default.
Just noticed, there’s a new option,
-lmcd --lock-memory-clocks-deferred=
which should be persistent across reboots. Don’t know about that option, though. Please check nvidia-smi -h