Hi Cameron,

I didn't go upstream yet. I suppose upstream bugs should be filed to the
Intel Open Source Technology Center (https://01.org/), but I'm not sure.
Or maybe to the Linux kernel since it's an in-tree module after all...

From what I understand, the Intel module fails to switch to anything
else than the refreshing rate that's on the preferred (i.e. first
mentioned on EDID) DTD.

However, it seems to me the first DTD usually has the highest refresh
rate, which makes your problem strange. Could that mean the 60 Hz DTD is
the preferred one on your laptop's panel, despite it being able to go up
to 135 Hz ?

Also, are you sure you're using true Xorg, not Xorg on Wayland ? Bcos on
any readings on the latter would be mostly irrelevant as they don't
necessary reflect the reality (Xorg on Wayland being only a
compatibility layer). From what I've seen, when asking for a reduced
refresh rate, even if it fails, Wayland seems to try to near the target
refresh rate by syncing frames to a factor of the effective refresh
rate. That's why on a previous post, when trying to get 60Hz on my
144Hz-capable monitor, I was getting 72 fps with glxgears... But in your
case of trying to get 135 from an effective 60, Wayland surely can't do
this trick.

Anyway, you can get the EDID from sysfs easily. On my current config,
mine is in /sys/class/drm/card0-eDP-1/edid. You should have something
similar. To quicky decode the EDID, you can use edid-decode (from the
edid-decode package), most basically like this :

edid-decode /sys/class/drm/card0-eDP-1/edid

Then you can create a modified, hex-edited EDID file, with the two DTDs 
swapped, put it somewhere under the /lib/firmware directory and add the 
following in a file inside /etc/modprobe.d :
options drm edid_firmware=eDP-1:mydir/myedid.bin

eDP-1 is your connector name, for me it's eDP-1 but for you it can be
something else. You can also omit "eDP-1:", in which case the EDID will
apply to all connectors. While I didn't check myself, I suppose it will
be a problem if you plug your laptop on an external monitor.

Also, if the module is loaded while the system is still on the initramfs, it 
won't work since your modified EDID won't be there, hence you will have to add 
it with an initramfs hook in /etc/initramfs-tools/hooks. The file should look 
like this :
--- File starts after this line -----
#!/bin/sh

PREREQ=""

prereqs () {
        echo "$PREREQ"
}

case "$1" in
        prereqs)
                prereqs
                exit 0
                ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_file edid /lib/firmware/mydir/myedid.bin
----- File ends before this line -----

Make the file belong to root:root and mode 555 (readable/executable by
all). You should then update your initramfs with update-initramfs -u (to
update the initramfs for the current running kernel) or update-initramfs
-u -k all (to update for all installed kernels, or you can specify a
kernel). And reboot...

Hope this helps !

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1848746

Title:
  Refresh rate change requests to 40Hz are "adjusted" back to 60Hz

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1848746/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to