Add support for get and set APIs for CPUISOFreqPolicy and DFCState Co… (#1901)

* Add support for get and set APIs for CPUISOFreqPolicy and DFCState Control

  - Add support for get and set APIs for CPUISOFreqPolicy and DFCState Control
    in AMD SMI and also in the CLI tool

* CHANGELOG.md file updated

* SWDEV-562837: Update amdsmi-py-api.md as per the new APIs

Updated amdsmi-py-api.md as per the new APIs added.

---------

Signed-off-by: Soumya <sranjanr@amd.com>
Signed-off-by: gabrpham <Gabriel.Pham@amd.com>
Co-authored-by: Saka Sitharammurthy <SitharamMurthy.Saka@amd.com>
This commit is contained in:
systems-assistant[bot]
2026-01-06 10:37:07 -06:00
committed by GitHub
parent 6c98c49362
commit c6b7448227
10 changed files with 592 additions and 18 deletions
+4
View File
@@ -81,6 +81,10 @@ try:
from .amdsmi_interface import amdsmi_get_cpu_model
from .amdsmi_interface import amdsmi_get_cpu_model_name
from .amdsmi_interface import amdsmi_get_cpu_handles
from .amdsmi_interface import amdsmi_get_dfc_ctrl
from .amdsmi_interface import amdsmi_set_dfc_ctrl
from .amdsmi_interface import amdsmi_get_cpu_rail_isofreq_policy
from .amdsmi_interface import amdsmi_set_cpu_rail_isofreq_policy
except AttributeError:
pass
@@ -1788,6 +1788,63 @@ def amdsmi_get_hsmp_metrics_table_version(
return metric_tbl_version.value
def amdsmi_set_cpu_rail_isofreq_policy(
processor_handle: processor_handle_t,
value: int):
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
raise AmdSmiParameterException(
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
)
_check_res(
amdsmi_wrapper.amdsmi_set_cpu_rail_isofreq_policy(processor_handle, value)
)
def amdsmi_get_cpu_rail_isofreq_policy(
processor_handle: processor_handle_t,
) -> int:
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
raise AmdSmiParameterException(
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
)
cpurailiso = ctypes.c_uint8()
_check_res(
amdsmi_wrapper.amdsmi_get_cpu_rail_isofreq_policy(
processor_handle, ctypes.byref(cpurailiso)
)
)
return cpurailiso.value
def amdsmi_get_dfc_ctrl(
processor_handle: processor_handle_t,
) -> int:
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
raise AmdSmiParameterException(
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
)
dfc_ctrl = ctypes.c_uint8()
_check_res(
amdsmi_wrapper.amdsmi_get_dfc_ctrl(
processor_handle, ctypes.byref(dfc_ctrl)
)
)
return dfc_ctrl.value
def amdsmi_set_dfc_ctrl(
processor_handle: processor_handle_t,
value: int):
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
raise AmdSmiParameterException(
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
)
_check_res(
amdsmi_wrapper.amdsmi_set_dfc_ctrl(processor_handle, value)
)
# Get 2's complement of 32 bit unsigned integer
def check_msb_32(num):
+15 -2
View File
@@ -3248,6 +3248,18 @@ amdsmi_get_cpu_cores_per_socket.argtypes = [uint32_t, ctypes.POINTER(struct_amds
amdsmi_get_cpu_socket_count = _libraries['libamd_smi.so'].amdsmi_get_cpu_socket_count
amdsmi_get_cpu_socket_count.restype = amdsmi_status_t
amdsmi_get_cpu_socket_count.argtypes = [ctypes.POINTER(ctypes.c_uint32)]
amdsmi_set_cpu_rail_isofreq_policy = _libraries['libamd_smi.so'].amdsmi_set_cpu_rail_isofreq_policy
amdsmi_set_cpu_rail_isofreq_policy.restype = amdsmi_status_t
amdsmi_set_cpu_rail_isofreq_policy.argtypes = [amdsmi_processor_handle, uint8_t]
amdsmi_get_cpu_rail_isofreq_policy = _libraries['libamd_smi.so'].amdsmi_get_cpu_rail_isofreq_policy
amdsmi_get_cpu_rail_isofreq_policy.restype = amdsmi_status_t
amdsmi_get_cpu_rail_isofreq_policy.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint8)]
amdsmi_set_dfc_ctrl = _libraries['libamd_smi.so'].amdsmi_set_dfc_ctrl
amdsmi_set_dfc_ctrl.restype = amdsmi_status_t
amdsmi_set_dfc_ctrl.argtypes = [amdsmi_processor_handle, ctypes.c_bool]
amdsmi_get_dfc_ctrl = _libraries['libamd_smi.so'].amdsmi_get_dfc_ctrl
amdsmi_get_dfc_ctrl.restype = amdsmi_status_t
amdsmi_get_dfc_ctrl.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint8)]
__all__ = \
['AGG_BW0', 'AMDSMI_ACCELERATOR_DECODER',
'AMDSMI_ACCELERATOR_DMA', 'AMDSMI_ACCELERATOR_ENCODER',
@@ -3585,8 +3597,9 @@ __all__ = \
'amdsmi_get_cpu_socket_power', 'amdsmi_get_cpu_socket_power_cap',
'amdsmi_get_cpu_socket_power_cap_max',
'amdsmi_get_cpu_socket_temperature', 'amdsmi_get_cpucore_handles',
'amdsmi_get_cpusocket_handles', 'amdsmi_get_energy_count',
'amdsmi_get_esmi_err_msg', 'amdsmi_get_fw_info',
'amdsmi_get_energy_count', 'amdsmi_get_esmi_err_msg',
'amdsmi_get_fw_info', 'amdsmi_get_dfc_ctrl', 'amdsmi_set_dfc_ctrl',
'amdsmi_get_cpu_rail_isofreq_policy', 'amdsmi_set_cpu_rail_isofreq_policy',
'amdsmi_get_gpu_accelerator_partition_profile',
'amdsmi_get_gpu_accelerator_partition_profile_config',
'amdsmi_get_gpu_activity', 'amdsmi_get_gpu_asic_info',