ssphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget%/translations/zh_CN/arch/x86/amd_hsmpmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/zh_TW/arch/x86/amd_hsmpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/it_IT/arch/x86/amd_hsmpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ja_JP/arch/x86/amd_hsmpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/ko_KR/arch/x86/amd_hsmpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget%/translations/sp_SP/arch/x86/amd_hsmpmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh?/var/lib/git/docbuild/linux/Documentation/arch/x86/amd_hsmp.rsthKubhsection)}(hhh](htitle)}(hAMD HSMP interfaceh]hAMD HSMP interface}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hNewer Fam19h(model 0x00-0x1f, 0x30-0x3f, 0x90-0x9f, 0xa0-0xaf), Fam1Ah(model 0x00-0x1f) EPYC server line of processors from AMD support system management functionality via HSMP (Host System Management Port).h]hNewer Fam19h(model 0x00-0x1f, 0x30-0x3f, 0x90-0x9f, 0xa0-0xaf), Fam1Ah(model 0x00-0x1f) EPYC server line of processors from AMD support system management functionality via HSMP (Host System Management Port).}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hThe Host System Management Port (HSMP) is an interface to provide OS-level software with access to system management functions via a set of mailbox registers.h]hThe Host System Management Port (HSMP) is an interface to provide OS-level software with access to system management functions via a set of mailbox registers.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hMore details on the interface can be found in chapter "7 Host System Management Port (HSMP)" of the family/model PPR Eg: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.ziph](h}More details on the interface can be found in chapter “7 Host System Management Port (HSMP)” of the family/model PPR Eg: }(hhhhhNhNubh reference)}(hphttps://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.ziph]hphttps://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip}(hhhhhNhNubah}(h]h ]h"]h$]h&]refurihuh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hIHSMP interface is supported on EPYC line of server CPUs and MI300A (APU).h]hIHSMP interface is supported on EPYC line of server CPUs and MI300A (APU).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h HSMP deviceh]h HSMP device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hamd_hsmp driver under drivers/platforms/x86/amd/hsmp/ has separate driver files for ACPI object based probing, platform device based probing and for the common code for these two drivers.h]hamd_hsmp driver under drivers/platforms/x86/amd/hsmp/ has separate driver files for ACPI object based probing, platform device based probing and for the common code for these two drivers.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX(Kconfig option CONFIG_AMD_HSMP_PLAT compiles plat.c and creates amd_hsmp.ko. Kconfig option CONFIG_AMD_HSMP_ACPI compiles acpi.c and creates hsmp_acpi.ko. Selecting any of these two configs automatically selects CONFIG_AMD_HSMP. This compiles common code hsmp.c and creates hsmp_common.ko module.h]hX(Kconfig option CONFIG_AMD_HSMP_PLAT compiles plat.c and creates amd_hsmp.ko. Kconfig option CONFIG_AMD_HSMP_ACPI compiles acpi.c and creates hsmp_acpi.ko. Selecting any of these two configs automatically selects CONFIG_AMD_HSMP. This compiles common code hsmp.c and creates hsmp_common.ko module.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(htBoth the ACPI and plat drivers create the miscdevice /dev/hsmp to let user space programs run hsmp mailbox commands.h]htBoth the ACPI and plat drivers create the miscdevice /dev/hsmp to let user space programs run hsmp mailbox commands.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjhhubh)}(h@The ACPI object format supported by the driver is defined below.h]h@The ACPI object format supported by the driver is defined below.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubh)}(hH$ ls -al /dev/hsmp crw-r--r-- 1 root root 10, 123 Jan 21 21:41 /dev/hsmph]hH$ ls -al /dev/hsmp crw-r--r-- 1 root root 10, 123 Jan 21 21:41 /dev/hsmp}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjhhubhdefinition_list)}(hhh](hdefinition_list_item)}(hCharacteristics of the dev node: * Write mode is used for running set/configure commands * Read mode is used for running get/status monitor commands h](hterm)}(h Characteristics of the dev node:h]h Characteristics of the dev node:}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhK-hjrubh definition)}(hhh]h bullet_list)}(hhh](h list_item)}(h5Write mode is used for running set/configure commandsh]h)}(hjh]h5Write mode is used for running set/configure commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h:Read mode is used for running get/status monitor commands h]h)}(h9Read mode is used for running get/status monitor commandsh]h9Read mode is used for running get/status monitor commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet*uh1jhhhK,hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jphhhK-hjmubjq)}(hAccess restrictions: * Only root user is allowed to open the file in write mode. * The file can be opened in read mode by all the users. h](jw)}(hAccess restrictions:h]hAccess restrictions:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhK1hjubj)}(hhh]j)}(hhh](j)}(h9Only root user is allowed to open the file in write mode.h]h)}(hjh]h9Only root user is allowed to open the file in write mode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h6The file can be opened in read mode by all the users. h]h)}(h5The file can be opened in read mode by all the users.h]h5The file can be opened in read mode by all the users.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhK0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jphhhK1hjmhhubjq)}(hIn-kernel integration: * Other subsystems in the kernel can use the exported transport function hsmp_send_message(). * Locking across callers is taken care by the driver. h](jw)}(hIn-kernel integration:h]hIn-kernel integration:}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhhhK7hj.ubj)}(hhh]j)}(hhh](j)}(h[Other subsystems in the kernel can use the exported transport function hsmp_send_message().h]h)}(h[Other subsystems in the kernel can use the exported transport function hsmp_send_message().h]h[Other subsystems in the kernel can use the exported transport function hsmp_send_message().}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjFubah}(h]h ]h"]h$]h&]uh1jhjCubj)}(h5Locking across callers is taken care by the driver. h]h)}(h3Locking across callers is taken care by the driver.h]h3Locking across callers is taken care by the driver.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hj^ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]jjuh1jhhhK4hj@ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jphhhK7hjmhhubeh}(h]h ]h"]h$]h&]uh1jkhjhhhNhNubeh}(h] hsmp-deviceah ]h"] hsmp deviceah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hHSMP sysfs interfaceh]hHSMP sysfs interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK:ubhenumerated_list)}(hhh]j)}(hMetrics table binary sysfs h]h)}(hMetrics table binary sysfsh]hMetrics table binary sysfs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hThe metrics table is made available as hexadecimal sysfs binary file under per socket sysfs directory created at /sys/devices/platform/amd_hsmp/socket%d/metrics_binh]hThe metrics table is made available as hexadecimal sysfs binary file under per socket sysfs directory created at /sys/devices/platform/amd_hsmp/socket%d/metrics_bin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjhhubh)}(h?Note: lseek() is not supported as entire metrics table is read.h]h?Note: lseek() is not supported as entire metrics table is read.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjhhubh)}(hqMetrics table definitions will be documented as part of Public PPR. The same is defined in the amd_hsmp.h header.h]hqMetrics table definitions will be documented as part of Public PPR. The same is defined in the amd_hsmp.h header.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjhhubj)}(hhh]j)}(hHSMP telemetry sysfs files h]h)}(hHSMP telemetry sysfs filesh]hHSMP telemetry sysfs files}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]jjjhjjstartKuh1jhjhhhhhKJubh)}(hJFollowing sysfs files are available at /sys/devices/platform/AMDI0097:0X/.h]hJFollowing sysfs files are available at /sys/devices/platform/AMDI0097:0X/.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjhhubj)}(hhh](j)}(h4c0_residency_input: Percentage of cores in C0 state.h]h)}(hj<h]h4c0_residency_input: Percentage of cores in C0 state.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhj:ubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(hVprochot_status: Reports 1 if the processor is at thermal threshold value, 0 otherwise.h]h)}(hVprochot_status: Reports 1 if the processor is at thermal threshold value, 0 otherwise.h]hVprochot_status: Reports 1 if the processor is at thermal threshold value, 0 otherwise.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjQubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(h%smu_fw_version: SMU firmware version.h]h)}(hjkh]h%smu_fw_version: SMU firmware version.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjiubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(h)protocol_version: HSMP interface version.h]h)}(hjh]h)protocol_version: HSMP interface version.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(h6ddr_max_bw: Theoretical maximum DDR bandwidth in GB/s.h]h)}(hjh]h6ddr_max_bw: Theoretical maximum DDR bandwidth in GB/s.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(h>ddr_utilised_bw_input: Current utilized DDR bandwidth in GB/s.h]h)}(hjh]h>ddr_utilised_bw_input: Current utilized DDR bandwidth in GB/s.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(hLddr_utilised_bw_perc_input(%): Percentage of current utilized DDR bandwidth.h]h)}(hjh]hLddr_utilised_bw_perc_input(%): Percentage of current utilized DDR bandwidth.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(h mclk_input: Memory clock in MHz.h]h)}(hjh]h mclk_input: Memory clock in MHz.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(h fclk_input: Fabric clock in MHz.h]h)}(hjh]h fclk_input: Fabric clock in MHz.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(h-clk_fmax: Maximum frequency of socket in MHz.h]h)}(hj h]h-clk_fmax: Maximum frequency of socket in MHz.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhj ubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(h-clk_fmin: Minimum frequency of socket in MHz.h]h)}(hj#h]h-clk_fmin: Minimum frequency of socket in MHz.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhj!ubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(hDcclk_freq_limit_input: Core clock frequency limit per socket in MHz.h]h)}(hj:h]hDcclk_freq_limit_input: Core clock frequency limit per socket in MHz.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhj8ubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(hOpwr_current_active_freq_limit: Current active frequency limit of socket in MHz.h]h)}(hOpwr_current_active_freq_limit: Current active frequency limit of socket in MHz.h]hOpwr_current_active_freq_limit: Current active frequency limit of socket in MHz.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjOubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubj)}(hPpwr_current_active_freq_limit_source: Source of current active frequency limit. h]h)}(hOpwr_current_active_freq_limit_source: Source of current active frequency limit.h]hOpwr_current_active_freq_limit_source: Source of current active frequency limit.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjgubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhKNhjhhubeh}(h]hsmp-sysfs-interfaceah ]h"]hsmp sysfs interfaceah$]h&]uh1hhhhhhhhK:ubh)}(hhh](h)}(hACPI device object formath]hACPI device object format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKaubh)}(h^The ACPI object format expected from the amd_hsmp driver for socket with ID00 is given below::h]h]The ACPI object format expected from the amd_hsmp driver for socket with ID00 is given below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjhhubh literal_block)}(hX[Device(HSMP) { Name(_HID, "AMDI0097") Name(_UID, "ID00") Name(HSE0, 0x00000001) Name(RBF0, ResourceTemplate() { Memory32Fixed(ReadWrite, 0xxxxxxx, 0x00100000) }) Method(_CRS, 0, NotSerialized) { Return(RBF0) } Method(_STA, 0, NotSerialized) { If(LEqual(HSE0, One)) { Return(0x0F) } Else { Return(Zero) } } Name(_DSD, Package(2) { Buffer(0x10) { 0x9D, 0x61, 0x4D, 0xB7, 0x07, 0x57, 0xBD, 0x48, 0xA6, 0x9F, 0x4E, 0xA2, 0x87, 0x1F, 0xC2, 0xF6 }, Package(3) { Package(2) {"MsgIdOffset", 0x00010934}, Package(2) {"MsgRspOffset", 0x00010980}, Package(2) {"MsgArgOffset", 0x000109E0} } }) }h]hX[Device(HSMP) { Name(_HID, "AMDI0097") Name(_UID, "ID00") Name(HSE0, 0x00000001) Name(RBF0, ResourceTemplate() { Memory32Fixed(ReadWrite, 0xxxxxxx, 0x00100000) }) Method(_CRS, 0, NotSerialized) { Return(RBF0) } Method(_STA, 0, NotSerialized) { If(LEqual(HSE0, One)) { Return(0x0F) } Else { Return(Zero) } } Name(_DSD, Package(2) { Buffer(0x10) { 0x9D, 0x61, 0x4D, 0xB7, 0x07, 0x57, 0xBD, 0x48, 0xA6, 0x9F, 0x4E, 0xA2, 0x87, 0x1F, 0xC2, 0xF6 }, Package(3) { Package(2) {"MsgIdOffset", 0x00010934}, Package(2) {"MsgRspOffset", 0x00010980}, Package(2) {"MsgArgOffset", 0x000109E0} } }) }}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKehjhhubeh}(h]acpi-device-object-formatah ]h"]acpi device object formatah$]h&]uh1hhhhhhhhKaubh)}(hhh](h)}(hHSMP HWMON interfaceh]hHSMP HWMON interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hXHSMP power sensors are registered with the hwmon interface. A separate hwmon directory is created for each socket and the following files are generated within the hwmon directory. - power1_input (read only) - power1_cap_max (read only) - power1_cap (read, write)h]hXHSMP power sensors are registered with the hwmon interface. A separate hwmon directory is created for each socket and the following files are generated within the hwmon directory. - power1_input (read only) - power1_cap_max (read only) - power1_cap (read, write)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]hsmp-hwmon-interfaceah ]h"]hsmp hwmon interfaceah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h An exampleh]h An example}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hPTo access hsmp device from a C program. First, you need to include the headers::h]hOTo access hsmp device from a C program. First, you need to include the headers:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h#include h]h#include }hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(h1Which defines the supported messages/message IDs.h]h1Which defines the supported messages/message IDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h.Next thing, open the device file, as follows::h]h-Next thing, open the device file, as follows:}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hint file; file = open("/dev/hsmp", O_RDWR); if (file < 0) { /* ERROR HANDLING; you can check errno to see what went wrong */ exit(1); }h]hint file; file = open("/dev/hsmp", O_RDWR); if (file < 0) { /* ERROR HANDLING; you can check errno to see what went wrong */ exit(1); }}hj4sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjhhubh)}(hThe following IOCTL is defined:h]hThe following IOCTL is defined:}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjl)}(hhh]jq)}(hX``ioctl(file, HSMP_IOCTL_CMD, struct hsmp_message *msg)`` The argument is a pointer to a:: struct hsmp_message { __u32 msg_id; /* Message ID */ __u16 num_args; /* Number of input argument words in message */ __u16 response_sz; /* Number of expected output/response words */ __u32 args[HSMP_MAX_MSG_LEN]; /* argument/response buffer */ __u16 sock_ind; /* socket number */ }; h](jw)}(h9``ioctl(file, HSMP_IOCTL_CMD, struct hsmp_message *msg)``h]hliteral)}(hjYh]h5ioctl(file, HSMP_IOCTL_CMD, struct hsmp_message *msg)}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j[hjWubah}(h]h ]h"]h$]h&]uh1jvhhhKhjSubj)}(hhh](h)}(h The argument is a pointer to a::h]hThe argument is a pointer to a:}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjpubj)}(hXstruct hsmp_message { __u32 msg_id; /* Message ID */ __u16 num_args; /* Number of input argument words in message */ __u16 response_sz; /* Number of expected output/response words */ __u32 args[HSMP_MAX_MSG_LEN]; /* argument/response buffer */ __u16 sock_ind; /* socket number */ };h]hXstruct hsmp_message { __u32 msg_id; /* Message ID */ __u16 num_args; /* Number of input argument words in message */ __u16 response_sz; /* Number of expected output/response words */ __u32 args[HSMP_MAX_MSG_LEN]; /* argument/response buffer */ __u16 sock_ind; /* socket number */ };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhjpubeh}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jphhhKhjPubah}(h]h ]h"]h$]h&]uh1jkhjhhhhhNubh)}(h|The ioctl would return a non-zero on failure; you can read errno to see what happened. The transaction returns 0 on success.h]h|The ioctl would return a non-zero on failure; you can read errno to see what happened. The transaction returns 0 on success.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX More details on the interface and message definitions can be found in chapter "7 Host System Management Port (HSMP)" of the respective family/model PPR eg: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.ziph](hMore details on the interface and message definitions can be found in chapter “7 Host System Management Port (HSMP)” of the respective family/model PPR eg: }(hjhhhNhNubh)}(hphttps://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.ziph]hphttps://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/55898_B1_pub_0_50.zip}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hUser space C-APIs are made available by linking against the esmi library, which is provided by the E-SMS project https://www.amd.com/en/developer/e-sms.html. See: https://github.com/amd/esmi_ib_libraryh](hqUser space C-APIs are made available by linking against the esmi library, which is provided by the E-SMS project }(hjhhhNhNubh)}(h+https://www.amd.com/en/developer/e-sms.htmlh]h+https://www.amd.com/en/developer/e-sms.html}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhjubh. See: }(hjhhhNhNubh)}(h&https://github.com/amd/esmi_ib_libraryh]h&https://github.com/amd/esmi_ib_library}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] an-exampleah ]h"] an exampleah$]h&]uh1hhhhhhhhKubeh}(h]amd-hsmp-interfaceah ]h"]amd hsmp interfaceah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj/error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j jjjjjjjjjjju nametypes}(j jjjjjuh}(jhjjjjjjjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "2" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “2” (ordinal 2)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1jhjhhhhhKJubatransform_messages] transformerN include_log] decorationNhhub.