硬件变通方案

硬件变通方案是指记录在驱动程序中执行的寄存器编程,这些编程不属于平台的正常编程序列。变通方案有一些基本类别,具体取决于它们的应用方式/时间

  • LRC 变通方案:涉及到保存/从硬件上下文映像恢复的寄存器的变通方案。该列表在初始化设备时发出(通过加载寄存器立即命令),并保存在默认上下文中。然后,在每次创建上下文时使用该默认上下文来获得“预先准备好的黄金上下文”,即已经包含所有寄存器所需更改的上下文映像。

  • 引擎变通方案:每当特定引擎重置时,都会应用这些 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:在默认上下文中提供了一个批处理缓冲区,指示硬件在上下文恢复序列中恢复引擎寄存器后继续执行的缓冲区。目前在驱动程序中未使用。

  • 其他/带外:有些 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,否则返回负错误代码。