| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- .. SPDX-License-Identifier: GPL-2.0
- =======================
- AMD SIDE BAND interface
- =======================
- Some AMD Zen based processors supports system management
- functionality via side-band interface (SBI) called
- Advanced Platform Management Link (APML). APML is an I2C/I3C
- based 2-wire processor target interface. APML is used to
- communicate with the Remote Management Interface
- (SB Remote Management Interface (SB-RMI)
- and SB Temperature Sensor Interface (SB-TSI)).
- More details on the interface can be found in chapter
- "5 Advanced Platform Management Link (APML)" of the family/model PPR [1]_.
- .. [1] https://docs.amd.com/v/u/en-US/55898_B1_pub_0_50
- SBRMI device
- ============
- apml_sbrmi driver under the drivers/misc/amd-sbi creates miscdevice
- /dev/sbrmi-* to let user space programs run APML mailbox, CPUID,
- MCAMSR and register xfer commands.
- Register sets is common across APML protocols. IOCTL is providing synchronization
- among protocols as transactions may create race condition.
- .. code-block:: bash
- $ ls -al /dev/sbrmi-3c
- crw------- 1 root root 10, 53 Jul 10 11:13 /dev/sbrmi-3c
- apml_sbrmi driver registers hwmon sensors for monitoring power_cap_max,
- current power consumption and managing power_cap.
- Characteristics of the dev node:
- * Differnet xfer protocols are defined:
- * Mailbox
- * CPUID
- * MCA_MSR
- * Register xfer
- Access restrictions:
- * Only root user is allowed to open the file.
- * APML Mailbox messages and Register xfer access are read-write,
- * CPUID and MCA_MSR access is read-only.
- Driver IOCTLs
- =============
- .. c:macro:: SBRMI_IOCTL_MBOX_CMD
- .. kernel-doc:: include/uapi/misc/amd-apml.h
- :doc: SBRMI_IOCTL_MBOX_CMD
- .. c:macro:: SBRMI_IOCTL_CPUID_CMD
- .. kernel-doc:: include/uapi/misc/amd-apml.h
- :doc: SBRMI_IOCTL_CPUID_CMD
- .. c:macro:: SBRMI_IOCTL_MCAMSR_CMD
- .. kernel-doc:: include/uapi/misc/amd-apml.h
- :doc: SBRMI_IOCTL_MCAMSR_CMD
- .. c:macro:: SBRMI_IOCTL_REG_XFER_CMD
- .. kernel-doc:: include/uapi/misc/amd-apml.h
- :doc: SBRMI_IOCTL_REG_XFER_CMD
- User-space usage
- ================
- To access side band interface from a C program.
- First, user need to include the headers::
- #include <uapi/misc/amd-apml.h>
- Which defines the supported IOCTL and data structure to be passed
- from the user space.
- Next thing, open the device file, as follows::
- int file;
- file = open("/dev/sbrmi-*", O_RDWR);
- if (file < 0) {
- /* ERROR HANDLING */
- exit(1);
- }
- The following IOCTLs are defined:
- ``#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)``
- User space C-APIs are made available by esmi_oob_library, hosted at
- [2]_ which is provided by the E-SMS project [3]_.
- .. [2] https://github.com/amd/esmi_oob_library
- .. [3] https://www.amd.com/en/developer/e-sms.html
|