AMD SIDE BAND 介面¶
一些基於 AMD Zen 的處理器透過稱為高階平臺管理連結 (APML) 的邊帶介面 (SBI) 支援系統管理功能。 APML 是一個基於 I2C/I3C 的雙線處理器目標介面。 APML 用於與遠端管理介面(SB 遠端管理介面(SB-RMI)和 SB 溫度感測器介面(SB-TSI))通訊。
有關該介面的更多詳細資訊,請參見系列/型號 PPR [1] 的“5 高階平臺管理連結(APML)”章節。
SBRMI 裝置¶
drivers/misc/amd-sbi 下的 apml_sbrmi 驅動程式建立 miscdevice /dev/sbrmi-*,以允許使用者空間程式執行 APML 郵箱、CPUID、MCAMSR 和暫存器 xfer 命令。
暫存器集在 APML 協議之間是通用的。 IOCTL 提供協議之間的同步,因為事務可能會產生競爭條件。
$ ls -al /dev/sbrmi-3c crw------- 1 root root 10, 53 Jul 10 11:13 /dev/sbrmi-3c
apml_sbrmi 驅動程式註冊 hwmon 感測器,用於監視 power_cap_max,當前功耗和管理 power_cap。
- dev 節點的特徵
- 定義了不同的 xfer 協議
郵箱
CPUID
MCA_MSR
暫存器 xfer
- 訪問限制
只有 root 使用者才能開啟該檔案。
APML 郵箱訊息和暫存器 xfer 訪問是讀寫的,
CPUID 和 MCA_MSR 訪問是隻讀的。
驅動程式 IOCTL¶
-
SBRMI_IOCTL_MBOX_CMD¶
引數
- struct apml_mbox_msg
指向將包含協議資訊的
struct apml_mbox_msg的指標
描述 使用通用 _IOWR 的 APML 訊息的 IOCTL 命令。 IOCTL 提供使用者空間訪問 AMD 邊帶郵箱協議 - 郵箱訊息讀/寫 (0x0~0xFF) - 如果以上任何一項都不成立,則返回“-EFAULT”,“如果返回“-EPROTOTYPE”錯誤,則提供其他錯誤詳細資訊
-
SBRMI_IOCTL_CPUID_CMD¶
引數
- struct apml_cpuid_msg
指向將包含協議資訊的
struct apml_cpuid_msg的指標
描述 使用通用 _IOWR 的 APML 訊息的 IOCTL 命令。 IOCTL 提供使用者空間訪問 AMD 邊帶 cpuid 協議 - CPUID 協議以獲取執行緒級別的函式/Ext 函式的 CPU 詳細資訊 - 如果以上任何一項都不成立,則返回“-EFAULT”,“如果返回“-EPROTOTYPE”錯誤,則提供其他錯誤詳細資訊
-
SBRMI_IOCTL_MCAMSR_CMD¶
引數
- struct apml_mcamsr_msg
指向將包含協議資訊的
struct apml_mcamsr_msg的指標
描述 使用通用 _IOWR 的 APML 訊息的 IOCTL 命令。 IOCTL 提供使用者空間訪問 AMD 邊帶 MCAMSR 協議 - MCAMSR 協議以獲取執行緒級別的函式的 MCA bank 詳細資訊 - 如果以上任何一項都不成立,則返回“-EFAULT”,“如果返回“-EPROTOTYPE”錯誤,則提供其他錯誤詳細資訊
-
SBRMI_IOCTL_REG_XFER_CMD¶
引數
- struct apml_reg_xfer_msg
指向將包含協議資訊的
struct apml_reg_xfer_msg的指標
描述 使用通用 _IOWR 的 APML 訊息的 IOCTL 命令。 IOCTL 提供使用者空間訪問 AMD 邊帶暫存器 xfer 協議 - 暫存器 xfer 協議以獲取/設定給定偏移量的硬體暫存器
使用者空間用法¶
要從 C 程式訪問邊帶介面。 首先,使用者需要包含標頭檔案
#include <uapi/misc/amd-apml.h>
這定義了受支援的 IOCTL 和要從使用者空間傳遞的資料結構。
接下來,開啟裝置檔案,如下所示
int file;
file = open("/dev/sbrmi-*", O_RDWR);
if (file < 0) {
/* ERROR HANDLING */
exit(1);
}
定義了以下 IOCTL
#define SB_BASE_IOCTL_NR 0xF9 #define SBRMI_IOCTL_MBOX_CMD _IOWR(SB_BASE_IOCTL_NR, 0, struct apml_mbox_msg) #define SBRMI_IOCTL_CPUID_CMD _IOWR(SB_BASE_IOCTL_NR, 1, struct apml_cpuid_msg) #define SBRMI_IOCTL_MCAMSR_CMD _IOWR(SB_BASE_IOCTL_NR, 2, struct apml_mcamsr_msg) #define SBRMI_IOCTL_REG_XFER_CMD _IOWR(SB_BASE_IOCTL_NR, 3, struct apml_reg_xfer_msg)
使用者空間 C-API 由 esmi_oob_library 提供,託管在 [2],由 E-SMS 專案 [3] 提供。