PP_OVERDRIVE_MASK erroneously enables VRAM idle state
System information
System: Host: serebit-matisse Kernel: 5.5.11-151.current x86_64 bits: 64 compiler: gcc
v: 9.3.0 Desktop: Budgie 10.5.1 wm: budgie-wm dm: LightDM Distro: Solus 4.1
CPU: Topology: 8-Core model: AMD Ryzen 7 3700X bits: 64 type: MT MCP arch: Zen
L2 cache: 4096 KiB
flags: avx avx2 lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm bogomips: 115188
Speed: 2171 MHz min/max: 2200/3600 MHz Core speeds (MHz): 1: 2171 2: 2158 3: 2150
4: 2284 5: 2200 6: 2199 7: 2199 8: 2199 9: 2177 10: 2287 11: 2200 12: 2199 13: 2199
14: 2199 15: 2134 16: 2124
Graphics: Device-1: AMD Ellesmere [Radeon RX 470/480/570/570X/580/580X/590]
vendor: Micro-Star MSI driver: amdgpu v: kernel bus ID: 26:00.0 chip ID: 1002:67df
Display: x11 server: X.Org 1.20.7 driver: amdgpu compositor: budgie-wm
resolution: 1920x1080~60Hz
OpenGL: renderer: AMD Radeon RX 480 Graphics (POLARIS10 DRM 3.36.0 5.5.11-151.current
LLVM 9.0.0)
v: 4.5 Mesa 19.3.4 direct render: Yes
Describe the issue
On most AMD GPUs that I'm aware of, the VRAM idle clock state is disabled when the system uses multiple displays and/or a single display with a refresh rate that is not a multiple of 60hz. While this lockout is enforced most of the time, it appears that when the kernel boot parameter amdgpu.ppfeaturemask
is passed with a value that enables the PP_OVERDRIVE_MASK
bit, this lockout is removed, and the VRAM can drop to idle clocks regardless of the display configuration. In these situations, severe artifacting in the form of black and multicolor horizontal bars occurs when the GPU drops VRAM clocks to idle. Using an application like CoreCtrl to disable the VRAM idle state fixes this problem, as it forces the VRAM clocks to their normal maximum. My display configuration, which suffers from this issue, is one 1080p 144hz display and one 1080p 60hz display.
This issue is a more focused and descriptive version of mesa/mesa#930 (moved).