暫存器表處理¶
內部基礎設施,用於定義應如何基於規則和操作更新暫存器。 可用於定義具有多個條目(每個暫存器一個)的表,這些條目將在某個時間點被遍歷以將值應用於具有匹配規則的暫存器。
內部 API¶
-
struct xe_rtp_action¶
針對任何匹配規則執行的操作
定義:
struct xe_rtp_action {
struct xe_reg reg;
u32 clr_bits;
u32 set_bits;
#define XE_RTP_NOCHECK .read_mask = 0;
u32 read_mask;
#define XE_RTP_ACTION_FLAG_ENGINE_BASE BIT(0);
u8 flags;
};
成員
reg暫存器
clr_bits更新暫存器時要清除的位。它始終是被修改的位的超集
set_bits更新暫存器時要設定的位
read_mask讀取值時要考慮的位的掩碼
flags應用於規則評估或操作的標誌
描述
此結構記錄了在具有匹配規則的暫存器中應採取的操作。操作示例:設定/清除位。
-
XE_RTP_RULE_PLATFORM¶
XE_RTP_RULE_PLATFORM (plat_)
建立匹配平臺的規則
-
XE_RTP_RULE_SUBPLATFORM¶
XE_RTP_RULE_SUBPLATFORM (plat_, sub_)
建立匹配平臺和子平臺的規則
-
XE_RTP_RULE_GRAPHICS_STEP¶
XE_RTP_RULE_GRAPHICS_STEP (start_, end_)
建立匹配圖形步進的規則
引數
start_匹配規則的第一個步進
end_不匹配規則的第一個步進
描述
請注意,匹配此規則的範圍是 [ start_, end_ ),即左閉右開。
有關預期用法,請參閱 XE_RTP_RULES()。
-
XE_RTP_RULE_MEDIA_STEP¶
XE_RTP_RULE_MEDIA_STEP (start_, end_)
建立匹配媒體步進的規則
引數
start_匹配規則的第一個步進
end_不匹配規則的第一個步進
描述
請注意,匹配此規則的範圍是 [ start_, end_ ),即左閉右開。
有關預期用法,請參閱 XE_RTP_RULES()。
-
XE_RTP_RULE_ENGINE_CLASS¶
XE_RTP_RULE_ENGINE_CLASS (cls_)
建立匹配引擎類的規則
-
XE_RTP_RULE_FUNC¶
XE_RTP_RULE_FUNC (func__)
建立使用回撥函式進行匹配的規則
引數
func__用於確定規則是否匹配的函式
描述
這允許執行更復雜的檢查。XE_RTP 基礎設施將簡單地呼叫傳遞的函式 func_,以確定此規則是否與裝置匹配。
有關預期用法,請參閱 XE_RTP_RULES()。
-
XE_RTP_RULE_GRAPHICS_VERSION¶
XE_RTP_RULE_GRAPHICS_VERSION (ver__)
建立匹配圖形版本的規則
-
XE_RTP_RULE_GRAPHICS_VERSION_RANGE¶
XE_RTP_RULE_GRAPHICS_VERSION_RANGE (ver_start__, ver_end__)
建立匹配圖形版本範圍的規則
引數
ver_start__要匹配的第一個圖形 IP 版本
ver_end__要匹配的最後一個圖形 IP 版本
描述
請注意,匹配此規則的範圍是 [ ver_start__, ver_end__ ],即左右都包含。
有關預期用法,請參閱 XE_RTP_RULES()。
-
XE_RTP_RULE_GRAPHICS_VERSION_ANY_GT¶
XE_RTP_RULE_GRAPHICS_VERSION_ANY_GT (ver__)
建立匹配任何 GT 上的圖形版本的規則
引數
ver__要匹配的圖形 IP 版本
描述
與 XE_RTP_RULE_GRAPHICS_VERSION 類似,但即使當前正在檢查的 GT 不是圖形型別,它也會匹配。 它允許在裝置包含具有該版本的圖形 IP 時,將 RTP 條目新增到另一個 GT。
有關預期用法,請參閱 XE_RTP_RULES()。
-
XE_RTP_RULE_MEDIA_VERSION¶
XE_RTP_RULE_MEDIA_VERSION (ver__)
建立匹配媒體版本的規則
-
XE_RTP_RULE_MEDIA_VERSION_RANGE¶
XE_RTP_RULE_MEDIA_VERSION_RANGE (ver_start__, ver_end__)
建立匹配媒體版本範圍的規則
引數
ver_start__要匹配的第一個媒體 IP 版本
ver_end__要匹配的最後一個媒體 IP 版本
描述
請注意,匹配此規則的範圍是 [ ver_start__, ver_end__ ],即左右都包含。
有關預期用法,請參閱 XE_RTP_RULES()。
-
XE_RTP_RULE_MEDIA_VERSION_ANY_GT¶
XE_RTP_RULE_MEDIA_VERSION_ANY_GT (ver__)
建立匹配任何 GT 上的媒體版本的規則
引數
ver__要匹配的媒體 IP 版本
描述
與 XE_RTP_RULE_MEDIA_VERSION 類似,但即使當前正在檢查的 GT 不是媒體型別,它也會匹配。 它允許在裝置包含具有該版本的媒體 IP 時,將 RTP 條目新增到另一個 GT。
有關預期用法,請參閱 XE_RTP_RULES()。
-
XE_RTP_RULE_IS_INTEGRATED¶
XE_RTP_RULE_IS_INTEGRATED
-
XE_RTP_RULE_IS_DISCRETE¶
XE_RTP_RULE_IS_DISCRETE
-
XE_RTP_RULE_OR¶
XE_RTP_RULE_OR
為 rtp 規則建立 OR 條件
描述
RTP 規則在評估時被 AND,並且所有規則都需要匹配。 XE_RTP_RULE_OR 允許建立一組規則,其中任何一個規則匹配都足以觸發操作。 例子
const struct xe_rtp_entry_sr entries[] = { ... { XE_RTP_NAME("test-entry"), XE_RTP_RULES(PLATFORM(DG2), OR, PLATFORM(TIGERLAKE)), ... }, ... };
-
XE_RTP_ACTION_WR¶
XE_RTP_ACTION_WR (reg_, val_, ...)
幫助程式將值寫入暫存器,覆蓋所有位
-
XE_RTP_ACTION_SET¶
XE_RTP_ACTION_SET (reg_, val_, ...)
在暫存器中設定 val_ 中的位。
引數
reg_暫存器
val_要在暫存器中設定的位
...要在
struct xe_rtp_action條目中覆蓋的其他欄位
描述
對於掩碼暫存器,這會轉換為單個寫入,而對於其他暫存器,這是 RMW。 對應的 bspec 符號是(例如對於位 2 和 5,但可以是任何位)
REGNAME[2] = 1 REGNAME[5] = 1
-
XE_RTP_ACTION_CLR¶
XE_RTP_ACTION_CLR (reg_, val_, ...)
在暫存器中清除 val_ 中的位。
引數
reg_暫存器
val_要在暫存器中清除的位
...要在
struct xe_rtp_action條目中覆蓋的其他欄位
描述
對於掩碼暫存器,這會轉換為單個寫入,而對於其他暫存器,這是 RMW。 對應的 bspec 符號是(例如對於位 2 和 5,但可以是任何位)
REGNAME[2] = 0 REGNAME[5] = 0
-
XE_RTP_ACTION_FIELD_SET¶
XE_RTP_ACTION_FIELD_SET (reg_, mask_bits_, val_, ...)
設定一個位範圍
引數
reg_暫存器
mask_bits_要在暫存器中更改的位掩碼,形成一個欄位
val_要在 mask_bits_ 表示的欄位中設定的值
...要在
struct xe_rtp_action條目中覆蓋的其他欄位
描述
對於掩碼暫存器,這會轉換為單個寫入,而對於其他暫存器,這是 RMW。 對應的 bspec 符號是
REGNAME[<end>:<start>] = VALUE
-
XE_RTP_ACTION_WHITELIST¶
XE_RTP_ACTION_WHITELIST (reg_, val_, ...)
將暫存器新增到使用者空間白名單
引數
reg_暫存器
val_要設定的特定於白名單的標誌
...要在
struct xe_rtp_action條目中覆蓋的其他欄位
描述
將暫存器新增到白名單,允許使用者空間使用常規使用者許可權修改 ster。
-
XE_RTP_NAME¶
XE_RTP_NAME (s_)
幫助程式在 xe_rtp_entry 中設定名稱
引數
s_描述此規則的名稱,通常是特定於硬體的編號
描述
TODO:也許將其移到除錯配置後面?
-
XE_RTP_ENTRY_FLAG¶
XE_RTP_ENTRY_FLAG (...)
幫助程式將多個標誌新增到 struct xe_rtp_entry_sr
引數
...條目標誌,不帶
XE_RTP_ENTRY_FLAG_字首
描述
幫助程式在定義 struct xe_rtp_entry 條目時自動新增 XE_RTP_ENTRY_FLAG_ 字首。例子
const struct xe_rtp_entry_sr wa_entries[] = {
...
{ XE_RTP_NAME("test-entry"),
...
XE_RTP_ENTRY_FLAG(FOREACH_ENGINE),
...
},
...
};
-
XE_RTP_ACTION_FLAG¶
XE_RTP_ACTION_FLAG (...)
幫助程式將多個標誌新增到
struct xe_rtp_action
引數
...操作標誌,不帶
XE_RTP_ACTION_FLAG_字首
描述
幫助程式在定義 struct xe_rtp_action 條目時自動新增 XE_RTP_ACTION_FLAG_ 字首。例子
const struct xe_rtp_entry_sr wa_entries[] = {
...
{ XE_RTP_NAME("test-entry"),
...
XE_RTP_ACTION_SET(..., XE_RTP_ACTION_FLAG(FOREACH_ENGINE)),
...
},
...
};
-
XE_RTP_RULES¶
XE_RTP_RULES (...)
幫助程式將多個規則設定為 struct xe_rtp_entry_sr 條目
引數
...規則
描述
至少需要一個規則,最多支援 12 個。 多個規則被 AND 在一起,即所有規則都必須評估為 true 才能處理該條目。 有關可能的匹配規則,請參閱 XE_RTP_MATCH_*。 例子
const struct xe_rtp_entry_sr wa_entries[] = {
...
{ XE_RTP_NAME("test-entry"),
XE_RTP_RULES(SUBPLATFORM(DG2, G10), GRAPHICS_STEP(A0, B0)),
...
},
...
};
-
XE_RTP_ACTIONS¶
XE_RTP_ACTIONS (...)
幫助程式將多個操作設定為 struct xe_rtp_entry_sr
引數
...要採取的行動
描述
至少需要一個操作,最多支援 12 個。 有關可能的操作,請參閱 XE_RTP_ACTION_*。 例子
const struct xe_rtp_entry_sr wa_entries[] = {
...
{ XE_RTP_NAME("test-entry"),
XE_RTP_RULES(...),
XE_RTP_ACTIONS(SET(..), SET(...), CLR(...)),
...
},
...
};
-
bool xe_rtp_match_even_instance(const struct xe_gt *gt, const struct xe_hw_engine *hwe)¶
如果引擎例項為偶數,則匹配
引數
const struct xe_gt *gtGT 結構
const struct xe_hw_engine *hwe引擎例項
返回
如果引擎例項為偶數,則返回 true,否則返回 false
-
void xe_rtp_process_ctx_enable_active_tracking(struct xe_rtp_process_ctx *ctx, unsigned long *active_entries, size_t n_entries)¶
啟用活動條目的跟蹤
引數
struct xe_rtp_process_ctx *ctx用於處理表的上下文
unsigned long *active_entries用於儲存活動條目的點陣圖
size_t n_entries要處理的條目數
描述
設定其他元資料以跟蹤哪些條目被認為是“活動的”,即它們的規則與條件匹配。 位永遠不會被清除:具有匹配規則的條目會設定點陣圖中相應的位。
-
void xe_rtp_process_to_sr(struct xe_rtp_process_ctx *ctx, const struct xe_rtp_entry_sr *entries, size_t n_entries, struct xe_reg_sr *sr)¶
處理所有 rtp 條目,將匹配的條目新增到儲存-恢復引數。
引數
struct xe_rtp_process_ctx *ctx用於處理表的上下文,帶有裝置、gt 或 hwe 之一
const struct xe_rtp_entry_sr *entries帶有 RTP 定義的表
size_t n_entries要處理的條目數,通常為 ARRAY_SIZE(entries)
struct xe_reg_sr *sr儲存-恢復結構,其中匹配的規則執行操作。 這可以看作是多個表的“合併檢視”。 每個暫存器設定的位預計不會與先前新增的條目衝突
描述
遍歷 entries 指向的表(帶有空哨兵),並將所有具有匹配規則的條目新增到 sr。 如果 hwe 不為 NULL,則其 mmio_base 用於計算正確的暫存器偏移量
-
void xe_rtp_process(struct xe_rtp_process_ctx *ctx, const struct xe_rtp_entry *entries)¶
處理所有 rtp entries,不執行任何操作。
引數
struct xe_rtp_process_ctx *ctx用於處理表的上下文,帶有裝置、gt 或 hwe 之一
const struct xe_rtp_entry *entries帶有 RTP 定義的表
描述
遍歷 entries 指向的表(帶有一個空的哨兵),執行規則。與 xe_rtp_process_to_sr() 的一個區別:因為這裡使用 struct xe_rtp_entry,所以每個條目沒有關聯的操作。它的主要用途是透過 xe_rtp_process_ctx_enable_active_tracking() 標記活動解決方法。