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