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 *tiletile
u32 mboxPCODE 郵箱 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 *tiletile 例項
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 *xexe 例項
bool locked如果持有鎖為 true,否則為 false
描述
PCODE 初始化郵箱僅在根 tile 的根 gt 上輪詢,因為根 tile 僅在所有 tile 完成初始化後才提供初始化完成。僅在沒有鎖的早期探測和恢復路徑中的鎖呼叫。
成功返回 0,失敗返回 -error 數字。
-
void xe_pcode_init(struct xe_tile *tile)¶
初始化 PCODE 的元件
引數
struct xe_tile *tiletile 例項
描述
此函式初始化 xe_pcode 元件。僅在探測期間呼叫一次。
-
int xe_pcode_probe_early(struct xe_device *xe)¶
初始化 PCODE
引數
struct xe_device *xexe 例項
描述
此函式檢查 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
- 功能資訊
提供啟動狀態
- 郵政編碼資訊
提供有關失敗的資訊
- 溢位資訊
提供先前失敗的歷史記錄
- 輔助資訊
某些故障可能除了郵政編碼資訊外還有其他資訊