VRR not working on ThinkPad T14 gen 1 (AMD) with FreeSync display

Hi!

I’m trying to set up VRR on my T14 gen 1 AMD laptop running EndeavourOS with KDE on X11. The display supports FreeSync according to the specification and I was able to enable it on Windows back in the day.

System info:

Adding inxi -FAZ --no-host | eos-sendlog output

https://clbin.com/1FYS8

[voii@void ~]$ neofetch
                     ./o.                  voii@void 
                   ./sssso-                --------- 
                 `:osssssss+-              OS: EndeavourOS Linux x86_64 
               `:+sssssssssso/.            Host: 20UDCTO1WW ThinkPad T14 Gen 1 
             `-/ossssssssssssso/.          Kernel: 5.17.4-arch1-1 
           `-/+sssssssssssssssso+:`        Uptime: 1 hour, 29 mins 
         `-:/+sssssssssssssssssso+/.       Packages: 1450 (pacman) 
       `.://osssssssssssssssssssso++-      Shell: bash 5.1.16 
      .://+ssssssssssssssssssssssso++:     Resolution: 1920x1080 
    .:///ossssssssssssssssssssssssso++:    DE: Plasma 5.24.4 
  `:////ssssssssssssssssssssssssssso+++.   WM: KWin 
`-////+ssssssssssssssssssssssssssso++++-   Theme: [Plasma], Breeze-dark-gtk [GTK2/3] 
 `..-+oosssssssssssssssssssssssso+++++/`   Icons: [Plasma], breeze-dark [GTK2/3] 
   ./++++++++++++++++++++++++++++++/:.     Terminal: konsole 
  `:::::::::::::::::::::::::------``       CPU: AMD Ryzen 7 PRO 4750U with Radeon Graphics (16) @ 1.700GHz 
                                           GPU: AMD ATI 07:00.0 Renoir 
                                           Memory: 3799MiB / 29873MiB 

Following https://forum.manjaro.org/t/how-to-enab … dgpu/93501

I added the kernel parameter

amdgpu.freesync_video=1 

and enabled VRR in the AMD driver (was “0”):

[voii@void ~]$ systool -vm amdgpu | grep freesync
    freesync_video      = "1"

Following https://wiki.archlinux.org/title/Variab … _on_AMDGPU

I created AMDGPU .conf file and added the VRR line (sidenote, TearFree was also disabled originally and after adding it here it works):

[voii@void ~]$ nano /etc/X11/xorg.conf.d/20-amdgpu.conf 

Section "Device"
     Identifier "AMD"
     Driver "amdgpu"
     Option "TearFree" "true"
     Option "VariableRefresh" "true"
EndSection

However xrandr still shows the display as not capable of VRR (see ‘vrr_capable’):

[voii@void ~]$ xrandr --verbose
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP connected primary 1920x1080+0+0 (0x57) normal (normal left inverted right x axis y axis) 309mm x 174mm
        Identifier: 0x52
        Timestamp:  4253
        Subpixel:   unknown
        Gamma:      1.0:1.0:1.0
        Brightness: 1.0
        Clones:    
        CRTC:       0
        CRTCs:      0 1 2 3
        Transform:  1.000000 0.000000 0.000000
                    0.000000 1.000000 0.000000
                    0.000000 0.000000 1.000000
                   filter: 
        EDID: 
                00ffffffffffff0006af3d5700000000
                001c0104a51f1178022285a5544d9a27
                0e505400000001010101010101010101
                010101010101b43780a070383e401010
                350035ae100000180000000f00000000
                00000000000000000020000000fe0041
                554f0a202020202020202020000000fe
                004231343048414e30352e37200a0070
        GAMMA_LUT_SIZE: 4096 
                range: (0, -1)
        DEGAMMA_LUT_SIZE: 4096 
                range: (0, -1)
        GAMMA_LUT: 0 
                range: (0, 65535)
        CTM: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 
                0 1 
        DEGAMMA_LUT: 0 
                range: (0, 65535)
        TearFree: on 
                supported: off, on, auto
        HDCP Content Type: HDCP Type0 
                supported: HDCP Type0, HDCP Type1
        Content Protection: Undesired 
                supported: Undesired, Desired, Enabled
        vrr_capable: 0 
                range: (0, 1)
        abm level: 0 
                range: (0, 4)
        max bpc: 16 
                range: (8, 16)
        underscan vborder: 0 
                range: (0, 128)
        underscan hborder: 0 
                range: (0, 128)
        underscan: off 
                supported: off, on, auto
        scaling mode: None 
                supported: None, Full, Center, Full aspect
        link-status: Good 
                supported: Good, Bad
        CONNECTOR_ID: 78 
                supported: 78
        non-desktop: 0 
                range: (0, 1)
  1920x1080 (0x57) 142.600MHz -HSync -VSync *current +preferred
        h: width  1920 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height 1080 start 1083 end 1088 total 1142           clock  60.03Hz
  1680x1050 (0x58) 142.600MHz -HSync -VSync
        h: width  1680 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height 1050 start 1083 end 1088 total 1142           clock  60.03Hz
  1280x1024 (0x59) 142.600MHz -HSync -VSync
        h: width  1280 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height 1024 start 1083 end 1088 total 1142           clock  60.03Hz
  1440x900 (0x5a) 142.600MHz -HSync -VSync
        h: width  1440 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height  900 start 1083 end 1088 total 1142           clock  60.03Hz
  1280x800 (0x5b) 142.600MHz -HSync -VSync
        h: width  1280 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height  800 start 1083 end 1088 total 1142           clock  60.03Hz
  1280x720 (0x5c) 142.600MHz -HSync -VSync
        h: width  1280 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height  720 start 1083 end 1088 total 1142           clock  60.03Hz
  1024x768 (0x5d) 142.600MHz -HSync -VSync
        h: width  1024 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height  768 start 1083 end 1088 total 1142           clock  60.03Hz
  800x600 (0x5e) 142.600MHz -HSync -VSync
        h: width   800 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height  600 start 1083 end 1088 total 1142           clock  60.03Hz
  640x480 (0x5f) 142.600MHz -HSync -VSync
        h: width   640 start 1936 end 1952 total 2080 skew    0 clock  68.56KHz
        v: height  480 start 1083 end 1088 total 1142           clock  60.03Hz

...

Looking at the EDID file of the eDP screen I could not find mention of the variable refresh range (Following https://gitlab.freedesktop.org/drm/amd/ … te_690508)):

[voii@void ~]$ xrandr --verbose | edid-decode 
edid-decode (hex):

00 ff ff ff ff ff ff 00 06 af 3d 57 00 00 00 00
00 1c 01 04 a5 1f 11 78 02 22 85 a5 54 4d 9a 27
0e 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 b4 37 80 a0 70 38 3e 40 10 10
35 00 35 ae 10 00 00 18 00 00 00 0f 00 00 00 00
00 00 00 00 00 00 00 00 00 20 00 00 00 fe 00 41
55 4f 0a 20 20 20 20 20 20 20 20 20 00 00 00 fe
00 42 31 34 30 48 41 4e 30 35 2e 37 20 0a 00 70

----------------

Block 0, Base EDID:
  EDID Structure Version & Revision: 1.4
  Vendor & Product Identification:
    Manufacturer: AUO
    Model: 22333
    Made in: 2018
  Basic Display Parameters & Features:
    Digital display
    Bits per primary color channel: 8
    DisplayPort interface
    Maximum image size: 31 cm x 17 cm
    Gamma: 2.20
    Supported color formats: RGB 4:4:4
    First detailed timing includes the native pixel format and preferred refresh rate
  Color Characteristics:
    Red  : 0.6445, 0.3300
    Green: 0.3007, 0.6035
    Blue : 0.1542, 0.0546
    White: 0.3134, 0.3291
  Established Timings I & II: none
  Standard Timings: none
  Detailed Timing Descriptors:
    DTD 1:  1920x1080   60.033006 Hz  16:9     68.558 kHz    142.600000 MHz (309 mm x 174 mm)
                 Hfront   16 Hsync  16 Hback  128 Hpol N
                 Vfront    3 Vsync   5 Vback   54 Vpol N
    Manufacturer-Specified Display Descriptor (0x0f): 00 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 20 '............... '
    Alphanumeric Data String: 'AUO'
    Alphanumeric Data String: 'B140HAN05.7 '
Checksum: 0x70

I tried looking at the EDID file with wxedid but I did not manage to find any editable reference to VRR (or “Display Range Limits” https://gitlab.freedesktop.org/drm/amd/ … te_690729)).

At this point I’m stuck. I would like to setup VRR (or at least the ability to set the refresh rate to 30, 40 or 45 Hz) for some light gaming. Currently only 60 Hz is available in xrandr:

[voii@void ~]$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 174mm
   1920x1080     60.03*+
   1680x1050     60.03  
   1280x1024     60.03  
   1440x900      60.03  
   1280x800      60.03  
   1280x720      60.03  
   1024x768      60.03  
   800x600       60.03  
   640x480       60.03  
HDMI-A-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected (normal left inverted right x axis y axis)

I would really appreciate some help! Thanks in advance.

I’ve found this https://forums.lenovo.com/t5/Lenovo-Yoga-Series-Notebooks/Yoga-Slim-7-Freesync/m-p/5058722

It seems like lenovo disabled freesync compatibility with a bios update on some laptops, also on windows you need to use some factory light version of the drivers otherwise it’s grayed out

Welcome to the forum @voii :enos: :enos_flag: :partying_face:

Thanks!

Unfortunately downgrading/upgrading BIOS did not change anything.

I had some previous misadventures with BIOS updates, where updating to version 1.39 caused my audio device to shutdown permanently on sleep. I downgraded to 1.37 to fix it.

Went from 1.37 to 1.25, the lowest available version with a release date before I purchased the laptop. This did not change anything, EDID looks the same, xrandr --verbose output is the same. I then upgraded to the latest 1.40, again, no change (although the audio issue seems fixed, yay…)

1 Like

Can’t you mod your EDID with something like this? https://sourceforge.net/projects/wxedid/

Something like CRU - Custom Resolution Utility that’s available on windows and allows you even to enable/force freesync on supposedly “unsupported” monitors/laptops

Thanks again,

I used wxedid to successfully create a 47 hz mode in xrandr for my screen (should be in the 45-60 Hz freesync range. I confirmed it is synced correctly with vrrtest).

[voii@void ~]$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 174mm
   1920x1080     60.03 +
   1680x1050     60.03  
   1280x1024     60.03  
   1440x900      60.03  
   1280x800      60.03  
   1280x720      60.03  
   1024x768      60.03  
   800x600       60.03  
   640x480       60.03  
   1920x1080x47.05  47.05* 
HDMI-A-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
DisplayPort-1 disconnected (normal left inverted right x axis y axis)

I cannot, however, figure out how to enable VRR by using wxedid.

https://wiki.archlinux.org/title/Variable_refresh_rate#Change_VRR_Range_of_a_FreeSync_Monitor

It will take me some time to try this, I will attempt more EDID editing in the near future.

Thanks for all your help!

1 Like