Linux

i915 驅動程序在 165hz 螢幕上卡在 40hz

  • January 17, 2022

我的筆記型電腦上有 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:

經過長時間的努力,我已經解決了這個問題。

解決方案:

真正的解決方案是:英特爾顯卡(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 是英特爾驅動程序的 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/grub,更改quiet 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

引用自:https://unix.stackexchange.com/questions/680356