[2022-09-23 追記] BIOS アップデート(n3buj05w)で解決した! https://support.lenovo.com/jp/ja/downloads/ds557163-bios-update-utility-bootable-cd-for-windows-11-10-64-bit-thinkpad-t14-gen-3-p14s-gen-3-t16-gen-1-p16s-gen-1
前回の続き
ThinkPad T14 Gen3 の Ubuntu がサスペンドすると正常に復帰しない。
画面が消えたまま。10秒くらい待ってると点灯するけど数秒でまた消える…というのを繰り返し。 X が起動してると何もわからないので、コンソールでサスペンドを試すとこんなメッセージが出てた。
i915 0000:00:02.0: [drm] *ERROR* Failed to write source OUI i915 0000:00:02.0: [drm] *ERROR* [ENCODER:235:DDI A/PHY A][DPRX] Failed to enable link training i915 0000:00:02.0: [drm] *ERROR* Failed to read DPCD register 0x92 i915 0000:00:02.0: [drm] *ERROR* Failed to write source OUI i915 0000:00:02.0: [drm] *ERROR* [ENCODER:235:DDI A/PHY A][DPRX] Failed to enable link training i915 0000:00:02.0: [drm] *ERROR* Failed to read DPCD register 0x92 i915 0000:00:02.0: [drm] *ERROR* Failed to read DPCD register 0x92 i915 0000:00:02.0: [drm] *ERROR* Failed to write source OUI 〜以下繰り返し〜
一応、Alt + PrtSc + [R] [E] [I] [S] [U] [B]
のアレは効くので電源ボタンを長押ししなくても再起動は可能。
Ubuntu をセットアップしたのが 7/10 で、それ以降時間のあるときにググってみたり、Ubuntu mainlineに新しいカーネルが出てれば試してみたりしたんだけど、解決しなかった。
今日またいつものようにググってたら新しい情報をみつけた。
Ubuntu じゃなくて Arch Linux だけど、ThinkPad T14 Gen3 Intel版でサスペンドが正常に働かずに画面がついたり消えたりする…というようなことが書かれてる。 ThinkPad T シリーズの BIOS にはバグがあって、HDMI ポートが存在しない eDP と共有しているとかなんとか(よくわかってない)。
i915 カーネルモジュールにパッチを当てて作り直せばいいっぽい。これは期待!
カーネルのバージョンが違うんで、パッチはそのままは適用できないけど、似たような処理を探してテキトーに。
i915.ko は linux-modules-extra-5.15.0-43-generic に含まれてる:
~% dpkg -S i915.ko linux-modules-extra-5.15.0-43-generic: /lib/modules/5.15.0-43-generic/kernel/drivers/gpu/drm/i915/i915.ko
カーネルのソースをもってきて、該当ソースを改変:
~% mkdir /tmp/x ~% cd /tmp/x /tmp/x% apt source linux-modules-extra-5.15.0-43-generic ... /tmp/x% cd linux-5.15.0 /tmp/x/linux-5.15.0% vim ./drivers/gpu/drm/i915/display/intel_bios.c
差分。return;
をコメントアウトしただけ:
/tmp/x/linux-5.15.0% diff -u ./drivers/gpu/drm/i915/display/intel_bios.c.orig ./drivers/gpu/drm/i915/display/intel_bios.c --- ./drivers/gpu/drm/i915/display/intel_bios.c.orig 2022-07-24 17:09:36.000000000 +0900 +++ ./drivers/gpu/drm/i915/display/intel_bios.c 2022-07-24 17:11:26.940061516 +0900 @@ -1950,7 +1950,7 @@ drm_dbg_kms(&i915->drm, "More than one child device for port %c in VBT, using the first.\n", port_name(port)); - return; +// return; } sanitize_device_type(devdata, port);
パッケージバージョンを指定する。debian.master/changelog
の先頭にテキトーに追加:
linux (5.15.0-43.99tmtms) jammy; urgency=medium * i915 patch
ABI check でエラーになるので無視するように設定:
/tmp/x/linux-5.15.0% touch debian.master/abi/amd64/ignore
deb パッケージを作成:
/tmp/x/linux-5.15.0% chmod +x scripts/* /tmp/x/linux-5.15.0% debuild --no-lintian -uc -us -b ... /tmp/x/linux-5.15.0% cd .. /tmp/x% ls *.deb linux-buildinfo-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb linux-cloud-tools-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb linux-cloud-tools-5.15.0-43_5.15.0-43.99tmtms_amd64.deb linux-cloud-tools-common_5.15.0-43.99tmtms_all.deb linux-doc_5.15.0-43.99tmtms_all.deb linux-headers-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb linux-headers-5.15.0-43_5.15.0-43.99tmtms_all.deb linux-image-unsigned-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb linux-libc-dev_5.15.0-43.99tmtms_amd64.deb linux-modules-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb linux-modules-extra-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb linux-modules-iwlwifi-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb linux-source-5.15.0_5.15.0-43.99tmtms_all.deb linux-tools-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb linux-tools-5.15.0-43_5.15.0-43.99tmtms_amd64.deb linux-tools-common_5.15.0-43.99tmtms_all.deb linux-tools-host_5.15.0-43.99tmtms_all.deb
一時間くらい掛かる。このうち必要なのは linux-modules-extra-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb
だけなので、これだけ作る方法はないんかな…。
インストール:
/tmp/x% sudo dpkg -i linux-modules-extra-5.15.0-43-generic_5.15.0-43.99tmtms_amd64.deb ...
Linux を再起動。
無事サスペンドできるようになった。わーい 🎉🎉🎉
本体の HDMI が使えなかったのも同じ原因だったらしく、HDMI もちゃんと使えるようになった。わーい 👏👏👏
カーネルアップデートのたびにこれをやるのは面倒だし忘れそうだから、Lenovo さんは早く BIOS を修正して欲しい…。
[2022/9/23 追記] BIOS アップデート(n3buj05w)で解決した! https://support.lenovo.com/jp/ja/downloads/ds557163-bios-update-utility-bootable-cd-for-windows-11-10-64-bit-thinkpad-t14-gen-3-p14s-gen-3-t16-gen-1-p16s-gen-1