Return to

4K @ 120Hz HDMI 2.1 - AMD 6000 series, omg

hardware → amd 6900 xt + hdmi 2.1 LG C9

I kinda give up and I need help.

I cannot make my 6900 xt output [email protected] like in windows. Nvidia 3080 and proprietary drivers, no issue what so ever, with this 6900 I am limited to 4K60Hz. It ALMOST seams it is locked to hdmi 2.0. As of this moment i am running kubuntu 20.10 with kernel 5.11rc7 from ubuntu kernel ppa.

Second issue it pixel format. I am finding it difficult to believe I have to hack EDID to get RGB Full from ycbcr while in Nvidia world, it is a 3 second job.

Man I am really trying to leave windows but this is no fun.

Can you chaps help me out?

Thank you

All the tvs i have had experience with have something where bandwidth is limited on the tv end. You have to turn on full bandwidth on the tv end to get it to work. I have a samsung q90r and a vizio pqx. Both had similar settings for improved bandwidth. I was trying to get 60hz, 444, hdr and 10 bit to work. Wasnt an option until i had the bandwidth limiter disabled. Samsung calls it Input Signal Plus, Vizio calls it HDMI Mode, etc. I had an lg in my possesion and I believe it had this feature, but I do not recall what it is called. When I would on my samsung change video cards or ports on the video card, it reset to being disabled. So this could be your problem.

This is what it looks like on my Samsung.

I mean few ppl are asking for that in the linux world so pushing for that will get not very far really fast.

I’m currently using an LG CX 48" in Linux with [email protected] and 8b RGB. I’m using an RX 6900 XT as GPU.

It took quite a lot of effort to get here. I tried the EDID route, but didn’t get beyond [email protected] YCbCr 4:2:0, which is objectively a terrible experience. I also tried manually settings modes with xrandr, but that also lead nowhere.

I eventually concluded that the problem was in the kernel. My thinking was that it was somehow deciding on the ‘wrong’ maximum pixel clock, causing the AMD kernel driver to drop the [email protected]>60Hz RGB modes that are advertised in the EDID (SVD 117 and 118). After a surprisingly short search through the AMD driver, I made a few small changes to ignore the max pixel clock sent by the monitor, and that bumped me up to [email protected] 8b RGB. 10b should be doable with a similar small change.

It’s not perfect: sometimes after logging in, the monitor shows ‘no signal’. I then have to restart the monitor to display an image. Audio over HDMI is also broken when using 120Hz.
But oh man, I can’t imagine using a computer at less than 120Hz anymore. This is still by far the best solution I could find.

I downloaded the kernel 5.13.9 source code

I made two changes:
In /drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c:adjust_colour_depth_from_display_info() on line 7168 I changed
if (normalized_clk <= info->max_tmds_clock) {
if (normalized_clk <= 12000000) {

In drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c:dce110_link_encoder_validate_hdmi_output() on line 784 I changed
(adjusted_pix_clk_khz > 12000000))

I compiled with this script:
sudo echo "need root"
make -j24
sudo make modules_install -j24
sudo make install
sudo rm /boot/vmlinuz-5.13-4k120-x86_64
sudo cp /boot/vmlinuz /boot/vmlinuz-5.13-4k120-x86_64
sudo mkinitcpio -p linux513patched

Reboot, select the new kernel, enjoy 4k120 in Linux using AMD 6xxx GPU :smiley:

This is obviously an ugly solution btw. A more correct approach would be to use max(max_tmds_clock, max(pixel clock for each SVD advertised by the EDID)) as the maximum pixel clock instead of just the constant 12000000.
Even better would be actual HDMI 2.1 support, but hey, that seems to be off the table for now.



Well that’s the some dedication lol I couldn’t be bothered to solve problems like this, but that’s why I stay in windows land for my desktop

Appreciate you taking the time to post the solution for others!

I have only mild regrets about how much time I’ve spent on this :smiley:

1 Like