diff --git a/include/amd_smi/amdsmi.h b/include/amd_smi/amdsmi.h index 13c11f76b0..0233c3cf24 100644 --- a/include/amd_smi/amdsmi.h +++ b/include/amd_smi/amdsmi.h @@ -1608,6 +1608,19 @@ typedef struct __attribute__((__packed__)){ uint32_t gfxclk_frequency[8]; } amdsmi_hsmp_metrics_table_t; +/** + * @brief hsmp frequency limit source names + */ +static char* const amdsmi_hsmp_freqlimit_src_names[] = { + "cHTC-Active", + "PROCHOT", + "TDC limit", + "PPT Limit", + "OPN Max", + "Reliability Limit", + "APML Agent", + "HSMP Agent" +}; #endif /*****************************************************************************/ diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index 5f6627eb35..6b22359404 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -828,8 +828,9 @@ def amdsmi_get_cpu_socket_current_active_freq_limit( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) + amdsmi_wrapper.amdsmi_get_cpu_socket_current_active_freq_limit.argtypes = [amdsmi_wrapper.amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16), ctypes.POINTER(ctypes.c_char_p * len(amdsmi_wrapper.amdsmi_hsmp_freqlimit_src_names))] freq = ctypes.c_uint16() - src_type = ctypes.pointer(ctypes.pointer(ctypes.c_char())) + src_type = (ctypes.c_char_p * len(amdsmi_wrapper.amdsmi_hsmp_freqlimit_src_names))() _check_res( amdsmi_wrapper.amdsmi_get_cpu_socket_current_active_freq_limit( @@ -837,9 +838,14 @@ def amdsmi_get_cpu_socket_current_active_freq_limit( ) ) + freq_src = [] + for names in src_type: + if names is not None: + freq_src.append(names.decode('utf-8')) + return { "freq": f"{freq.value} MHz", - "freq_src": f"{amdsmi_wrapper.string_cast(src_type.contents)}" + "freq_src": f"{freq_src}" } def amdsmi_get_cpu_socket_freq_range( diff --git a/py-interface/amdsmi_wrapper.py b/py-interface/amdsmi_wrapper.py index a1a6b9b70b..8b49fd9b2c 100644 --- a/py-interface/amdsmi_wrapper.py +++ b/py-interface/amdsmi_wrapper.py @@ -1846,6 +1846,7 @@ struct_amdsmi_hsmp_metrics_table_t._fields_ = [ ] amdsmi_hsmp_metrics_table_t = struct_amdsmi_hsmp_metrics_table_t +amdsmi_hsmp_freqlimit_src_names = ['cHTC-Active', 'PROCHOT', 'TDC limit', 'PPT Limit', 'OPN Max', 'Reliability Limit', 'APML Agent', 'HSMP Agent'] # Variable ctypes.POINTER(ctypes.c_char) * 8 uint64_t = ctypes.c_uint64 amdsmi_init = _libraries['libamd_smi.so'].amdsmi_init amdsmi_init.restype = amdsmi_status_t @@ -2618,14 +2619,14 @@ __all__ = \ 'amdsmi_voltage_type_t', 'amdsmi_vram_info_t', 'amdsmi_vram_type_t', 'amdsmi_vram_usage_t', 'amdsmi_vram_vendor_type_t', 'amdsmi_xgmi_info_t', - 'amdsmi_xgmi_status_t', 'processor_type_t', 'size_t', - 'struct__links', 'struct_amd_metrics_table_header_t', - 'struct_amdsmi_asic_info_t', 'struct_amdsmi_board_info_t', - 'struct_amdsmi_clk_info_t', 'struct_amdsmi_counter_value_t', - 'struct_amdsmi_ddr_bw_metrics_t', 'struct_amdsmi_dimm_power_t', - 'struct_amdsmi_dimm_thermal_t', 'struct_amdsmi_dpm_level_t', - 'struct_amdsmi_driver_info_t', 'struct_amdsmi_engine_usage_t', - 'struct_amdsmi_error_count_t', + 'amdsmi_xgmi_status_t', 'amdsmi_hsmp_freqlimit_src_names', + 'processor_type_t', 'size_t', 'struct__links', + 'struct_amd_metrics_table_header_t', 'struct_amdsmi_asic_info_t', + 'struct_amdsmi_board_info_t', 'struct_amdsmi_clk_info_t', + 'struct_amdsmi_counter_value_t', 'struct_amdsmi_ddr_bw_metrics_t', + 'struct_amdsmi_dimm_power_t', 'struct_amdsmi_dimm_thermal_t', + 'struct_amdsmi_dpm_level_t', 'struct_amdsmi_driver_info_t', + 'struct_amdsmi_engine_usage_t', 'struct_amdsmi_error_count_t', 'struct_amdsmi_evt_notification_data_t', 'struct_amdsmi_freq_volt_region_t', 'struct_amdsmi_frequencies_t', 'struct_amdsmi_frequency_range_t', 'struct_amdsmi_fw_info_t',