NOTE: The AMD HSMP driver is now part of the Linux kernel upstream starting in v5.18-rc1. Review kernel.org for updated versions of this driver.
AMD HSMP module to provide user interface to system management features
The Host System Management Port (HSMP) kernel module provides user level access to the HSMP mailboxes implemented by the firmware in the System Management Unit (SMU). Full documentation of the HSMP can be found in the Processor Programming Reference (PPR) for Family 19h on AMD's Developer Central.
https://developer.amd.com/resources/epyc-resources/epyc-specifications
E-SMI library provides C API fo the user space application on top of this module.
The amd_hsmp module is supported only on AMD Family 19h (including third-generation AMD EPYC processors (codenamed "Milan")) or later CPUs. Using the amd_hsmp module on earlier CPUs could produce unexpected results, and may cause the processor to operate outside of your motherboard or system specifications. Correspondingly, defaults to only executing on AMD Family 19h Model 0 ~ Fh, 10h ~ 1Fh, 30h ~ 3Fh, & A0 ~ AFh, family 1Ah Model 0 ~ 1fh EPYC processors and family 19h model 90 ~ 9fh MI300A processors.
See amd_hsmp.h for details about the IOCTL interface.
HSMP PCIe interface needs to be enabled in the BIOS. The CBS option can be found by navigating to the following path
If the option is disabled, calls to the SMU will result in a timeout.
Kernel development packages for the running kernel need to be installed prior to building the HSMP module. A Makefile is provided which should work with most kernel source trees.
To build the kernel module:
#> make This will generate hsmp_common.ko, hsmp_acpi.ko and amd_hsmp.ko modules.
To install the kernel module:
#> sudo make modules_install This will install hsmp modules at /lib/modules/<KERNEL_VERSION>/build. To clean the kernel module build directory:
#> make clean
If the HSMP module was installed using modules_install, you can use the modprobe command to load the module. #> sudo modprobe hsmp_acpi
To remove driver #> sudo modprobe -r hsmp_acpi
If module is not installed, use insmod to load from current directory. #> sudo insmod ./hsmp_common.ko #> sudo insmod ./hsmp_acpi.ko
To remove Driver #> sudo rmmod hsmp_acpi #> sudo rmmod hsmp_common
If the HSMP module was installed using modules_install, you can use the modprobe command to load the module. #> sudo modprobe -r amd_hsmp
To remove driver #> sudo modprobe -r amd_hsmp
If module is not installed, use insmod to load from current directory. #> sudo insmod ./amd_hsmp.ko #> sudo insmod ./hsmp_common.ko
To remove Driver #> sudo rmmod amd_hsmp #> sudo rmmod hsmp_common
Building Module with running version of kernel
Add the module to DKMS tree: #> sudo dkms add ../hsmp_driver
Build the module using DKMS: #> sudo dkms build amd_hsmp/2.4
Install the module using DKMS: #> sudo dkms install amd_hsmp/2.4
Load the module: #> sudo modprobe amd_hsmp
Building Module with specific version of kernel
Add the module to DKMS tree: #> sudo dkms add ../hsmp_driver
Build the module using DKMS: #> sudo dkms build amd_hsmp/2.4 -k linux_version
Install the module using DKMS: #> sudo dkms install amd_hsmp/2.4 -k linux_version Module is built: /lib/modules/linux_version/updates/dkms/
Notes: It is required to have specific linux verion header in /usr/src
To remove module from dkms tree #> sudo dkms remove -m amd_hsmp/2.4 --all #> sudo rm -rf /usr/src/amd_hsmp-2.4/