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 Ring vs 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

描述

PCODE 初始化郵箱僅在根 tile 的根 gt 上輪詢,因為根 tile 僅在所有 tile 完成初始化後才提供初始化完成。僅在沒有鎖的早期探測和恢復路徑中的鎖呼叫。

成功返回 0,失敗返回 -error 數字。

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,否則返回錯誤程式碼

啟動生存能力

啟動生存能力是一種基於軟體的工作流程,用於在啟動失敗狀態下恢復系統。這裡系統可恢復性與恢復負責啟動的韌體有關。

這是透過載入具有最低限度的驅動程式(沒有 drm 卡)來實現的,允許透過 mei 重新整理韌體並收集遙測資料。修改驅動程式的探測流程,使其在 pcode 初始化不完整且啟動狀態表示失敗時進入生存模式。

也可以使用透過 configfs 提供的生存模式屬性手動進入生存模式,這在多個用例中是有益的。它可用於解決 pcode 未檢測到故障或用於驗證目的的情況。它還可用於現場維修 (IFR),以修復單個卡,而不會影響節點中的其他卡。

使用以下命令手動啟用生存模式

# echo 1 > /sys/kernel/config/xe/0000:03:00.0/survivability_mode

有關如何使用 configfs 的更多詳細資訊,請參閱 Xe Configfs

生存模式由以下僅管理員可讀的 sysfs 指示,它提供額外的除錯資訊

/sys/bus/pci/devices/<device>/surivability_mode
功能資訊

提供啟動狀態

郵政編碼資訊

提供有關失敗的資訊

溢位資訊

提供先前失敗的歷史記錄

輔助資訊

某些故障可能除了郵政編碼資訊外還有其他資訊