How do you force the amdgpu driver to allow 144 Hz on HDMI cable?

This is a separate question related to a problem I’m facing with my monitor when using DisplayPort cable. For those interested in the full discussion on that you can find it here:

The gist of the situation and my question now: My monitor won’t work properly when connected to a DisplayPort cable. HDMI works without any issue but has a major limitation that’s been forcing me back to DP: It only runs at 120 Hz instead of the 144 Hz supported by the monitor. When I looked at this I remember reading it’s a hardware limitation, due to my model using an older HDMI version which doesn’t allow the bandwidth needed to do 144 Hz @ 1080p resolution. My monitor is a Viewsonic VX2458-C-MHD, here’s its official page and the product page of the store I ordered it from:

I’m now questioning this statement after someone who has the same monitor told me you can in fact do 144 Hz on HDMI not just DP. I was told the 120 Hz cap would be a mere limitation in the AMD driver instead. This would help me greatly as I no longer need to keep trying to use DisplayPort and risk damaging my hardware if that’s the case.

But how do I lift this limit? Specifically how do I do it on Linux? I haven’t used Windows for a decade and don’t plan on touching it again, my OS is Manjaro. The KDE display settings offer me 144 Hz on the problematic DisplayPort but only 120 Hz on HDMI. Is there a command I can use on either the X11 or Wayland session to force the system to let me try the full refresh rate and see if it works? I know xrandr lets you do weird things on X but no idea if I can use it to force the full resolution. Could someone please post the steps required to try this? Thank you.

provide formated output from:
inxi -Fazy
xrandr -q

System:
  Kernel: 5.17.6-1-MANJARO arch: x86_64 bits: 64 compiler: gcc v: 11.2.0
    parameters: BOOT_IMAGE=/boot/vmlinuz-5.17-x86_64
    root=UUID=eabe1a99-1671-4b1c-9817-d5855ba9cea3 rw quiet apparmor=1
    security=apparmor udev.log_priority=3
  Desktop: KDE Plasma v: 5.24.5 tk: Qt v: 5.15.3 wm: kwin_x11 vt: 1 dm: SDDM
    Distro: Manjaro Linux base: Arch Linux
Machine:
  Type: Desktop Mobo: ASUSTeK model: PRIME X370-PRO v: Rev X.0x
    serial: <superuser required> UEFI: American Megatrends v: 6026
    date: 03/16/2022
CPU:
  Info: model: AMD Ryzen 7 3700X bits: 64 type: MT MCP arch: Zen 2
    family: 0x17 (23) model-id: 0x71 (113) stepping: 0 microcode: 0x8701021
  Topology: cpus: 1x cores: 8 tpc: 2 threads: 16 smt: enabled cache:
    L1: 512 KiB desc: d-8x32 KiB; i-8x32 KiB L2: 4 MiB desc: 8x512 KiB
    L3: 32 MiB desc: 2x16 MiB
  Speed (MHz): avg: 2503 high: 3794 min/max: 2200/4426 boost: enabled
    scaling: driver: acpi-cpufreq governor: schedutil cores: 1: 3328 2: 2049
    3: 2057 4: 2057 5: 3599 6: 1942 7: 2651 8: 2199 9: 3599 10: 2057 11: 2151
    12: 2197 13: 3794 14: 2060 15: 2128 16: 2190 bogomips: 115241
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
  Vulnerabilities:
  Type: itlb_multihit status: Not affected
  Type: l1tf status: Not affected
  Type: mds status: Not affected
  Type: meltdown status: Not affected
  Type: spec_store_bypass
    mitigation: Speculative Store Bypass disabled via prctl
  Type: spectre_v1
    mitigation: usercopy/swapgs barriers and __user pointer sanitization
  Type: spectre_v2
    mitigation: Retpolines, IBPB: conditional, STIBP: conditional, RSB filling
  Type: srbds status: Not affected
  Type: tsx_async_abort status: Not affected
Graphics:
  Device-1: AMD Ellesmere [Radeon RX 470/480/570/570X/580/580X/590]
    vendor: ASUSTeK driver: amdgpu v: kernel pcie: gen: 3 speed: 8 GT/s
    lanes: 16 ports: active: HDMI-A-1 off: DVI-D-1 empty: DP-1,DVI-D-2
    bus-ID: 0a:00.0 chip-ID: 1002:67df class-ID: 0300
  Device-2: Asuscom Network REDRAGON Live Camera type: USB
    driver: snd-usb-audio,uvcvideo bus-ID: 5-1:2 chip-ID: 0735:0269
    class-ID: 0102 serial: <filter>
  Display: x11 server: X.Org v: 21.1.3 with: Xwayland v: 22.1.1
    compositor: kwin_x11 driver: X: loaded: amdgpu unloaded: modesetting
    alternate: fbdev,vesa gpu: amdgpu display-ID: :0 screens: 1
  Screen-1: 0 s-res: 1920x1080 s-dpi: 96 s-size: 508x285mm (20.00x11.22")
    s-diag: 582mm (22.93")
  Monitor-1: HDMI-A-0 res: 1920x1080 dpi: 94 size: 521x293mm (20.51x11.54")
    diag: 598mm (23.53") modes: N/A
  OpenGL: renderer: AMD Radeon RX 570 Series (polaris10 LLVM 13.0.1 DRM 3.44
  5.17.6-1-MANJARO)
    v: 4.6 Mesa 22.0.3 direct render: Yes
Audio:
  Device-1: AMD Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]
    vendor: ASUSTeK driver: snd_hda_intel v: kernel pcie: gen: 3 speed: 8 GT/s
    lanes: 16 bus-ID: 0a:00.1 chip-ID: 1002:aaf0 class-ID: 0403
  Device-2: AMD Starship/Matisse HD Audio vendor: ASUSTeK
    driver: snd_hda_intel v: kernel pcie: gen: 4 speed: 16 GT/s lanes: 16
    bus-ID: 0c:00.4 chip-ID: 1022:1487 class-ID: 0403
  Device-3: Asuscom Network REDRAGON Live Camera type: USB
    driver: snd-usb-audio,uvcvideo bus-ID: 5-1:2 chip-ID: 0735:0269
    class-ID: 0102 serial: <filter>
  Sound Server-1: ALSA v: k5.17.6-1-MANJARO running: yes
  Sound Server-2: JACK v: 1.9.21 running: no
  Sound Server-3: PulseAudio v: 15.0 running: yes
  Sound Server-4: PipeWire v: 0.3.51 running: yes
Network:
  Device-1: Intel I211 Gigabit Network vendor: ASUSTeK driver: igb v: kernel
    pcie: gen: 1 speed: 2.5 GT/s lanes: 1 port: e000 bus-ID: 08:00.0
    chip-ID: 8086:1539 class-ID: 0200
  IF: enp8s0 state: up speed: 1000 Mbps duplex: full mac: <filter>
  Device-2: Realtek RTL8188EUS 802.11n Wireless Network Adapter type: USB
    driver: r8188eu bus-ID: 1-12:2 chip-ID: 0bda:8179 class-ID: 0000
    serial: <filter>
  IF: wlp2s0f0u12 state: down mac: <filter>
Bluetooth:
  Device-1: Integrated System Solution Bluetooth Device type: USB
    driver: btusb v: 0.8 bus-ID: 1-13:3 chip-ID: 1131:1004 class-ID: fe01
  Report: rfkill ID: hci0 rfk-id: 0 state: up address: see --recommends
Drives:
  Local Storage: total: 5 TiB used: 2.01 TiB (40.1%)
  SMART Message: Unable to run smartctl. Root privileges required.
  ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: Samsung
    model: SSD 970 EVO Plus 500GB size: 465.76 GiB block-size: physical: 512 B
    logical: 512 B speed: 31.6 Gb/s lanes: 4 type: SSD serial: <filter>
    rev: 1B2QEXM7 temp: 44.9 C scheme: GPT
  ID-2: /dev/sda maj-min: 8:0 vendor: Seagate model: ST4000VN008-2DR166
    size: 3.64 TiB block-size: physical: 4096 B logical: 512 B speed: 6.0 Gb/s
    type: HDD rpm: 5980 serial: <filter> rev: SC60 scheme: GPT
  ID-3: /dev/sdb maj-min: 8:16 vendor: Samsung model: SSD 860 EVO 1TB
    size: 931.51 GiB block-size: physical: 512 B logical: 512 B speed: 6.0 Gb/s
    type: SSD serial: <filter> rev: 4B6Q scheme: GPT
Partition:
  ID-1: / raw-size: 461.76 GiB size: 453.44 GiB (98.20%)
    used: 51.36 GiB (11.3%) fs: ext4 dev: /dev/nvme0n1p1 maj-min: 259:1
  ID-2: /boot/efi raw-size: 4 GiB size: 3.99 GiB (99.80%)
    used: 296 KiB (0.0%) fs: vfat dev: /dev/nvme0n1p2 maj-min: 259:2
  ID-3: /home raw-size: 931.51 GiB size: 915.82 GiB (98.31%)
    used: 120.4 GiB (13.1%) fs: ext4 dev: /dev/sdb1 maj-min: 8:17
Swap:
  Alert: No swap data was found.
Sensors:
  System Temperatures: cpu: N/A mobo: N/A gpu: amdgpu temp: 49.0 C
  Fan Speeds (RPM): N/A gpu: amdgpu fan: 1095
Info:
  Processes: 463 Uptime: 4m wakeups: 0 Memory: 31.32 GiB
  used: 9.67 GiB (30.9%) Init: systemd v: 250 tool: systemctl Compilers:
  gcc: 11.2.0 clang: 13.0.1 Packages: pacman: 1716 lib: 420 flatpak: 0
  Shell: Zsh v: 5.8.1 default: Bash v: 5.1.16 running-in: konsole inxi: 3.3.15

Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-A-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 521mm x 293mm
   1920x1080     60.00 + 120.00*  100.00   119.88   120.40   119.98    50.00    59.94    30.00    25.00    24.00    29.97    23.98  
   1600x1200     60.00  
   1680x1050     59.88  
   1400x1050     59.95  
   1600x900      60.00  
   1280x1024     75.02    60.02  
   1440x900      59.90  
   1280x960      60.00  
   1280x800      60.00  
   1152x864      75.00  
   1280x720      60.00    50.00    59.94  
   1024x768      75.03    70.07    60.00  
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   720x576       50.00  
   720x480       60.00    59.94  
   640x480       75.00    72.81    66.67    60.00    59.94  
   720x400       70.08  
DVI-D-0 disconnected (normal left inverted right x axis y axis)
   1080x1920     60.12 +
   1280x720     100.00  
   1024x768      60.12  
   800x600       60.12  
   640x480       60.12  
DVI-D-1 disconnected (normal left inverted right x axis y axis)

An update: I tried fixing it with xrandr following an Arch guide but sadly no success.

https://wiki.archlinux.org/title/Xrandr#Adding_undetected_resolutions

cvt 1920 1080 144
xrandr --newmode “1920x1080_144.00” 452.50 1920 2088 2296 2672 1080 1083 1088 1177 -hsync +vsync
xrandr --addmode HDMI-A-0 1920x1080_144.00
xrandr --output HDMI-A-0 --mode 1920x1080_144.00

Following the final command the monitor fell in an endless loop of going to sleep, waking up, saying there’s no signal, going to sleep again. The 144 Hz option appeared in the system settings as well but had the same result. What do you think is causing that?

As this guide shows my monitor is in fact meant to support 144 Hz even on HDMI. My HDMI cable is 2.0 compatible so it shouldn’t be a version limitation either.

and if you try this:

xrandr --newmode "1920x1080_144.00_rb1" 452.50 1920 2088 2296 2672 1080 1083 1088 1177 -hsync +vsync
xrandr --addmode HDMI-A-0 1920x1080_144.00_rb1

youre trying it on your own risk :grinning:

Same problem: Monitor enters a loop of saying there’s no signal for 5 seconds then going in standby for another 5 seconds. Everything says this should be supported so it makes no sense.

Solution found and it is working! Cheers to MichaelDeets on Reddit for his help. The issue with the xrandr command is that cvt and gtf produce excessive clocks by default. In their place I used this calculator and came up with a safe minimum that actually works:

xrandr --newmode "1920x1080_144" 333.216 1920 1928 1960 2000 1080 1143 1151 1157 +HSync +VSync

The messy workaround should be simple: Just add this and the other xrandr commands to ~/.profile and the whole thing will be automatically applied on login. But why is this even needed, why can’t the system automatically detect the proper settings for 144 Hz as it does for 120 Hz and below… is this a bug worth reporting with the Linux kernel or AMD developers?

Another important question: Eventually there may come that faithful day when KDE users can use the Plasma Wayland session bug free. What’s the equivalent to xrandr for Wayland? What commands do I use in its case to set and use a custom mode in the same way?

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.