Memory Clock stuck at maximum
Brief summary of the problem:
Using the 5700XT with 3 connected displays causes the memory clock to stay at max frequency even at idle desktop.
Hardware description:
- CPU: AMD Ryzen 5 5600
- GPU: Asus RX 5700 XT
0b:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (rev c1)
- System Memory: 64GB DDR4
- Display(s): 3x Dell UltraSharp U2515H (2560x1440 60Hz via DP)
- Type of Display Connection: DP
System information:
- Distro name and Version: Manjaro Linux 23.0.0
- Kernel version: Linux dominik-pc 6.4.6-1-MANJARO #1 (closed) SMP PREEMPT_DYNAMIC Tue Jul 25 09:30:58 UTC 2023 x86_64 GNU/Linux
- Custom kernel: N/A
- AMD official driver version: N/A
How to reproduce the issue:
Boot the system, log into KDE Desktop and open terminal.
When running sensors
I notice the GPU reported power draw at 28-30 Watt and the memory temperature at 60°C (permanent even at idle desktop)
When running cat /sys/class/drm/card0/device/pp_dpm_mclk
I get the following:
0: 100Mhz
1: 500Mhz
2: 625Mhz
3: 875Mhz *
The memory clock won't change at all. If I run the following script changing the blanking timings of all displays the memory clock goes down and the total power draw drops to around 13-14 Watt. My power meter even reports a drop by around 30 Watt from the wall.
This is the workaround script I've been using for some time:
#!/bin/bash
xrandr --newmode "MCLK-Fix" 241.50 2560 2608 2640 2720 1440 1443 1448 1521 +hsync -vsync
xrandr --addmode DisplayPort-2 "MCLK-Fix"
xrandr --addmode DisplayPort-3 "MCLK-Fix"
xrandr --addmode DisplayPort-4 "MCLK-Fix"
xrandr --output DisplayPort-2 --mode "MCLK-Fix"
xrandr --output DisplayPort-3 --mode "MCLK-Fix"
xrandr --output DisplayPort-4 --mode "MCLK-Fix"
The issue I got is the following:
Running the script causes sometimes at random the display to draw a horizontal line across the display where my mouse is located (it even seems to have the color of the mouse location pixel to me). I can somehow "provoke" this by moving the mouse over video playback or other moving browser animations.
I had this script running without issues on some older drm versions and kernels but currently I'm unable to find a stable working solution. By example while typing this issue I got no graphical display issues at all. But when browsing the web or moving desktop windows around it is currently no option to use the workaround.
My guess would be that the async blanking of the 3 displays are causing the memory clock to stay at max. That would match with the modeline I set via the script to use the same reduced blanking.
Attachments: