硬體解決方法¶
硬體解決方法是在驅動程式中執行的暫存器程式設計文件,屬於平臺的正常程式設計序列之外。硬體解決方法有一些基本類別,具體取決於它們的應用方式/時間
LRC 解決方法:解決方法涉及暫存器,這些暫存器會儲存/恢復到/從硬體上下文映像。當初始化裝置時,該列表會發出一次(透過載入暫存器立即命令),並儲存在預設上下文中。然後,每個上下文建立都使用該預設上下文,以具有“primed golden 上下文”,即已經包含所有暫存器所需更改的上下文映像。
引擎解決方法:只要重置特定引擎,就會應用這些 WA 的列表。一組引擎類也可能共享一個公共電源域,並且它們會一起重置。這種情況發生在某些平臺上,涉及到渲染和計算引擎。在這種情況下,(至少)其中一個需要保留解決方法程式設計:驅動程式中採用的方法是將這些解決方法與註冊的第一個計算/渲染引擎聯絡起來。當使用 GuC 提交執行時,引擎重置不受核心驅動程式控制,因此所涉及的暫存器列表會在引擎初始化時寫入一次,然後傳遞給 GuC,GuC 會在重置發生之前/之後儲存/恢復它們的值。請參閱
drivers/gpu/drm/xe/xe_guc_ads.c作為參考。GT 解決方法:只要這些暫存器恢復為其預設值,就會應用這些 WA 的列表:在 GPU 重置、暫停/恢復 [1] 等時。
暫存器白名單:某些解決方法需要在使用者空間中實現,但需要觸及特權暫存器。核心中的白名單指示硬體允許進行訪問。從核心端來看,這只是 MMIO 解決方法的一個特例(因為我們將這些要列入白名單的暫存器列表寫入一些特殊的硬體暫存器)。
解決方法批處理緩衝區:緩衝區由硬體在每次硬體上下文恢復時自動執行。這些緩衝區是在預設上下文中建立和程式設計的,因此硬體在切換上下文時始終會經歷這些程式設計序列。對解決方法批處理緩衝區的支援透過以下硬體機制啟用
INDIRECT_CTX:預設上下文中提供了一個批處理緩衝區和一個偏移量,指示硬體在上下文恢復中達到該偏移量時跳轉到該位置。驅動程式中的解決方法批處理緩衝區當前使用此機制用於所有平臺。
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;否則,返回負錯誤程式碼。