Skip to content

LG C4 OLED - FRL training fails with "sink does not support FRL" #35

Open

Description

@piepgras

I don't have a second display or SSH access available while booted into the mkopec kernel atm, so I'm unable to provide a register dump at this time. Lmk if there's anything I can do :) Appreciate the work!

GPU: RX 9070 XT
Display: LG C4 webOS v. 10.3.0-25
HDMI ports: tried all of them
LG ULTRA HD Deep Colour: set to 4K
OS: CachyOS/Hyprland
Kernel: 6.18.6 mkopec-git from AUR
Cable: 48gbps certified something something

FRL link training fails on every attempt. The GPU side appears to be working correctly — FRL margin measurements succeed at rates 1, 2, 3, 4, and 6. However, every actual training attempt receives "sink does not support FRL" from the TV, causing training to fail and resulting in no display output.

Margin measurements completing successfully (GPU side working):
[HW_LINK_TRAINING]:HDMI FRL: Rate 1 Supported. Borrowed: 0, Margin: 796600 ppm
[HW_LINK_TRAINING]:HDMI FRL: Rate 2 Supported. Borrowed: 0, Margin: 724627 ppm
[HW_LINK_TRAINING]:HDMI FRL: Rate 3 Supported. Borrowed: 174, Margin: 691388 ppm
[HW_LINK_TRAINING]:HDMI FRL: Rate 4 Supported. Borrowed: 125, Margin: 375326 ppm
[HW_LINK_TRAINING]:HDMI FRL: Rate 6 Supported. Borrowed: 187, Margin: 378652 ppm
(above repeats across multiple passes)

FRL training attempts - TV rejects every attempt:
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=3 lanes=4)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 1 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 2 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 3 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 4 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 5 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 6 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 7 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 8 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 9 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: starting training (rate=2 lanes=3)
[HW_LINK_TRAINING]:FRL: sink does not support FRL
[HW_LINK_TRAINING]:FRL: Training attempt 10 failed! Will attempt rate 2 next
[HW_LINK_TRAINING]:HDMI FRL: training failed
(entire sequence repeats on every display detection attempt)

Activity

  1. xerrni commented on Apr 16, 2026

    @xerrni

    try: #23 (comment)

    This is my general fix for LG tv's. should work.

  2. piepgras commented on Apr 21, 2026

    @piepgras
    Author

    try: #23 (comment)

    This is my general fix for LG tv's. should work.

    Gave it a quick whirl. No luck sadly, I'll look into it soon.

  3. piepgras commented on Apr 21, 2026

    @piepgras
    Author

    Tried getting it to work.
    I manually applied all three changes (sink version retry, FLT_UPDATE quirk, and DFM-selected rate bypass) directly to link_frl_training.c, since the line numbers have shifted.

    After manually editing the source and confirming the changes compiled in, the kernel is missing critical modules for btrfs-based systems (btrfs, usbhid, overlay, crypto_lz4), maybe this is expected and I didn't do my homework. mkinitcpio fails and the initramfs is incomplete, so I can't fully boot to test.

    What I can confirm tho:
    manufacturer_id 0x6D1E is correctly detected for the LG C4
    The LG C4 reports as "LG TV SSCR2" with product_id 82CD
    I suppose the LG C4 must behave differently from the B9 used in @xerrni 's patch.. different webOS version (10.3.0-25), different panel generation.

    I'll keep cracking. Happy to provide additional info :)

  4. xerrni commented on Apr 22, 2026

    @xerrni

    0005-FIX.patch

    AUR package already takes care of correctly creating kernel config. Do not manually create one.
    Just put my patch to correct place. I use btrfs and it works so it defenetly applies correct changes to kernel config file.

    https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=linux-mkopec-git#n122

    https://aur.archlinux.org/packages/linux-mkopec-git

    So to do it step by step once again:

    1. Install linux-mkopec-git package: yay -Suy linux-mkopec-git or using other aur helper.
      This step will create /etc/linux-mkopec-git/ directory and required config files:
    l -R /etc/linux-mkopec-git/
    /etc/linux-mkopec-git/:
    total 20K
    drwxr-xr-x 1 root root   38 kwi  8 15:09 .
    drwxr-xr-x 1 root root 4,9K kwi 22 11:40 ..
    -rw-r--r-- 1 root root  126 kwi  8 15:02 config
    drwxr-xr-x 1 root root  328 kwi  8 15:09 patches
    -rw-r--r-- 1 root root  546 kwi  8 15:02 remote
    
    /etc/linux-mkopec-git/patches:
    total 40K
    drwxr-xr-x 1 root   root    328 kwi  8 15:09 .
    drwxr-xr-x 1 root   root     38 kwi  8 15:09 ..
    -rw-r--r-- 1 USER USER 3,3K kwi  8 15:01 0005-FIX.patch
    -rw-r--r-- 1 root   root    357 kwi  8 14:51 patches
    
    1. download patch file 0005-FIX.patch
    2. Place it in /etc/linux-mkopec-git/patches directory as show above
    3. edit /etc/linux-mkopec-git/config file:
    # List here the patches' filename to be applied in the correct order.
    # All patches need to be placed in this directory and have the .patch name
    # extension.
    #
    # PATCHES=(
    #   '0001-foo.patch'
    #   '0002-bar.patch'
    #   ...
    # )
    
    PATCHES=(
    '0005-FIX.patch'
    )
    1. Rebuild kernel with this patch
      yay -S linux-mkopec-git linux-mkopec-git-headers --rebuild

    2. Make sure that you boot to correct kernel -- edit your boot configuration file, I use systemd-boot,

    my config:
    /boot/loader/entries/arch_amd.conf

    title Arch Linux amd 120HZ version
    linux //vmlinuz-linux-mkopec-git
    initrd /amd-ucode.img
    initrd /initramfs-linux-mkopec-git.img

    If you still insist on Your manual way, link to config file from aur repo:

    https://aur.archlinux.org/cgit/aur.git/tree/config?h=linux-mkopec-git

    It has btrfs turned on https://aur.archlinux.org/cgit/aur.git/tree/config?h=linux-mkopec-git#n11062
    Remember that its not advised to change kernel config by hand, rather use tool included in kernel source code, by executing make menuconfig Why ? because of e.g. dependencies.

  5. xerrni commented on Apr 22, 2026

    @xerrni

    FIY I worked with grok to create this patch, feel free to do use is as base conversation. but remember one thing, he does not understand how to create good patches, so It's best to just get his diff and create patch by hand, how to do so:

    # navigate to linux source e.g.
    pushd ~/.cache/yay/linux-mkopec-git/src/linux-mkopec
    # apply diff changes by hand - time consuming but ensures that it will work since grok is unable to create good .diff .patch file
    
    git add -u
    git commit -m "my patch"
    git format-patch -n HEAD^ # this creates real patch that will be usable
    git checkout HEAD~1 # get rid of your changes
    cp ./0001-my_path_sth.patch /etc/linux-mkopec-git/patches/0005-FIX.patch
    yay -S linux-mkopec-git linux-mkopec-git-headers --rebuild
    systemctl reboot
  6. piepgras commented on Apr 22, 2026

    @piepgras
    Author

    There we go! 2160p@144hz, 10b 4L12 hdr10 with vrr.

    Haven't done any testing yet, i seem to have some flickering, but that just might be hyprland and my current config.

    Thanks for the assist @xerrni !

  7. xerrni commented on Apr 23, 2026

    @xerrni

    My pleasure, that's what GNU/Linux community is for.
    Test for couple days and report back. Also did You just apply my patch or did you change sth, write about it so other people could also benefit from that.

    also watch for logs using:

    sudo dmesg --follow
    # or
    sudo dmesg --follow-new

    We need to create robust solution that could be upstream-ed, so anyone could benefit.

    FIY I tested on kde and some full screen games.

  8. piepgras commented on Apr 29, 2026

    @piepgras
    Author

    Been running great since we got it working, 0 issues I've noticed, my first reboot since the kernel switch was today.

    I applied the patch just like you said.

    Only issue I've encountered is that my secondary display needs to be disconnected at boot.
    As for VRR flickering, running games in fullscreen fixes it.

    Anything else I can do? Would very much like to see this go upstream :)

    Log from fresh boot:
    dmesg.log

  9. jarrard commented on May 2, 2026

    @jarrard

    Sadly tried this patchset on my AMD NUC with 780M GPU and it causes display to be stuck at 60hz max.

    It did however get the colorspace correct at 10bit etc... but yeah looks like it just straight up looses the hz rates above that. Guessing DSC can't activate for some reason and its not dropping to 420 color to compensate.

    Shame. This is one area where Windows is just massively dominant in atm, being able to display any colorspace and settings on any screen, but under Linux I've hit so many issues getting the correct settings to work.
    Don't even get my started on Intel iGPU support under Linux, its even worse, lol

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions