Oh GuC:除非您还升级固件,否则 Linux 5.19 上的 Intel ADL-P 图形将中断

作为对于那些已经购买 Alder Lake P 笔记本电脑或正在考虑购买一台笔记本电脑的人的公共服务公告,通过内核升级,您现在需要谨慎/意识到由于围绕 GuC 微控制器的版本化固件要求而破坏了加速图形支持。虽然我很惊讶 Linus Torvalds 允许这样做,或者想知道他是否甚至知道他是否知道,因为他过去关于 Linux 内核更新不会破坏用户空间的声明,英特尔 GuC 固件处理版本化并且不支持向后兼容性可能会给您的升级带来麻烦体验即将推出的 Linux 5.19 内核。

在完成我最近的Intel Core i7 1280P“Alder Lake P”Linux 基准测试之后这是使用 Linux 5.18 stable 完成的,我继续测试 Linux 5.19 内核,看看新内核的性能如何……毕竟,在某些系统上,v5.19 Git超过 5.18 和之前的版本有非常好的收益.

当使用方便的 Ubuntu Mainline Kernel PPA 日常构建跳到最新的 Linux 5.19 Git 时,我惊讶地发现加速图形无法正常工作。闪亮的全新英特尔 Evo Alder Lake P 笔记本电脑重新开始使用 LLVMpipe……认为这是一些随机硬件问题或现在处于 5.19-rc6 状态的未捕获错误,很快证明并非如此,而是英特尔有意做出的改变。查看dmesg输出时,由于缺少固件,Alder Lake P 图形无法初始化。

image.php_-12
在这台英特尔 ADL-P 笔记本电脑上升级到 Linux 5.19 导致 Xe 显卡无法工作,因为现在需要更新固件。

对于 Alder Lake P,GuC 微控制器的固件及其使用现在是强制性的。由于前几代英特尔显卡多年来一直使用 Skylake 的 Gen9 显卡,GuC 的使用一直是可选的。这种“图形微控制器”用于从驱动程序中卸载一些任务,并可用于低级图形上下文调度、HEVC/H.264 (HuC) 微控制器的身份验证,以及最近的电源管理。对于以前的硬件,默认情况下没有使用 GuC,但需要为 i915 驱动程序设置 GuC 模块参数(i915.enable_guc=1)。

现在有了 Alder Lake P 和所有未来的英特尔平台(包括 DG2/Alchemist 独立显卡),GuC 固件及其使用现在是强制性的,因为电源管理已卸载到这个微控制器。但这不是简单地确保存在 GuC 固件的问题,而是确保给定内核存在正确版本的 GuC 固件。

在 Linux 5.19 中,当升级这台 Core i7 1280P 笔记本电脑的内核时,这一点变得很明显,该笔记本电脑一直在愉快地运行 Linux 5.18,却发现 i915 初始化现在失败了。GuC 固件 69 已存在于系统上并正在使用中,但现在在 Linux 5.19 中,驱动程序希望存在 GuC 固件 70,并且不支持与加载先前固件的向后兼容性。GuC 固件/驱动程序接口似乎不稳定,现在升级到版本 70。

image.php_-11

Linux 5.19 的破坏来自此提交,删除了 GuC 69 固件并升级为 70。该提交消息还重申了 GuC 的持续搅动,更新需要更改驱动程序:

最新的 GuC 固件删除了上下文描述符池,转而在 create H2G 中传递所有创建数据。它还极大地简化了工作队列,并移除了用于多 LRC 提交的进程描述符。因此,删除所有提及 LRC 和进程描述符并相应地更新注册代码。

不幸的是,新的 API 还取消了在上下文注册时为调度策略设置默认值的能力。相反,必须发送后续 H2G。单个调度策略更新 H2G 命令也被删除,取而代之的是基于单个 KLV 的 H2G。因此,相应地更改更新包装器并在上下文注册期间调用它……

这不是他们第一次需要新的 GuC 固件,但至少在英特尔图形微控制器固件处理方面的先前工作是针对未发布点的硬件或对于 GuC 不是强制性的前几代硬件用法。现在使用 Linux 5.19,已发布笔记本电脑中的 Alder Lake P 图形如果不同时切换到新版本的固件,可能会损坏。至少尽管 GuC 版本不会破坏每个内核周期。

image.php_-13
下载最新的“GuC 70”固件二进制文件后,ADL-P Xe 图形工作正常。

由于 GuC 现在对于未来的硬件也是强制性的,因此英特尔用户在升级到新版本的内核时要牢记这一点。英特尔确实在 4 月份将 GuC 70 固件二进制文件添加到 linux-firmware.git 树中,但至少对于 Ubuntu 22.04 LTS 之类的产品,他们没有发布该固件,因为他们的旧 Linux 5.15 内核针对的是 GuC 69。旧的 GuC 固件用于linux-firmware.git 树中继续承载着各代 Intel。幸运的是,主要的 GuC 版本似乎并没有经常被引入,但它仍然是一个最终破坏用户空间的变化。

几年前,我认为 Linus Torvalds 反对类似的行为(如果我没记错的话,使用 WiFi 芯片组)新内核在破坏向后兼容性的同时不能强制要求更新固件,但我找不到我似乎记得的确切信息。但考虑到他总体上认为内核不应该破坏用户空间二进制兼容性并试图保持一致的用户体验的意见,英特尔 GuC 固件版本控制似乎与这一理想背道而驰。至少,现在您知道在 GuC 固件版本更改时在 Alder Lake P 和更新的平台上升级内核时可能需要处理的问题。

原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun176760.html

(0)
打赏 微信扫一扫不于多少! 微信扫一扫不于多少! 支付宝扫一扫礼轻情意重 支付宝扫一扫礼轻情意重
上一篇 2022年7月15日 上午11:01
下一篇 2022年7月15日

相关推荐