Akshay Gupta | 04165fb | 2021-07-26 19:06:14 +0530 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0-or-later |
| 2 | |
| 3 | Kernel driver sbrmi |
| 4 | =================== |
| 5 | |
| 6 | Supported hardware: |
| 7 | |
| 8 | * Sideband Remote Management Interface (SB-RMI) compliant AMD SoC |
| 9 | device connected to the BMC via the APML. |
| 10 | |
| 11 | Prefix: 'sbrmi' |
| 12 | |
| 13 | Addresses scanned: This driver doesn't support address scanning. |
| 14 | |
| 15 | To instantiate this driver on an AMD CPU with SB-RMI |
| 16 | support, the i2c bus number would be the bus connected from the board |
| 17 | management controller (BMC) to the CPU. |
| 18 | The SMBus address is really 7 bits. Some vendors and the SMBus |
| 19 | specification show the address as 8 bits, left justified with the R/W |
| 20 | bit as a write (0) making bit 0. Some vendors use only the 7 bits |
| 21 | to describe the address. |
| 22 | As mentioned in AMD's APML specification, The SB-RMI address is |
| 23 | normally 78h(0111 100W) or 3Ch(011 1100) for socket 0 and 70h(0111 000W) |
| 24 | or 38h(011 1000) for socket 1, but it could vary based on hardware |
| 25 | address select pins. |
| 26 | |
| 27 | Datasheet: The SB-RMI interface and protocol along with the Advanced |
| 28 | Platform Management Link (APML) Specification is available |
| 29 | as part of the open source SoC register reference at: |
| 30 | |
| 31 | https://www.amd.com/en/support/tech-docs?keyword=55898 |
| 32 | |
| 33 | Author: Akshay Gupta <akshay.gupta@amd.com> |
| 34 | |
| 35 | Description |
| 36 | ----------- |
| 37 | |
| 38 | The APML provides a way to communicate with the SB Remote Management interface |
| 39 | (SB-RMI) module from the external SMBus master that can be used to report socket |
| 40 | power on AMD platforms using mailbox command and resembles a typical 8-pin remote |
| 41 | power sensor's I2C interface to BMC. |
| 42 | |
| 43 | This driver implements current power with power cap and power cap max. |
| 44 | |
| 45 | sysfs-Interface |
| 46 | --------------- |
| 47 | Power sensors can be queried and set via the standard ``hwmon`` interface |
| 48 | on ``sysfs``, under the directory ``/sys/class/hwmon/hwmonX`` for some value |
| 49 | of ``X`` (search for the ``X`` such that ``/sys/class/hwmon/hwmonX/name`` has |
| 50 | content ``sbrmi``) |
| 51 | |
| 52 | ================ ===== ======================================================== |
| 53 | Name Perm Description |
| 54 | ================ ===== ======================================================== |
| 55 | power1_input RO Current Power consumed |
| 56 | power1_cap RW Power limit can be set between 0 and power1_cap_max |
| 57 | power1_cap_max RO Maximum powerlimit calculated and reported by the SMU FW |
| 58 | ================ ===== ======================================================== |
| 59 | |
| 60 | The following example show how the 'Power' attribute from the i2c-addresses |
| 61 | can be monitored using the userspace utilities like ``sensors`` binary:: |
| 62 | |
| 63 | # sensors |
| 64 | sbrmi-i2c-1-38 |
| 65 | Adapter: bcm2835 I2C adapter |
| 66 | power1: 61.00 W (cap = 225.00 W) |
| 67 | |
| 68 | sbrmi-i2c-1-3c |
| 69 | Adapter: bcm2835 I2C adapter |
| 70 | power1: 28.39 W (cap = 224.77 W) |
| 71 | # |
| 72 | |
| 73 | Also, Below shows how get and set the values from sysfs entries individually:: |
| 74 | # cat /sys/class/hwmon/hwmon1/power1_cap_max |
| 75 | 225000000 |
| 76 | |
| 77 | # echo 180000000 > /sys/class/hwmon/hwmon1/power1_cap |
| 78 | # cat /sys/class/hwmon/hwmon1/power1_cap |
| 79 | 180000000 |