1*4d95514dSAkshay Gupta.. SPDX-License-Identifier: GPL-2.0 2*4d95514dSAkshay Gupta 3*4d95514dSAkshay Gupta======================= 4*4d95514dSAkshay GuptaAMD SIDE BAND interface 5*4d95514dSAkshay Gupta======================= 6*4d95514dSAkshay Gupta 7*4d95514dSAkshay GuptaSome AMD Zen based processors supports system management 8*4d95514dSAkshay Guptafunctionality via side-band interface (SBI) called 9*4d95514dSAkshay GuptaAdvanced Platform Management Link (APML). APML is an I2C/I3C 10*4d95514dSAkshay Guptabased 2-wire processor target interface. APML is used to 11*4d95514dSAkshay Guptacommunicate with the Remote Management Interface 12*4d95514dSAkshay Gupta(SB Remote Management Interface (SB-RMI) 13*4d95514dSAkshay Guptaand SB Temperature Sensor Interface (SB-TSI)). 14*4d95514dSAkshay Gupta 15*4d95514dSAkshay GuptaMore details on the interface can be found in chapter 16*4d95514dSAkshay Gupta"5 Advanced Platform Management Link (APML)" of the family/model PPR [1]_. 17*4d95514dSAkshay Gupta 18*4d95514dSAkshay Gupta.. [1] https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip 19*4d95514dSAkshay Gupta 20*4d95514dSAkshay Gupta 21*4d95514dSAkshay GuptaSBRMI device 22*4d95514dSAkshay Gupta============ 23*4d95514dSAkshay Gupta 24*4d95514dSAkshay Guptaapml_sbrmi driver under the drivers/misc/amd-sbi creates miscdevice 25*4d95514dSAkshay Gupta/dev/sbrmi-* to let user space programs run APML mailbox, CPUID, 26*4d95514dSAkshay GuptaMCAMSR and register xfer commands. 27*4d95514dSAkshay Gupta 28*4d95514dSAkshay GuptaRegister sets is common across APML protocols. IOCTL is providing synchronization 29*4d95514dSAkshay Guptaamong protocols as transactions may create race condition. 30*4d95514dSAkshay Gupta 31*4d95514dSAkshay Gupta$ ls -al /dev/sbrmi-3c 32*4d95514dSAkshay Guptacrw------- 1 root root 10, 53 Jul 10 11:13 /dev/sbrmi-3c 33*4d95514dSAkshay Gupta 34*4d95514dSAkshay Guptaapml_sbrmi driver registers hwmon sensors for monitoring power_cap_max, 35*4d95514dSAkshay Guptacurrent power consumption and managing power_cap. 36*4d95514dSAkshay Gupta 37*4d95514dSAkshay GuptaCharacteristics of the dev node: 38*4d95514dSAkshay Gupta * Differnet xfer protocols are defined: 39*4d95514dSAkshay Gupta * Mailbox 40*4d95514dSAkshay Gupta * CPUID 41*4d95514dSAkshay Gupta * MCA_MSR 42*4d95514dSAkshay Gupta * Register xfer 43*4d95514dSAkshay Gupta 44*4d95514dSAkshay GuptaAccess restrictions: 45*4d95514dSAkshay Gupta * Only root user is allowed to open the file. 46*4d95514dSAkshay Gupta * APML Mailbox messages and Register xfer access are read-write, 47*4d95514dSAkshay Gupta * CPUID and MCA_MSR access is read-only. 48*4d95514dSAkshay Gupta 49*4d95514dSAkshay GuptaDriver IOCTLs 50*4d95514dSAkshay Gupta============= 51*4d95514dSAkshay Gupta 52*4d95514dSAkshay Gupta.. c:macro:: SBRMI_IOCTL_MBOX_CMD 53*4d95514dSAkshay Gupta.. kernel-doc:: include/uapi/misc/amd-apml.h 54*4d95514dSAkshay Gupta :doc: SBRMI_IOCTL_MBOX_CMD 55*4d95514dSAkshay Gupta.. c:macro:: SBRMI_IOCTL_CPUID_CMD 56*4d95514dSAkshay Gupta.. kernel-doc:: include/uapi/misc/amd-apml.h 57*4d95514dSAkshay Gupta :doc: SBRMI_IOCTL_CPUID_CMD 58*4d95514dSAkshay Gupta.. c:macro:: SBRMI_IOCTL_MCAMSR_CMD 59*4d95514dSAkshay Gupta.. kernel-doc:: include/uapi/misc/amd-apml.h 60*4d95514dSAkshay Gupta :doc: SBRMI_IOCTL_MCAMSR_CMD 61*4d95514dSAkshay Gupta.. c:macro:: SBRMI_IOCTL_REG_XFER_CMD 62*4d95514dSAkshay Gupta.. kernel-doc:: include/uapi/misc/amd-apml.h 63*4d95514dSAkshay Gupta :doc: SBRMI_IOCTL_REG_XFER_CMD 64*4d95514dSAkshay Gupta 65*4d95514dSAkshay GuptaUser-space usage 66*4d95514dSAkshay Gupta================ 67*4d95514dSAkshay Gupta 68*4d95514dSAkshay GuptaTo access side band interface from a C program. 69*4d95514dSAkshay GuptaFirst, user need to include the headers:: 70*4d95514dSAkshay Gupta 71*4d95514dSAkshay Gupta #include <uapi/misc/amd-apml.h> 72*4d95514dSAkshay Gupta 73*4d95514dSAkshay GuptaWhich defines the supported IOCTL and data structure to be passed 74*4d95514dSAkshay Guptafrom the user space. 75*4d95514dSAkshay Gupta 76*4d95514dSAkshay GuptaNext thing, open the device file, as follows:: 77*4d95514dSAkshay Gupta 78*4d95514dSAkshay Gupta int file; 79*4d95514dSAkshay Gupta 80*4d95514dSAkshay Gupta file = open("/dev/sbrmi-*", O_RDWR); 81*4d95514dSAkshay Gupta if (file < 0) { 82*4d95514dSAkshay Gupta /* ERROR HANDLING */ 83*4d95514dSAkshay Gupta exit(1); 84*4d95514dSAkshay Gupta } 85*4d95514dSAkshay Gupta 86*4d95514dSAkshay GuptaThe following IOCTLs are defined: 87*4d95514dSAkshay Gupta 88*4d95514dSAkshay Gupta``#define SB_BASE_IOCTL_NR 0xF9`` 89*4d95514dSAkshay Gupta``#define SBRMI_IOCTL_MBOX_CMD _IOWR(SB_BASE_IOCTL_NR, 0, struct apml_mbox_msg)`` 90*4d95514dSAkshay Gupta``#define SBRMI_IOCTL_CPUID_CMD _IOWR(SB_BASE_IOCTL_NR, 1, struct apml_cpuid_msg)`` 91*4d95514dSAkshay Gupta``#define SBRMI_IOCTL_MCAMSR_CMD _IOWR(SB_BASE_IOCTL_NR, 2, struct apml_mcamsr_msg)`` 92*4d95514dSAkshay Gupta``#define SBRMI_IOCTL_REG_XFER_CMD _IOWR(SB_BASE_IOCTL_NR, 3, struct apml_reg_xfer_msg)`` 93*4d95514dSAkshay Gupta 94*4d95514dSAkshay Gupta 95*4d95514dSAkshay GuptaUser space C-APIs are made available by esmi_oob_library, hosted at 96*4d95514dSAkshay Gupta[2]_ which is provided by the E-SMS project [3]_. 97*4d95514dSAkshay Gupta 98*4d95514dSAkshay Gupta.. [2] https://github.com/amd/esmi_oob_library 99*4d95514dSAkshay Gupta.. [3] https://www.amd.com/en/developer/e-sms.html 100