xref: /linux/Documentation/misc-devices/amd-sbi.rst (revision c26f4fbd58375bd6ef74f95eb73d61762ad97c59)
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