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] 提供。