Pcode¶
Xe PCODE是负责与PCODE固件接口的组件。它应为其他Xe组件提供非常简单的ABI,但它是与PCODE通信的唯一和统一的地方。所有对PCODE的读取和写入操作都将是内部的且此组件私有的。
接下来是什么: - PCODE 硬件指标 - 用于显示操作的 PCODE
内部API¶
-
int xe_pcode_request(struct xe_tile *tile, u32 mbox, u32 request, u32 reply_mask, u32 reply, int timeout_base_ms)¶
发送 PCODE 请求直到确认
参数
struct xe_tile *tile
tile
u32 mbox
请求的目标 PCODE 邮箱 ID
u32 request
请求 ID
u32 reply_mask
用于检查请求确认的掩码
u32 reply
用于检查请求确认的值
int timeout_base_ms
启用抢占轮询的超时时间
描述
持续将 **request** 发送到 **mbox**,直到 PCODE 确认、PCODE 报告错误或 **timeout_base_ms**+50 毫秒的总超时时间到期。一旦 PCODE 回复的 dword 在应用 **reply_mask** 后等于 **reply**,则确认请求。首先在启用抢占的情况下轮询 **timeout_base_ms**,如果超时,则在禁用抢占的情况下再轮询 50 毫秒。
成功时返回 0,超时时返回 -ETIMEDOUT
,PCODE 报告的其他错误时返回 <0。
-
int xe_pcode_init_min_freq_table(struct xe_tile *tile, u32 min_gt_freq, u32 max_gt_freq)¶
初始化 PCODE 的 QOS 频率表
参数
struct xe_tile *tile
tile 实例
u32 min_gt_freq
最小 (RPn) GT 频率,单位为 50MHz。
u32 max_gt_freq
最大 (RP0) GT 频率,单位为 50MHz。
描述
此函数为适当的最小频率/功率控制决策初始化 PCODE 的 QOS 频率表,具体取决于当前请求的 GT 频率。对于较旧的平台,这是一个更完整的表,包括 IA 频率。但是,对于最新的平台,此表成为简单的 1-1 环与 GT 频率关系。尽管如此,如果不设置它,PCODE 可能不会针对某些内存频率做出正确的决策,并影响延迟。
成功时返回 0,失败时返回 -ERROR 数字,如果最大频率高于最小频率则返回 -EINVAL,以及其他直接从 PCODE 错误返回转换的错误: - -ENXIO:“非法命令” - -ETIMEDOUT:“超时” - -EINVAL:“非法数据” - -ENXIO,“非法子命令” - -EBUSY:“PCODE 已锁定” - -EOVERFLOW,“GT 比率超出范围” - -EACCES,“PCODE 已拒绝” - -EPROTO,“未知”
-
int xe_pcode_ready(struct xe_device *xe, bool locked)¶
确保 PCODE 已初始化
参数
struct xe_device *xe
xe 实例
bool locked
如果持有锁,则为 true,否则为 false
描述
仅在根 tile 的根 gt 上轮询 PCODE 初始化邮箱,因为只有在所有 tile 完成初始化后,根 tile 才会提供初始化完成的信息。仅在没有锁的早期探测以及恢复路径中的锁中调用。
成功时返回 0,失败时返回 -错误编号。
-
void xe_pcode_init(struct xe_tile *tile)¶
初始化 PCODE 的组件
参数
struct xe_tile *tile
tile 实例
描述
此函数初始化 xe_pcode 组件。仅在探测期间调用一次。
-
int xe_pcode_probe_early(struct xe_device *xe)¶
初始化 PCODE
参数
struct xe_device *xe
xe 实例
描述
此函数检查 PCODE 的初始化状态。仅在没有锁的早期探测期间调用一次。
成功时返回 0,否则返回错误代码