寄存器表处理¶
内部基础设施,用于定义应如何基于规则和操作更新寄存器。 可用于定义具有多个条目(每个寄存器一个)的表,这些条目将在某个时间点被遍历以将值应用于具有匹配规则的寄存器。
内部 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 *gt
GT 结构
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()
标记活动解决方法。