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,否则返回错误代码