硬件解决方法

硬件解决方法是在驱动程序中执行的寄存器编程文档,属于平台的正常编程序列之外。硬件解决方法有一些基本类别,具体取决于它们的应用方式/时间

  • LRC 解决方法:解决方法涉及寄存器,这些寄存器会保存/恢复到/从硬件上下文映像。当初始化设备时,该列表会发出一次(通过加载寄存器立即命令),并保存在默认上下文中。然后,每个上下文创建都使用该默认上下文,以具有“primed golden 上下文”,即已经包含所有寄存器所需更改的上下文映像。

  • 引擎解决方法:只要重置特定引擎,就会应用这些 WA 的列表。一组引擎类也可能共享一个公共电源域,并且它们会一起重置。这种情况发生在某些平台上,涉及到渲染和计算引擎。在这种情况下,(至少)其中一个需要保留解决方法编程:驱动程序中采用的方法是将这些解决方法与注册的第一个计算/渲染引擎联系起来。当使用 GuC 提交执行时,引擎重置不受内核驱动程序控制,因此所涉及的寄存器列表会在引擎初始化时写入一次,然后传递给 GuC,GuC 会在重置发生之前/之后保存/恢复它们的值。请参阅 drivers/gpu/drm/xe/xe_guc_ads.c 作为参考。

  • GT 解决方法:只要这些寄存器恢复为其默认值,就会应用这些 WA 的列表:在 GPU 重置、暂停/恢复 [1] 等时。

  • 寄存器白名单:某些解决方法需要在用户空间中实现,但需要触及特权寄存器。内核中的白名单指示硬件允许进行访问。从内核端来看,这只是 MMIO 解决方法的一个特例(因为我们将这些要列入白名单的寄存器列表写入一些特殊的硬件寄存器)。

  • 解决方法批处理缓冲区:缓冲区由硬件在每次硬件上下文恢复时自动执行。这些缓冲区是在默认上下文中创建和编程的,因此硬件在切换上下文时始终会经历这些编程序列。对解决方法批处理缓冲区的支持通过以下硬件机制启用

    1. INDIRECT_CTX:默认上下文中提供了一个批处理缓冲区和一个偏移量,指示硬件在上下文恢复中达到该偏移量时跳转到该位置。驱动程序中的解决方法批处理缓冲区当前使用此机制用于所有平台。

    2. BB_PER_CTX_PTR:默认上下文中提供了一个批处理缓冲区,指示硬件指向一个缓冲区,以便在上下文中恢复序列中恢复引擎寄存器后继续执行。目前驱动程序中未使用此功能。

  • 其他/OOB:由于其性质,某些 WA 无法从中心位置应用。这些 WA 根据需要在代码的其他地方散布。与显示 IP 相关的解决方法是主要的例子。

注意

xe 中的硬件解决方法与 i915 中的工作方式相同,不同之处在于它们在代码中维护的方式。在 xe 中,它使用 xe_rtp 基础架构,因此解决方法可以保存在表中,从而采用更声明性的方法而不是过程性的方法。

内部 API

void xe_wa_process_oob(struct xe_gt *gt)

处理 OOB 解决方法表

参数

struct xe_gt *gt

要处理解决方法的 GT 实例

描述

处理此平台的 OOB 解决方法表,在 gt 中标记活动的解决方法。

void xe_wa_process_gt(struct xe_gt *gt)

处理 GT 解决方法表

参数

struct xe_gt *gt

要处理解决方法的 GT 实例

描述

处理此平台的 GT 解决方法表,将需要在 GT 级别应用的所有解决方法保存在 gt 中。

void xe_wa_process_engine(struct xe_hw_engine *hwe)

处理引擎解决方法表

参数

struct xe_hw_engine *hwe

要处理解决方法的引擎实例

描述

处理此平台的引擎解决方法表,将需要在引擎级别应用且与此引擎匹配的所有解决方法保存在 hwe 中。

void xe_wa_process_lrc(struct xe_hw_engine *hwe)

处理上下文解决方法表

参数

struct xe_hw_engine *hwe

要处理解决方法的引擎实例

描述

处理此平台的上下文解决方法表,将需要在上下文恢复时应用的所有解决方法保存在 hwe 中。这些是涉及属于硬件上下文映像一部分的寄存器的解决方法。

int xe_wa_init(struct xe_gt *gt)

使用解决方法簿记初始化 gt

参数

struct xe_gt *gt

要初始化的 GT 实例

描述

如果成功,则返回 0;否则,返回负错误代码。