Cannot choose 4k60 option for external display

I cannot seem to figure out how to enable Fedora to give me the option to choose 60fps for the refresh rate at 4k (3840x2160 specifically), as it caps me only at 30. I am connecting from my laptop to a TV using an HDMI cable.

I can confirm Windows 10 allows me this resolution and refresh rate, even before I had this laptop. I’ve also tried a few other distros on their live media, and both Pop OS (22.04 Gnome) and Zorin OS (17.2 Core) allows me to choose above 30fps, though oddly topping at 59.94 instead of a full 60. They both seem to be running under X11 though.

I’ve double checked my hardware multiple times as well. The cable should be HDMI 2.1 as it advertised a bandwidth of up to 48gbps. According to Nanoreviews, my laptop’s HDMI port is 2.1 as well, and according to Sony’s website, my TV model should have HDMI Signal support of 3840x2160@60, making me think it at least supports HDMI 2.0. This means there should be no weak link holding me back from achieving this resolution and refresh rate.

Here are the details of my setup:

Fedora 41 KDE Wayland
Nvidia 565.77 Drivers

Acer Nitro 5 AN515-58-50YE - 12th Gen Intel Core i5-12500H/RTX 3050
Ugreen 8K HDMI Cable
Sony KD-43X7007G

Any help would be greatly appreciated, thank you!

While the hardware and cable look ok it is quite common for some GPUs to only support 4k at a lower frame rate. It is quite possible your laptop may be one of those.

Check the detailed specs for your laptop more in depth to see exactly what the GPU specs are.

Some are capable of supporting 1 4k monitor at 60 but adding a second monitor (of any kind) may limit it to 30.

Just so you are aware, my monitor ( an LG 4k TV) is connected to an nvidia RTX 3050 using HDMI. The GPU is easily capable of running a much higher frame rate, but with this TV it is capped at 30. Available settings are 24, 25, & 30.

I see. Unfortunately, it’s hard to get these kinds of information somehow. At the very least, the desktop versions at least does support 4k60, and up to 4 monitors (whether they’re mutually exclusive, I have not found)

Although you do seem to have a similar situation, I have said that Windows does allow me to choose 60fps for 4k, and Pop OS 22 and Zorin 17 also let me choose up to 59.94 at 4k (I’d like a full 60 though). With this, I have no reason to believe for now that my GPU is a limiting factor here. It’s such a confusing situation regardless and I appreciate the suggestion.

While I cannot say for certain, it seems possible that the conversion from DP to HDMI may be part of the issue. For me it does not matter if I use an HDMI - HDMI cable or if I use a DP - HDMI cable converter (the TV only has HDMI ports). Both ways cap the video refresh at 30 on this TV. On a regular monitor the refresh is only capped at the highest rate the monitor supports.

Note that the number seen (59.94) is close enough to 60 that the difference is immaterial in the real world. Many different monitors do not operate at exactly 60 Hz refresh but sync at a rate that is realistically close enough so the perception is the same whether 60 or 59.9x.

I see.

Unfortunately, Fedora still has me locked to 30fps unfortunately, so 59.94 isn’t even an option here. I’ve only brought it up as I tested if other distros suffer the same problem and just so happens Pop and Zorin does let me choose that. I do wonder if this is a Wayland problem, as Pop OS Cosmic (24 beta) can’t find it either when I tested earlier today.

You might confirm if it is wayland by booting to x11 and check if the refresh rate changes. That might require that you install the desktop package to support x11 on kde.

I see. Though I’d rather not have to go to X11 just to achieve this. I’ll primarily use this TV so that my brother and I have a big display to play local co-op games together, so it’s not really worth it. Thanks anyways!

How would I go about getting the decoded edid?

I’m having trouble using this. The result of wayland-info does not give me anything for me to use di-edid-decode with, or at least one that looks like from the example you linked. The closest I’ve seen is /dev/dri/card1 or /dev/dri/card0 which only made the edid decode command throw an error that no such file/directory exists.

Ah, I see it. I traversed to that directory with dolphin and it looks to be card0-HDMI-A-1. I actually already knew the name, but wayland-info not giving me that directory and the assumption of Nvidia being card1 has thrown me off.

Anyways, here is the decoded contents of the edid file. From a quick skim, I can see support for 60hz for 4k, under YCbCr 4:2:0, but i shouldn’t get ahead of myself.

  EDID Structure Version & Revision: 1.3
  Vendor & Product Identification:
    Manufacturer: SNY
    Model: 10501
    Serial Number: 16843009 (0x01010101)
    Made in: week 1 of 2019
  Basic Display Parameters & Features:
    Digital display
    Maximum image size: 160 cm x 90 cm
    Gamma: 2.20
    RGB color display
    First detailed timing is the preferred timing
  Color Characteristics:
    Red  : 0.6250, 0.3398
    Green: 0.2802, 0.5947
    Blue : 0.1552, 0.0703
    White: 0.2832, 0.2978
  Established Timings I & II:
    DMT 0x04:   640x480    59.940476 Hz   4:3     31.469 kHz     25.175000 MHz
    DMT 0x09:   800x600    60.316541 Hz   4:3     37.879 kHz     40.000000 MHz
    DMT 0x10:  1024x768    60.003840 Hz   4:3     48.363 kHz     65.000000 MHz
  Standard Timings:
    DMT 0x23:  1280x1024   60.019740 Hz   5:4     63.981 kHz    108.000000 MHz
    DMT 0x53:  1600x900    60.000000 Hz  16:9     60.000 kHz    108.000000 MHz (RB)
    DMT 0x15:  1152x864    75.000000 Hz   4:3     67.500 kHz    108.000000 MHz
    DMT 0x3a:  1680x1050   59.954250 Hz  16:10    65.290 kHz    146.250000 MHz
  Detailed Timing Descriptors:
    DTD 1:  3840x2160   30.000000 Hz  16:9     67.500 kHz    297.000000 MHz (1600 mm x 900 mm)
                 Hfront  176 Hsync  88 Hback  296 Hpol P
                 Vfront    8 Vsync  10 Vback   72 Vpol P
    DTD 2:  1920x1080   60.000000 Hz  16:9     67.500 kHz    148.500000 MHz (1600 mm x 900 mm)
                 Hfront   88 Hsync  44 Hback  148 Hpol P
                 Vfront    4 Vsync   5 Vback   36 Vpol P
    Display Product Name: 'SONY TV  *00'
    Display Range Limits:
      Monitor ranges (GTF): 23-62 Hz V, 14-70 kHz H, max dotclock 300 MHz
  Extension blocks: 1
Checksum: 0xe4

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

Block 1, CTA-861 Extension Block:
  Revision: 3
  Underscans IT Video Formats by default
  Basic audio support
  Supports YCbCr 4:4:4
  Supports YCbCr 4:2:2
  Native detailed modes: 0
  Video Data Block:
    VIC  93:  3840x2160   24.000000 Hz  16:9     54.000 kHz    297.000000 MHz
    VIC  94:  3840x2160   25.000000 Hz  16:9     56.250 kHz    297.000000 MHz
    VIC  95:  3840x2160   30.000000 Hz  16:9     67.500 kHz    297.000000 MHz
    VIC  98:  4096x2160   24.000000 Hz 256:135   54.000 kHz    297.000000 MHz
    VIC  31:  1920x1080   50.000000 Hz  16:9     56.250 kHz    148.500000 MHz
    VIC  16:  1920x1080   60.000000 Hz  16:9     67.500 kHz    148.500000 MHz
    VIC  20:  1920x1080i  50.000000 Hz  16:9     28.125 kHz     74.250000 MHz
    VIC   5:  1920x1080i  60.000000 Hz  16:9     33.750 kHz     74.250000 MHz
    VIC  19:  1280x720    50.000000 Hz  16:9     37.500 kHz     74.250000 MHz
    VIC   4:  1280x720    60.000000 Hz  16:9     45.000 kHz     74.250000 MHz
    VIC  32:  1920x1080   24.000000 Hz  16:9     27.000 kHz     74.250000 MHz
    VIC  34:  1920x1080   30.000000 Hz  16:9     33.750 kHz     74.250000 MHz
    VIC  60:  1280x720    24.000000 Hz  16:9     18.000 kHz     59.400000 MHz
    VIC  62:  1280x720    30.000000 Hz  16:9     22.500 kHz     74.250000 MHz
    VIC  18:   720x576    50.000000 Hz  16:9     31.250 kHz     27.000000 MHz
    VIC  22:  1440x576i   50.000000 Hz  16:9     15.625 kHz     27.000000 MHz
    VIC   3:   720x480    59.940060 Hz  16:9     31.469 kHz     27.000000 MHz
    VIC   7:  1440x480i   59.940060 Hz  16:9     15.734 kHz     27.000000 MHz
    VIC  17:   720x576    50.000000 Hz   4:3     31.250 kHz     27.000000 MHz
    VIC  21:  1440x576i   50.000000 Hz   4:3     15.625 kHz     27.000000 MHz
    VIC   2:   720x480    59.940060 Hz   4:3     31.469 kHz     27.000000 MHz
    VIC   6:  1440x480i   59.940060 Hz   4:3     15.734 kHz     27.000000 MHz
    VIC   1:   640x480    59.940476 Hz   4:3     31.469 kHz     25.175000 MHz
  Audio Data Block:
    Linear PCM:
      Max channels: 2
      Supported sample rates (kHz): 48 44.1 32
      Supported sample sizes (bits): 24 20 16
    AC-3:
      Max channels: 6
      Supported sample rates (kHz): 48 44.1 32
      Maximum bit rate: 640 kb/s
    DTS:
      Max channels: 6
      Supported sample rates (kHz): 48 44.1 32
      Maximum bit rate: 1504 kb/s
    Enhanced AC-3 (DD+):
      Max channels: 8
      Supported sample rates (kHz): 48 44.1
  Speaker Allocation Data Block:
    FL/FR - Front Left/Right
  Video Capability Data Block:
    YCbCr quantization: Selectable (via AVI YQ)
    RGB quantization: Selectable (via AVI Q)
    PT scan behavior: No Data
    IT scan behavior: Always Underscanned
    CE scan behavior: Supports both over- and underscan
  Colorimetry Data Block:
    xvYCC601
    xvYCC709
    sYCC601
    opYCC601
    opRGB
    BT2020cYCC
    BT2020YCC
    BT2020RGB
  HDR Static Metadata Data Block:
    Electro optical transfer functions:
      Traditional gamma - SDR luminance range
      SMPTE ST2084
      Hybrid Log-Gamma
    Supported static metadata descriptors:
      Static metadata type 1
  YCbCr 4:2:0 Video Data Block:
    VIC  96:  3840x2160   50.000000 Hz  16:9    112.500 kHz    594.000000 MHz
    VIC  97:  3840x2160   60.000000 Hz  16:9    135.000 kHz    594.000000 MHz
    VIC 101:  4096x2160   50.000000 Hz 256:135  112.500 kHz    594.000000 MHz
    VIC 102:  4096x2160   60.000000 Hz 256:135  135.000 kHz    594.000000 MHz
  Detailed Timing Descriptors:
    DTD 3:  1280x720    60.000000 Hz  16:9     45.000 kHz     74.250000 MHz (1600 mm x 900 mm)
                 Hfront  110 Hsync  40 Hback  220 Hpol P
                 Vfront    5 Vsync   5 Vback   20 Vpol P
Checksum: 0x5b

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

Failures:

Block 1, CTA-861 Extension Block:
  Colorimetry Data Block: Reserved bits MD0-MD3 must be 0.
EDID conformity: FAIL

I take it that the display does support the resolution and refresh rate, but some kind of setting or property prevents proper use of it?

This unfortunately looks like a dead end though. I wonder how Windows managed to overcome this then.

HDR hasn’t given me a difference in options whether on or off, so it doesn’t seem to do anything significant for me at least.

As for alternatives, my TV only has HDMI, but my Laptop does have a USB-C port with Thunderbolt 4 and USB 3.2. I’ve confirmed this too with the thunderbolt icon besides it’s physical port, and lspci -tv reports it as “Intel Corporation Alder Lake-P Thunderbolt 4 NHI #0”, with lsusb -t reporting a speed of “20000M/x2”. I have heard Thunderbolt Type-C uses the DP standard, so this probably counts, yes?

I don’t have a Type-C to HDMI cable, or an adapter right now though. But if its the TV that needs to have DP, then I’m simply out of luck.

Using Nirsoft’s DumpEDID, I was able to decode the edid information, and then dumped the edid into a .bin file using Nirsoft’s MonitorInfoView. I wonder if that bin file can just be a drop in replacement for the edid in linux. Wonder if its safe.

Active                   : No

Registry Key             : DISPLAY\SNY2905\5&caf7c7f&0&UID4352

Monitor Name             : SONY TV  *00

Manufacture Week         : 1 / 2019

ManufacturerID           : 55629 (0xD94D)

ProductID                : 10501 (0x2905)

Serial Number (Numeric)  : 16843009 (0x01010101)

EDID Version             : 1.3

Display Gamma            : 2.20

Vertical Frequency       : 23 - 62 Hz

Horizontal Frequency     : 14 - 70 KHz

Image Size               : 160.0 X 90.0 cm (72.3 Inch)

Maximum Image Size       : 160 X 90 cm (72.3 Inch)

Maximum Resolution       : 3840 X 2160

Support Standby Mode     : No

Support Suspend Mode     : No

Support Low-Power Mode   : No

Support Default GTF      : No

Digital                  : Yes



Supported Display Modes  :

     640 X  480  60 Hz

     800 X  600  60 Hz

    1024 X  768  60 Hz

    1152 X  864  75 Hz

    1280 X 1024  60 Hz

    1600 X  900  60 Hz

    1680 X 1050  60 Hz

    3840 X 2160  60 Hz

I have attempted to apply the edid I extracted from Windows using this resource in the Arch Wiki, and unfortunately, no 60fps option appears under the 4k options.

I suppose for now, so it looks like I’ll have to settle with the available options for now. Thanks again everyone for helping. Hopefully in the future, there could be a way for me to pull this off.

Hello,

This topic shows that overriding the edid on Wayland makes VRR stop working, so you should switch to X11 if you want your edid to work properly.

Also you can follow the instructions from this repo to create a custom edid.

Also, there’s a topic discussing a different approach to this:

If you have the option to use displayPort, it might be easier to use all resolution profiles.

Hello!

None of my displays have VRR support as far as I know, so I am not concerned on losing out on that functionality, but thanks for the warning. I’ll be sure to check out other resources you’ve provided as well when I find time tomorrow.

As for DisplayPort options, the closest, and only solution I have really is to use my Thunderbolt USB port, as I’ve heard that uses DisplayPort standards for video out. However, my external display has no DisplayPort connections whatsoever, so it’ll have to be through a USB-C to HDMI cable. Would this suffice?

Thank you.

This is the decode of the bin file that I got from Windows. I compared it with the native edid using DiffChecker and they seem to be the same unfortunately. Looks like Windows is interpreting something here that Fedora can’t.

Here’s the results of the decode of the Windows edid file using di-edid-decode just in case though. I’ll also attach the image of what MonitorInfoView listed as supported resolutions for it on Windows, which is the same as what DumpEDID reported (which I’ve posted in an earlier reply already)

Block 0, Base EDID:
  EDID Structure Version & Revision: 1.3
  Vendor & Product Identification:
    Manufacturer: SNY
    Model: 10501
    Serial Number: 16843009 (0x01010101)
    Made in: week 1 of 2019
  Basic Display Parameters & Features:
    Digital display
    Maximum image size: 160 cm x 90 cm
    Gamma: 2.20
    RGB color display
    First detailed timing is the preferred timing
  Color Characteristics:
    Red  : 0.6250, 0.3398
    Green: 0.2802, 0.5947
    Blue : 0.1552, 0.0703
    White: 0.2832, 0.2978
  Established Timings I & II:
    DMT 0x04:   640x480    59.940476 Hz   4:3     31.469 kHz     25.175000 MHz
    DMT 0x09:   800x600    60.316541 Hz   4:3     37.879 kHz     40.000000 MHz
    DMT 0x10:  1024x768    60.003840 Hz   4:3     48.363 kHz     65.000000 MHz
  Standard Timings:
    DMT 0x23:  1280x1024   60.019740 Hz   5:4     63.981 kHz    108.000000 MHz
    DMT 0x53:  1600x900    60.000000 Hz  16:9     60.000 kHz    108.000000 MHz (RB)
    DMT 0x15:  1152x864    75.000000 Hz   4:3     67.500 kHz    108.000000 MHz
    DMT 0x3a:  1680x1050   59.954250 Hz  16:10    65.290 kHz    146.250000 MHz
  Detailed Timing Descriptors:
    DTD 1:  3840x2160   30.000000 Hz  16:9     67.500 kHz    297.000000 MHz (1600 mm x 900 mm)
                 Hfront  176 Hsync  88 Hback  296 Hpol P
                 Vfront    8 Vsync  10 Vback   72 Vpol P
    DTD 2:  1920x1080   60.000000 Hz  16:9     67.500 kHz    148.500000 MHz (1600 mm x 900 mm)
                 Hfront   88 Hsync  44 Hback  148 Hpol P
                 Vfront    4 Vsync   5 Vback   36 Vpol P
    Display Product Name: 'SONY TV  *00'
    Display Range Limits:
      Monitor ranges (GTF): 23-62 Hz V, 14-70 kHz H, max dotclock 300 MHz
  Extension blocks: 1
Checksum: 0xe4

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

Block 1, CTA-861 Extension Block:
  Revision: 3
  Underscans IT Video Formats by default
  Basic audio support
  Supports YCbCr 4:4:4
  Supports YCbCr 4:2:2
  Native detailed modes: 0
  Video Data Block:
    VIC  93:  3840x2160   24.000000 Hz  16:9     54.000 kHz    297.000000 MHz
    VIC  94:  3840x2160   25.000000 Hz  16:9     56.250 kHz    297.000000 MHz
    VIC  95:  3840x2160   30.000000 Hz  16:9     67.500 kHz    297.000000 MHz
    VIC  98:  4096x2160   24.000000 Hz 256:135   54.000 kHz    297.000000 MHz
    VIC  31:  1920x1080   50.000000 Hz  16:9     56.250 kHz    148.500000 MHz
    VIC  16:  1920x1080   60.000000 Hz  16:9     67.500 kHz    148.500000 MHz
    VIC  20:  1920x1080i  50.000000 Hz  16:9     28.125 kHz     74.250000 MHz
    VIC   5:  1920x1080i  60.000000 Hz  16:9     33.750 kHz     74.250000 MHz
    VIC  19:  1280x720    50.000000 Hz  16:9     37.500 kHz     74.250000 MHz
    VIC   4:  1280x720    60.000000 Hz  16:9     45.000 kHz     74.250000 MHz
    VIC  32:  1920x1080   24.000000 Hz  16:9     27.000 kHz     74.250000 MHz
    VIC  34:  1920x1080   30.000000 Hz  16:9     33.750 kHz     74.250000 MHz
    VIC  60:  1280x720    24.000000 Hz  16:9     18.000 kHz     59.400000 MHz
    VIC  62:  1280x720    30.000000 Hz  16:9     22.500 kHz     74.250000 MHz
    VIC  18:   720x576    50.000000 Hz  16:9     31.250 kHz     27.000000 MHz
    VIC  22:  1440x576i   50.000000 Hz  16:9     15.625 kHz     27.000000 MHz
    VIC   3:   720x480    59.940060 Hz  16:9     31.469 kHz     27.000000 MHz
    VIC   7:  1440x480i   59.940060 Hz  16:9     15.734 kHz     27.000000 MHz
    VIC  17:   720x576    50.000000 Hz   4:3     31.250 kHz     27.000000 MHz
    VIC  21:  1440x576i   50.000000 Hz   4:3     15.625 kHz     27.000000 MHz
    VIC   2:   720x480    59.940060 Hz   4:3     31.469 kHz     27.000000 MHz
    VIC   6:  1440x480i   59.940060 Hz   4:3     15.734 kHz     27.000000 MHz
    VIC   1:   640x480    59.940476 Hz   4:3     31.469 kHz     25.175000 MHz
  Audio Data Block:
    Linear PCM:
      Max channels: 2
      Supported sample rates (kHz): 48 44.1 32
      Supported sample sizes (bits): 24 20 16
    AC-3:
      Max channels: 6
      Supported sample rates (kHz): 48 44.1 32
      Maximum bit rate: 640 kb/s
    DTS:
      Max channels: 6
      Supported sample rates (kHz): 48 44.1 32
      Maximum bit rate: 1504 kb/s
    Enhanced AC-3 (DD+):
      Max channels: 8
      Supported sample rates (kHz): 48 44.1
  Speaker Allocation Data Block:
    FL/FR - Front Left/Right
  Video Capability Data Block:
    YCbCr quantization: Selectable (via AVI YQ)
    RGB quantization: Selectable (via AVI Q)
    PT scan behavior: No Data
    IT scan behavior: Always Underscanned
    CE scan behavior: Supports both over- and underscan
  Colorimetry Data Block:
    xvYCC601
    xvYCC709
    sYCC601
    opYCC601
    opRGB
    BT2020cYCC
    BT2020YCC
    BT2020RGB
  HDR Static Metadata Data Block:
    Electro optical transfer functions:
      Traditional gamma - SDR luminance range
      SMPTE ST2084
      Hybrid Log-Gamma
    Supported static metadata descriptors:
      Static metadata type 1
  YCbCr 4:2:0 Video Data Block:
    VIC  96:  3840x2160   50.000000 Hz  16:9    112.500 kHz    594.000000 MHz
    VIC  97:  3840x2160   60.000000 Hz  16:9    135.000 kHz    594.000000 MHz
    VIC 101:  4096x2160   50.000000 Hz 256:135  112.500 kHz    594.000000 MHz
    VIC 102:  4096x2160   60.000000 Hz 256:135  135.000 kHz    594.000000 MHz
  Detailed Timing Descriptors:
    DTD 3:  1280x720    60.000000 Hz  16:9     45.000 kHz     74.250000 MHz (1600 mm x 900 mm)
                 Hfront  110 Hsync  40 Hback  220 Hpol P
                 Vfront    5 Vsync   5 Vback   20 Vpol P
Checksum: 0x5b

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

Failures:

Block 1, CTA-861 Extension Block:
  Colorimetry Data Block: Reserved bits MD0-MD3 must be 0.
EDID conformity: FAIL

Hello!

I followed with the path of using edid-generator. I was able to make the new edid files and successfully added the necessary kernel parameters to enforce it. However, although the bin file was named 3840x2160, the effective resolution that ended up getting used was, as KDE reported, 1792x1008.

I decoded the bin file then and found this. Although it does have 3840x2160 60hz in its DTD, the Standard Timings only report 1792x1008 60. Looks like something went wrong with the edid generation, but I do not know what.

Block 0, Base EDID:
  EDID Structure Version & Revision: 1.3
  Vendor & Product Identification:
    Manufacturer: LNX
    Model: 0
    Made in: week 5 of 2012
  Basic Display Parameters & Features:
    Analog display
    Signal Level Standard: 0.700 : 0.000 : 0.700 V p-p
    Blank level equals black level
    Sync: Separate Composite Serration
    Maximum image size: 100 cm x 56 cm
    Gamma: 2.20
    DPMS levels: Standby Suspend Off
    RGB color display
    First detailed timing is the preferred timing
  Color Characteristics:
    Red  : 0.6416, 0.3486
    Green: 0.2919, 0.5957
    Blue : 0.1474, 0.1250
    White: 0.3125, 0.3281
  Established Timings I & II: none
  Standard Timings:
    GTF     :  1792x1008   60.000000 Hz  16:9     62.580 kHz    150.192000 MHz
  Detailed Timing Descriptors:
    DTD 1:  3840x2160   60.000000 Hz  16:9    135.000 kHz    594.000000 MHz (1000 mm x 562 mm)
                 Hfront  176 Hsync  88 Hback  296 Hpol P
                 Vfront    8 Vsync  10 Vback   72 Vpol P
    Display Product Serial Number: 'Linux #0'
    Display Range Limits:
      Monitor ranges (GTF): 59-61 Hz V, 134-136 kHz H, max dotclock 600 MHz
    Display Product Name: '3840x2160'
Checksum: 0x9b

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

EDID conformity: PASS

What the edid generator does not to create an original edid file, but rather to hack it so that it works at the desired resolution and refresh rate. The only error in this output isn’t just about Standard Timing; for example, the connection shows up as analog.

Still, you can change some parameters by editing the 3840x2160.S file, but parameters like the connection or Standard Timing aren’t modified, possibly due to edid.S. I’m not sure if changing these parameters is even necessary, though.

Changed 3840x2160.S

  GNU nano 8.1                                         3840x2160.S                                                   
/* 3840x2160@60: negative HSync, positive VSync, 594MHz pixel clock */
#define HSYNC_POL   0
#define VSYNC_POL   1
#define INPUT_TYPE  INPUT_TYPE_DIGITAL
#define DPI         96
#define CLOCK       594000
#define MAX_DOTCLOCK 600000
#define VERSION     1
#define REVISION    4
#define XPIX        3840
#define YPIX        2160
#define XOFFSET     176
#define XPULSE      88
#define XBLANK      (176 + 88 + 296)
#define YOFFSET     8
#define YPULSE      10
#define YBLANK      (8 + 10 + 72)
#define XY_RATIO    XY_RATIO_16_9
#define TIMING_NAME "3840x2160@60"
#define XSIZE_MM    1110
#define YSIZE_MM    620
#define MIN_VFREQ   30
#define MAX_VFREQ   75
#define MIN_HFREQ   30
#define MAX_HFREQ   90
#define STANDARD_TIMINGS { \
    { 2560, 1440, 60 }, \
    { 1920, 1080, 60 }, \
    { 1280, 720, 60 }   \
}

#include "edid.S"
➜  edid-generator git:(master) ✗ make 3840x2160.bin                              
cc -c -DCRC="0x00" -o 3840x2160.o 3840x2160.S
edid.S: Assembler messages:
edid.S:171: Warning: value 0x1c1 truncated to 0xc1
edid.S:205: Warning: value 0xfffffffffffffc5b truncated to 0x5b
objcopy -j .data -Obinary 3840x2160.o 3840x2160.bin.nocrc
cat 3840x2160.bin.nocrc | edid-decode \
	| sed -ne 's/^[ ]*Checksum: 0x\w\+ (should be \(0x\w\+\))$/\1/p' >3840x2160.crc
cc -c -DCRC="$(cat 3840x2160.crc)" -o 3840x2160.p 3840x2160.S
edid.S: Assembler messages:
edid.S:171: Warning: value 0x1c1 truncated to 0xc1
edid.S:205: Warning: value 0xfffffffffffffc5b truncated to 0x5b
objcopy -j .data -Obinary 3840x2160.p 3840x2160.bin
rm 3840x2160.p 3840x2160.crc 3840x2160.bin.nocrc 3840x2160.o
➜  edid-generator git:(master) ✗ edid-decode 3840x2160.bin                       
edid-decode (hex):

00 ff ff ff ff ff ff 00 31 d8 00 00 00 00 00 00
05 16 01 04 6d 64 38 78 ea 5e c0 a4 59 4a 98 25
20 50 54 00 00 00 c1 00 01 01 01 01 01 01 01 01
01 01 01 01 01 01 08 e8 00 30 f2 70 5a 80 b0 58
5b 00 e8 32 32 00 00 1c 00 00 00 ff 00 4c 69 6e
75 78 20 23 30 0a 20 20 20 20 00 00 00 fd 00 00
00 86 88 3c 00 0a 20 20 20 20 20 20 00 00 00 fc
00 33 38 34 30 78 32 31 36 30 40 36 30 0a 00 bd

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

Block 0, Base EDID:
  EDID Structure Version & Revision: 1.4
  Vendor & Product Identification:
    Manufacturer: LNX
    Model: 0
    Made in: week 5 of 2012
  Basic Display Parameters & Features:
    Analog display
    Signal Level Standard: 0.700 : 0.000 : 0.700 V p-p
    Blank level equals black level
    Sync: Separate Composite Serration
    Maximum image size: 100 cm x 56 cm
    Gamma: 2.20
    DPMS levels: Standby Suspend Off
    RGB color display
    First detailed timing includes the native pixel format and preferred refresh rate
  Color Characteristics:
    Red  : 0.6416, 0.3486
    Green: 0.2919, 0.5957
    Blue : 0.1474, 0.1250
    White: 0.3125, 0.3281
  Established Timings I & II: none
  Standard Timings:
    GTF     :  1792x1120   60.000129 Hz  16:10    69.540 kHz    168.009000 MHz
  Detailed Timing Descriptors:
    DTD 1:  3840x2160   60.000000 Hz  16:9    135.000 kHz    594.000000 MHz (1000 mm x 562 mm)
                 Hfront  176 Hsync  88 Hback  296 Hpol N
                 Vfront    5 Vsync  11 Vback   74 Vpol P
    Display Product Serial Number: 'Linux #0'
    Display Range Limits:
      Monitor ranges (GTF): 0-0 Hz V, 134-136 kHz H, max dotclock 600 MHz
    Display Product Name: '3840x2160@60'
Checksum: 0xbd
➜  edid-generator git:(master) ✗ 

So, if you’re getting a 4K 60Hz display after these changes, you can just leave it as is w/o messing with the standard timings, etc. Otherwise, you could try finding the original EDID, but most brands don’t provide it—I couldn’t find mine (Samsung…).

Another option is to try updating the monitor, which might generate valid EDID info.

I copy pasted your changes to my .S file for 3840x2160 before invoking ./modeline2edid /etc/X11/xorg.conf and make. The resulting bin file’s decoded contents was not promising, as it was showing a Standard Timing of 1792x1120. Adding this file to /usr/lib/firmware, it did not get enforced unlike with the previous edid file that naturally got generated, as I still got the same usual options for resolution and refresh rate.

As for updating my display, when I went to get the edid from Windows, MonitorInfoView has told me it was last updated this December, on the 10th, so it seems that didn’t fix it, unless I need to regenerate it manually.

Here’s the decoded contents of the 3840x2160.bin that was generated off your .S file.

Block 0, Base EDID:
  EDID Structure Version & Revision: 1.4
  Vendor & Product Identification:
    Manufacturer: LNX
    Model: 0
    Made in: week 5 of 2012
  Basic Display Parameters & Features:
    Analog display
    Signal Level Standard: 0.700 : 0.000 : 0.700 V p-p
    Blank level equals black level
    Sync: Separate Composite Serration
    Maximum image size: 100 cm x 56 cm
    Gamma: 2.20
    DPMS levels: Standby Suspend Off
    RGB color display
    First detailed timing includes the native pixel format and preferred refresh rate
  Color Characteristics:
    Red  : 0.6416, 0.3486
    Green: 0.2919, 0.5957
    Blue : 0.1474, 0.1250
    White: 0.3125, 0.3281
  Established Timings I & II: none
  Standard Timings:
    GTF     :  1792x1120   60.000129 Hz  16:10    69.540 kHz    168.009000 MHz
  Detailed Timing Descriptors:
    DTD 1:  3840x2160   60.000000 Hz  16:9    135.000 kHz    594.000000 MHz (1000 mm x 562 mm)
                 Hfront  176 Hsync  88 Hback  296 Hpol N
                 Vfront    5 Vsync  11 Vback   74 Vpol P
    Display Product Serial Number: 'Linux #0'
    Display Product Name: '3840x2160@60'
Checksum: 0xbd

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

Failures:

Block 0, Base EDID:
  Display Range Limits: Range limits set to reserved values.
EDID conformity: FAIL