i915 驱动程序在 165hz 屏幕上卡在 40hz

i915 驱动程序在 165hz 屏幕上卡在 40hz

我的笔记本电脑上有 i7-10875H 处理器。我已禁用 NVIDIA dGPU,因此问题仅与英特尔驱动程序有关。

我正在使用 Debian 11。

使用内核进行测试:

  • 5.10.0-9-amd64
  • 5.14.0-0.bpo.2-amd64

我用过Xorg和Wayland,笔记本屏幕是卡在40hz。

但屏幕是165hz。

我认为这与驱动程序级别有关,因为它与 Xorg 配置或 xrandr 设置无关。即使我在 xrandr 上设置赫兹值 165,屏幕仍然以 40hz 运行。

我怎样才能让它像在 Windows 上一样以 165hz 运行?


这是我的 lshw -c 视频:

*-display                 
       description: VGA compatible controller
       product: CometLake-H GT2 [UHD Graphics]
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       logical name: /dev/fb0
       version: 05
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list fb
       configuration: depth=32 driver=i915 latency=0 mode=2560x1440 visual=truecolor xres=2560 yres=1440
       resources: iomemory:600-5ff iomemory:400-3ff irq:138 memory:6002000000-6002ffffff memory:4000000000-400fffffff ioport:6000(size=64) memory:c0000-dffff

这是我的 lspci -k:

00:02.0 VGA compatible controller: Intel Corporation CometLake-H GT2 [UHD Graphics] (rev 05)
    DeviceName: Onboard - Video
    Subsystem: Tongfang Hongkong Limited UHD Graphics
    Kernel driver in use: i915
    Kernel modules: i915

这是我的 glxinfo:

OpenGL vendor string: Intel
OpenGL renderer string: Mesa Intel(R) UHD Graphics (CML GT2)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.3.5
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.3.5
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.3.5
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

答案1

经过长时间的努力我已经解决了这个问题。

解决方案:

真正的解决方案是:Intel Graphics(i915) 驱动程序应该更新

临时解决方案是编辑笔记本电脑屏幕的 EDID 文件并将像素速率更改为接近 655Mhz 限制。

如何更改 EDID 文件:

  1. 获取显示器的 EDID 二进制文件:cp /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/card0-eDP-1/edid ~/edid.bin(eDP-1 是屏幕,0000:00:02.0 是 Intel 驱动程序的 PCIe 总线 ID。您可以使用lspcivexrandr获取它们。)
  2. 使用以下程序在 Windows 或 Wine 中打开 edid.bin 文件:https://www.analogway.com/americas/products/software-tools/aw-edid-editor/
  3. 在“详细数据”选项卡中,使用“CVT 1.2 向导”并编写诸如 144hz 刷新率之类的内容。 (由于165hz的像素速率高于655Mhz,因此不接受165hz。因此您应该输入较小的值。)
  4. 将编辑好的edid.bin文件复制到/lib/firmware/edid/edid.bin
  5. 在文件上/etc/default/grubquiet splash像这样更改: quiet splash drm.edid_firmware=eDP-1:edid/edid.bin
  6. 将此脚本保存/etc/initramfs-tools/hooks/edid并运行chmod +x /etc/initramfs-tools/hooks/edid以使其可执行:
#!/bin/sh
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

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

. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line
mkdir -p "${DESTDIR}/lib/firmware/edid"
cp -a /lib/firmware/edid/edid.bin "${DESTDIR}/lib/firmware/edid/edid.bin"
exit 0
  1. 运行sudo update-initramfs -usudo update-grub
  2. 完毕!重启..

资料来源:

https://forums.developer.nvidia.com/t/165hz-internal-screen-stuck-at-40hz

https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/1814938/comments/5

https://gitlab.freedesktop.org/drm/intel/-/issues/125#note_1068317

答案2

如果您使用的是 Arch,请将 eminfedar 的步骤 6 和 7 替换为以下内容:

不要将脚本保存到/etc/initramfs-tools/hooks/edid,而是将其保存到/etc/initcpio/install/edid.

剧本:

#!/bin/bash

build() {
    add_file /lib/firmware/edid/edid.bin
}

help() {
    cat <<HELPEOF
This hook add support for 165Hz
HELPEOF
}

使其可执行chmod +x /etc/initcpio/install/edid

现在添加埃迪德/etc/mkinitcpio.conf到像这样的钩子数组的末尾HOOKS=(... fsck edid)

最后,使用 重新生成 initramfssudo mkinitcpio -P并使用 更新 grub sudo grub-mkconfig -o /boot/grub/grub.cfg

PS 确保刷新率edid.bin确实改变了,我的在只读我并不知道。

请与更多人分享这个解决方案,它非常有效地解决了笔记本电脑上普遍存在的问题。

相关内容