From 7fcee0d34b88b7a289fbd982d69156e1b1cdfe81 Mon Sep 17 00:00:00 2001 From: Dalibor Stanisavljevic Date: Thu, 1 Jun 2023 14:46:21 +0200 Subject: [PATCH] Align header changes with other platforms Change-Id: I366e57310e0504855692626e2b2014bea235ed6b Signed-off-by: Dalibor Stanisavljevic [ROCm/amdsmi commit: 8dbc1d7d57d9a86a53b13f76877d81833f85ad1a] --- projects/amdsmi/README.md | 2 +- projects/amdsmi/amdsmi_cli/amdsmi_commands.py | 96 +++++----- projects/amdsmi/amdsmi_cli/amdsmi_init.py | 2 +- .../amdsmi/example/amd_smi_drm_example.cc | 12 +- .../amdsmi/example/amd_smi_nodrm_example.cc | 2 +- projects/amdsmi/include/amd_smi/amdsmi.h | 60 +++++-- projects/amdsmi/py-interface/README.md | 8 +- projects/amdsmi/py-interface/__init__.py | 1 + .../amdsmi/py-interface/amdsmi_exception.py | 104 +++++------ .../amdsmi/py-interface/amdsmi_interface.py | 91 +++++++--- .../amdsmi/py-interface/amdsmi_wrapper.py | 167 +++++++++++++----- projects/amdsmi/src/amd_smi/amd_smi.cc | 6 +- projects/amdsmi/src/amd_smi/amd_smi_system.cc | 2 +- 13 files changed, 357 insertions(+), 196 deletions(-) diff --git a/projects/amdsmi/README.md b/projects/amdsmi/README.md index 0b6b3f5be5..a9e122cde8 100755 --- a/projects/amdsmi/README.md +++ b/projects/amdsmi/README.md @@ -111,7 +111,7 @@ int main() { for (uint32_t i=0; i < socket_count; i++) { // Get Socket info char socket_info[128]; - ret = amdsmi_get_socket_info(sockets[i], socket_info, 128); + ret = amdsmi_get_socket_info(sockets[i], 128, socket_info); std::cout << "Socket " << socket_info<< std::endl; // Get the device count for the socket. diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py index b677c59820..a899e3b850 100644 --- a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py +++ b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py @@ -333,7 +333,7 @@ class AMDSMICommands(): try: static_dict['ras'] = amdsmi_interface.amdsmi_get_gpu_ras_block_features_enabled(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NOT_SUPPORTED: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NOT_SUPPORTED: static_dict['ras'] = 'N/A' else: static_dict['ras'] = e.get_error_info() @@ -787,14 +787,14 @@ class AMDSMICommands(): power_measure = amdsmi_interface.amdsmi_get_power_info(args.gpu) power_dict = {'average_socket_power': power_measure['average_socket_power'], 'gfx_voltage': power_measure['gfx_voltage'], - 'soc_voltage': amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.NOT_IMPLEMENTED).err_info, - 'mem_voltage': amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.NOT_IMPLEMENTED).err_info} + 'soc_voltage': amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.STATUS_NOT_YET_IMPLEMENTED).err_info, + 'mem_voltage': amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.STATUS_NOT_YET_IMPLEMENTED).err_info} if self.logger.is_human_readable_format(): power_dict['average_socket_power'] = f"{power_dict['average_socket_power']} W" power_dict['gfx_voltage'] = f"{power_dict['gfx_voltage']} mV" - power_dict['soc_voltage'] = amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.NOT_IMPLEMENTED).err_info - power_dict['mem_voltage'] = amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.NOT_IMPLEMENTED).err_info + power_dict['soc_voltage'] = amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.STATUS_NOT_YET_IMPLEMENTED).err_info + power_dict['mem_voltage'] = amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.STATUS_NOT_YET_IMPLEMENTED).err_info except amdsmi_exception.AmdSmiLibraryException as e: power_dict = {'average_socket_power': e.get_error_info(), @@ -879,7 +879,7 @@ class AMDSMICommands(): values_dict['ecc'] = ecc_count except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NOT_SUPPORTED: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NOT_SUPPORTED: ecc_count['correctable'] = 'N/A' ecc_count['uncorrectable'] = 'N/A' values_dict['ecc'] = ecc_count @@ -1005,7 +1005,7 @@ class AMDSMICommands(): if not self.all_arguments: raise e if args.mem_overdrive: - values_dict['mem_overdrive'] = amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.NOT_IMPLEMENTED).err_info + values_dict['mem_overdrive'] = amdsmi_exception.AmdSmiLibraryException(amdsmi_exception.AmdSmiRetCode.STATUS_NOT_YET_IMPLEMENTED).err_info if args.perf_level: try: perf_level = amdsmi_interface.amdsmi_get_gpu_perf_level(args.gpu) @@ -1027,7 +1027,7 @@ class AMDSMICommands(): try: values_dict['xgmi_err'] = amdsmi_interface.amdsmi_gpu_xgmi_error_status(args.gpu) except amdsmi_interface.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NOT_SUPPORTED: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NOT_SUPPORTED: values_dict['xgmi_err'] = 'N/A' elif not self.all_arguments: raise e @@ -1566,7 +1566,7 @@ class AMDSMICommands(): try: perf_level = amdsmi_interface.amdsmi_get_gpu_perf_level(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to get performance level of {gpu_string}") from e @@ -1574,7 +1574,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, amdsmi_interface.AmdSmiDevPerfLevel.MANUAL) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the performance level of {gpu_string} to manual") from e @@ -1582,14 +1582,14 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_clk_freq(args.gpu, clock_type, freq_bitmask) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the {clock_type} clock frequency on {gpu_string}") from e else: try: amdsmi_interface.amdsmi_set_gpu_pci_bandwidth(args.gpu, freq_bitmask) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the {clock_type} clock frequency on {gpu_string}") from e @@ -1601,7 +1601,7 @@ class AMDSMICommands(): try: perf_level = amdsmi_interface.amdsmi_get_gpu_perf_level(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to get performance level of {gpu_string}") from e @@ -1609,14 +1609,14 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, amdsmi_interface.AmdSmiDevPerfLevel.MANUAL) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the performance level of {gpu_string} to manual") from e try: amdsmi_interface.amdsmi_set_clk_freq(args.gpu, clock_type, freq_bitmask) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the {clock_type} clock frequency on {gpu_string}") from e @@ -1628,7 +1628,7 @@ class AMDSMICommands(): try: perf_level = amdsmi_interface.amdsmi_get_gpu_perf_level(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to get performance level of {gpu_string}") from e @@ -1636,14 +1636,14 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, amdsmi_interface.AmdSmiDevPerfLevel.MANUAL) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the performance level of {gpu_string} to manual") from e try: amdsmi_interface.amdsmi_set_clk_freq(args.gpu, clock_type, freq_bitmask) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the {clock_type} clock frequency on {gpu_string}") from e @@ -1655,7 +1655,7 @@ class AMDSMICommands(): try: perf_level = amdsmi_interface.amdsmi_get_gpu_perf_level(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to get performance level of {gpu_string}") from e @@ -1663,13 +1663,13 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, amdsmi_interface.AmdSmiDevPerfLevel.MANUAL) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the performance level of {gpu_string} to manual") from e try: amdsmi_interface.amdsmi_set_gpu_pci_bandwidth(args.gpu, freq_bitmask) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the {clock_type} clock frequency on {gpu_string}") from e @@ -1682,7 +1682,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_od_clk_info(args.gpu, level, value, clock_type) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to change the {clock_type} clock frequency in the PowerPlay table on {gpu_string}") from e @@ -1694,7 +1694,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_od_clk_info(args.gpu, level, value, clock_type) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to change the {clock_type} clock frequency in the PowerPlay table on {gpu_string}") from e @@ -1704,7 +1704,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_od_volt_info(args.gpu, point, clk, volt) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the Voltage Curve point {point} to {clk}(MHz) {volt}(mV) on {gpu_string}") from e @@ -1715,7 +1715,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_clk_range(args.gpu, min_value, max_value, clock_type) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set {clock_type} from {min_value}(MHz) to {max_value}(MHz) on {gpu_string}") from e @@ -1726,7 +1726,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_clk_range(args.gpu, min_value, max_value, clock_type) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set {clock_type} from {min_value}(MHz) to {max_value}(MHz) on {gpu_string}") from e @@ -1735,7 +1735,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_fan_speed(args.gpu, 0, args.fan) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set fan speed {args.fan} on {gpu_string}") from e @@ -1745,7 +1745,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, perf_level) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set performance level {args.perflevel} on {gpu_string}") from e @@ -1755,7 +1755,7 @@ class AMDSMICommands(): try: perf_level = amdsmi_interface.amdsmi_get_gpu_perf_level(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to get performance level of {gpu_string}") from e @@ -1763,14 +1763,14 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, amdsmi_interface.AmdSmiDevPerfLevel.MANUAL) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the performance level of {gpu_string} to manual") from e try: amdsmi_interface.amdsmi_set_gpu_overdrive_level(args.gpu, args.overdrive) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set overdrive {args.overdrive} to {gpu_string}") from e @@ -1780,7 +1780,7 @@ class AMDSMICommands(): try: perf_level = amdsmi_interface.amdsmi_get_gpu_perf_level(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to get performance level of {gpu_string}") from e @@ -1788,7 +1788,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, amdsmi_interface.AmdSmiDevPerfLevel.MANUAL) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set the performance level of {gpu_string} to manual") from e @@ -1798,11 +1798,11 @@ class AMDSMICommands(): try: power_caps = amdsmi_interface.amdsmi_get_power_cap_info(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to get the power cap info for {gpu_string}") from e if overdrive_power_cap == 0: - overdrive_power_cap = power_caps['power_cap_default'] + overdrive_power_cap = power_caps['default_power_cap'] else: overdrive_power_cap *= 1000000 @@ -1818,14 +1818,14 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_power_cap(args.gpu, 0, overdrive_power_cap) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set power cap to {overdrive_power_cap} on {gpu_string}") from e try: power_caps = amdsmi_interface.amdsmi_get_power_cap_info(args.gpu) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to get the power cap info for {gpu_string} post set") from e @@ -1839,7 +1839,7 @@ class AMDSMICommands(): try: amdsmi_interface.amdsmi_set_gpu_perf_determinism_mode(args.gpu, args.perfdeterminism) except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e raise ValueError(f"Unable to set performance determinism and clock frequency to {args.perfdeterminism} on {gpu_string}") from e @@ -1911,7 +1911,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_reset_gpu(args.gpu) result = 'Successfully reset GPU' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e result = e.get_error_info() else: @@ -1926,7 +1926,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_set_gpu_overdrive_level(args.gpu, 0) reset_clocks_results['overdrive'] = 'Overdrive set to 0' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e reset_clocks_results['overdrive'] = e.get_error_info() @@ -1935,7 +1935,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, level_auto) reset_clocks_results['clocks'] = 'Successfully reset clocks' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e reset_clocks_results['clocks'] = e.get_error_info() @@ -1944,7 +1944,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, level_auto) reset_clocks_results['performance'] = 'Performance level reset to auto' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e reset_clocks_results['performance'] = e.get_error_info() @@ -1954,7 +1954,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_reset_gpu_fan(args.gpu, 0) result = 'Successfully reset fan speed to driver control' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e result = e.get_error_info() @@ -1967,7 +1967,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_set_gpu_power_profile(args.gpu, 0, power_profile_mask) reset_profile_results['power_profile'] = 'Successfully reset Power Profile' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e reset_profile_results['power_profile'] = e.get_error_info() @@ -1976,7 +1976,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, level_auto) reset_profile_results['performance_level'] = 'Successfully reset Performance Level' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e reset_profile_results['performance_level'] = e.get_error_info() @@ -1986,7 +1986,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_reset_gpu_xgmi_error(args.gpu) result = 'Successfully reset XGMI Error count' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e result = e.get_error_info() self.logger.store_output(args.gpu, 'reset_xgmi_err', result) @@ -1996,7 +1996,7 @@ class AMDSMICommands(): amdsmi_interface.amdsmi_set_gpu_perf_level(args.gpu, level_auto) result = 'Successfully disabled performance determinism' except amdsmi_exception.AmdSmiLibraryException as e: - if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.ERR_NO_PERM: + if e.get_error_code() == amdsmi_exception.AmdSmiRetCode.STATUS_NO_PERM: raise PermissionError('Command requires elevation') from e result = e.get_error_info() @@ -2033,7 +2033,7 @@ class AMDSMICommands(): commands.logger.store_output(device, 'values', values_dict) commands.logger.print_output() except amdsmi_exception.AmdSmiLibraryException as e: - if e.err_code != amdsmi_exception.AmdSmiRetCode.NO_DATA: + if e.err_code != amdsmi_exception.AmdSmiRetCode.STATUS_NO_DATA: print(e) except Exception as e: print(e) diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_init.py b/projects/amdsmi/amdsmi_cli/amdsmi_init.py index cb0656252e..5f201d7d15 100644 --- a/projects/amdsmi/amdsmi_cli/amdsmi_init.py +++ b/projects/amdsmi/amdsmi_cli/amdsmi_init.py @@ -53,7 +53,7 @@ def check_amdgpu_driver(): return False -def init_amdsmi(flag=amdsmi_interface.AmdSmiInitFlags.AMD_GPUS): +def init_amdsmi(flag=amdsmi_interface.AmdSmiInitFlags.INIT_AMD_GPUS): """ Initializes AMDSMI Raises: diff --git a/projects/amdsmi/example/amd_smi_drm_example.cc b/projects/amdsmi/example/amd_smi_drm_example.cc index 7d12be4ba8..fe384ae05b 100644 --- a/projects/amdsmi/example/amd_smi_drm_example.cc +++ b/projects/amdsmi/example/amd_smi_drm_example.cc @@ -238,7 +238,7 @@ int main() { for (uint32_t i = 0; i < socket_count; i++) { // Get Socket info char socket_info[128]; - ret = amdsmi_get_socket_info(sockets[i], socket_info, 128); + ret = amdsmi_get_socket_info(sockets[i], 128, socket_info); CHK_AMDSMI_RET(ret) std::cout << "Socket " << socket_info << std::endl; @@ -508,13 +508,13 @@ int main() { freq_ranges.current_freq_range.upper_bound); uint32_t num_process = 0; - ret = amdsmi_get_gpu_process_list(processor_handles[j], nullptr, - &num_process); + ret = amdsmi_get_gpu_process_list(processor_handles[j], &num_process, + nullptr); CHK_AMDSMI_RET(ret) if (!num_process) { printf("No processes found.\n"); } else { - amdsmi_process_handle process_list[num_process]; + amdsmi_process_handle_t process_list[num_process]; amdsmi_proc_info_t info_list[num_process]; amdsmi_proc_info_t process = {}; uint64_t mem = 0, gtt_mem = 0, cpu_mem = 0, vram_mem = 0; @@ -523,8 +523,8 @@ int main() { sprintf(bdf_str, "%04lx:%02x:%02x.%d", bdf.domain_number, bdf.bus_number, bdf.device_number, bdf.function_number); int num = 0; - ret = amdsmi_get_gpu_process_list(processor_handles[j], process_list, - &num_process); + ret = amdsmi_get_gpu_process_list(processor_handles[j], &num_process, + process_list); CHK_AMDSMI_RET(ret) for (uint32_t it = 0; it < num_process; it += 1) { if (getpid() == process_list[it]) { diff --git a/projects/amdsmi/example/amd_smi_nodrm_example.cc b/projects/amdsmi/example/amd_smi_nodrm_example.cc index 51bc2ff1b9..f287281c72 100644 --- a/projects/amdsmi/example/amd_smi_nodrm_example.cc +++ b/projects/amdsmi/example/amd_smi_nodrm_example.cc @@ -90,7 +90,7 @@ int main() { for (uint32_t i = 0; i < socket_count; i++) { // Get Socket info char socket_info[128]; - ret = amdsmi_get_socket_info(sockets[i], socket_info, 128); + ret = amdsmi_get_socket_info(sockets[i], 128, socket_info); CHK_AMDSMI_RET(ret) std::cout << "Socket " << socket_info << std::endl; diff --git a/projects/amdsmi/include/amd_smi/amdsmi.h b/projects/amdsmi/include/amd_smi/amdsmi.h index 69cdefd1ea..2d8591ba0c 100644 --- a/projects/amdsmi/include/amd_smi/amdsmi.h +++ b/projects/amdsmi/include/amd_smi/amdsmi.h @@ -63,7 +63,7 @@ extern "C" { * Initialization flags may be OR'd together and passed to ::amdsmi_init(). */ typedef enum { - AMDSMI_INIT_ALL_DEVICES = 0x0, // Default option + AMDSMI_INIT_ALL_PROCESSORS = 0x0, // Default option AMDSMI_INIT_AMD_CPUS = (1 << 0), AMDSMI_INIT_AMD_GPUS = (1 << 1), AMDSMI_INIT_NON_AMD_CPUS = (1 << 2), @@ -257,6 +257,38 @@ typedef enum { FW_ID_MC, FW_ID_PSP_BL, FW_ID_CP_PM4, + FW_ID_RLC_P, + FW_ID_SEC_POLICY_STAGE2, + FW_ID_REG_ACCESS_WHITELIST, + FW_ID_IMU_DRAM, + FW_ID_IMU_IRAM, + FW_ID_SDMA_TH0, + FW_ID_SDMA_TH1, + FW_ID_CP_MES, + FW_ID_MES_STACK, + FW_ID_MES_THREAD1, + FW_ID_MES_THREAD1_STACK, + FW_ID_RLX6, + FW_ID_RLX6_DRAM_BOOT, + FW_ID_RS64_ME, + FW_ID_RS64_ME_P0_DATA, + FW_ID_RS64_ME_P1_DATA, + FW_ID_RS64_PFP, + FW_ID_RS64_PFP_P0_DATA, + FW_ID_RS64_PFP_P1_DATA, + FW_ID_RS64_MEC, + FW_ID_RS64_MEC_P0_DATA, + FW_ID_RS64_MEC_P1_DATA, + FW_ID_RS64_MEC_P2_DATA, + FW_ID_RS64_MEC_P3_DATA, + FW_ID_PPTABLE, + FW_ID_PSP_SOC, + FW_ID_PSP_DBG, + FW_ID_PSP_INTF, + FW_ID_RLX6_CORE1, + FW_ID_RLX6_DRAM_BOOT_CORE1, + FW_ID_RLCV_LX7, + FW_ID_RLC_SAVE_RESTORE_LIST, FW_ID_ASD, FW_ID_TA_RAS, FW_ID_XGMI, @@ -287,6 +319,7 @@ typedef struct { typedef struct { uint32_t vram_total; uint32_t vram_used; + uint32_t reserved[2]; } amdsmi_vram_info_t; typedef struct { @@ -319,7 +352,7 @@ typedef struct { char build_date[AMDSMI_MAX_DATE_LENGTH]; char part_number[AMDSMI_MAX_STRING_LENGTH]; char version[AMDSMI_NORMAL_STRING_LENGTH]; - uint32_t reserved[15]; + uint32_t reserved[16]; } amdsmi_vbios_info_t; typedef struct { @@ -339,6 +372,7 @@ typedef struct { uint64_t device_id; //< The unique id of a GPU uint32_t rev_id; char asic_serial[AMDSMI_NORMAL_STRING_LENGTH]; + uint32_t reserved[3]; } amdsmi_asic_info_t; typedef struct { @@ -364,7 +398,7 @@ typedef struct { uint32_t cur_clk; uint32_t min_clk; uint32_t max_clk; - uint32_t reserved[4]; + uint32_t reserved[5]; } amdsmi_clk_info_t; typedef struct { @@ -374,20 +408,22 @@ typedef struct { uint32_t reserved[13]; } amdsmi_engine_usage_t; -typedef uint32_t amdsmi_process_handle; +typedef uint32_t amdsmi_process_handle_t; typedef struct { char name[AMDSMI_NORMAL_STRING_LENGTH]; - amdsmi_process_handle pid; + amdsmi_process_handle_t pid; uint64_t mem; /** in bytes */ struct { uint64_t gfx; uint64_t enc; + uint32_t reserved[12]; } engine_usage; /** How much time the process spend using these engines in ns */ struct { uint64_t gtt_mem; uint64_t cpu_mem; uint64_t vram_mem; + uint32_t reserved[10]; } memory_usage; /** in bytes */ char container_name[AMDSMI_NORMAL_STRING_LENGTH]; uint32_t reserved[4]; @@ -1147,7 +1183,7 @@ amdsmi_status_t amdsmi_get_socket_handles(uint32_t *socket_count, */ amdsmi_status_t amdsmi_get_socket_info( amdsmi_socket_handle socket_handle, - char *name, size_t len); + size_t len, char *name); /** * @brief Get the list of the processor handles associated to a socket. @@ -3354,19 +3390,19 @@ amdsmi_get_gpu_target_frequency_range(amdsmi_processor_handle processor_handle, * * @param[in] processor_handle Device which to query * + * @param[in,out] max_processes Reference to the size of the list buffer in + * number of elements. Returns the return number of elements + * in list or the number of running processes if equal to 0. + * * @param[out] list Reference to a user-provided buffer where the process * list will be returned. This buffer must contain at least * max_processes entries of type smi_process_handle. Must be allocated * by user. * - * @param[in,out] max_processes Reference to the size of the list buffer in - * number of elements. Returns the return number of elements - * in list or the number of running processes if equal to 0. - * * @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail */ amdsmi_status_t -amdsmi_get_gpu_process_list(amdsmi_processor_handle processor_handle, amdsmi_process_handle *list, uint32_t *max_processes); +amdsmi_get_gpu_process_list(amdsmi_processor_handle processor_handle, uint32_t *max_processes, amdsmi_process_handle_t *list); /** * @brief Returns the process information of a given process. @@ -3382,7 +3418,7 @@ amdsmi_get_gpu_process_list(amdsmi_processor_handle processor_handle, amdsmi_pro * @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail */ amdsmi_status_t -amdsmi_get_gpu_process_info(amdsmi_processor_handle processor_handle, amdsmi_process_handle process, amdsmi_proc_info_t *info); +amdsmi_get_gpu_process_info(amdsmi_processor_handle processor_handle, amdsmi_process_handle_t process, amdsmi_proc_info_t *info); /** @} End processinfo */ diff --git a/projects/amdsmi/py-interface/README.md b/projects/amdsmi/py-interface/README.md index 52ad599a0d..9ecec833f6 100644 --- a/projects/amdsmi/py-interface/README.md +++ b/projects/amdsmi/py-interface/README.md @@ -52,7 +52,7 @@ try: print("No GPUs on machine") except AmdSmiException as e: print("Error code: {}".format(e.err_code)) - if e.err_code == AmdSmiRetCode.ERR_RETRY: + if e.err_code == AmdSmiRetCode.STATUS_RETRY: print("Error info: {}".format(e.err_info)) ``` * `AmdSmiRetryException` : Derives `AmdSmiLibraryException` class and signals device is busy and call should be retried. @@ -335,7 +335,7 @@ Field | Description ---|--- `power_cap` | power capability `dpm_cap` | dynamic power management capability -`power_cap_default` | default power capability +`default_power_cap` | default power capability `min_power_cap` | min power capability `max_power_cap` | max power capability @@ -355,7 +355,7 @@ try: power_info = amdsmi_get_power_cap_info(device) print(power_info['power_cap']) print(power_info['dpm_cap']) - print(power_info['power_cap_default']) + print(power_info['default_power_cap']) print(power_info['min_power_cap']) print(power_info['max_power_cap']) except AmdSmiException as e: @@ -559,8 +559,8 @@ Output: Dictionary with fields Field | Description ---|--- `cur_clk`| Current clock for given clock type -`min_clk` | Minimum clock for given clock type `max_clk` | Maximum clock for given clock type +`min_clk` | Minimum clock for given clock type Exceptions that can be thrown by `amdsmi_get_clock_info` function: * `AmdSmiLibraryException` diff --git a/projects/amdsmi/py-interface/__init__.py b/projects/amdsmi/py-interface/__init__.py index 5a7333a07e..e7c939a8e5 100644 --- a/projects/amdsmi/py-interface/__init__.py +++ b/projects/amdsmi/py-interface/__init__.py @@ -186,6 +186,7 @@ from .amdsmi_interface import AmdSmiXgmiStatus from .amdsmi_interface import AmdSmiMemoryPageStatus from .amdsmi_interface import AmdSmiIoLinkType from .amdsmi_interface import AmdSmiUtilizationCounterType +from .amdsmi_interface import AmdSmiProcessorType # Exceptions from .amdsmi_exception import AmdSmiLibraryException diff --git a/projects/amdsmi/py-interface/amdsmi_exception.py b/projects/amdsmi/py-interface/amdsmi_exception.py index 8dcf3fa625..046659e459 100644 --- a/projects/amdsmi/py-interface/amdsmi_exception.py +++ b/projects/amdsmi/py-interface/amdsmi_exception.py @@ -24,32 +24,32 @@ from . import amdsmi_wrapper class AmdSmiRetCode(IntEnum): SUCCESS = amdsmi_wrapper.AMDSMI_STATUS_SUCCESS - ERR_INVAL = amdsmi_wrapper.AMDSMI_STATUS_INVAL - ERR_NOT_SUPPORTED = amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED - FILE_ERROR = amdsmi_wrapper.AMDSMI_STATUS_FILE_ERROR - ERR_NO_PERM = amdsmi_wrapper.AMDSMI_STATUS_NO_PERM - ERR_OUT_OF_RESOURCES = amdsmi_wrapper.AMDSMI_STATUS_OUT_OF_RESOURCES - INTERNAL_EXCEPTION = amdsmi_wrapper.AMDSMI_STATUS_INTERNAL_EXCEPTION - INPUT_OUT_OF_BOUNDS = amdsmi_wrapper.AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS - INIT_ERROR = amdsmi_wrapper.AMDSMI_STATUS_INIT_ERROR - NOT_IMPLEMENTED = amdsmi_wrapper.AMDSMI_STATUS_NOT_YET_IMPLEMENTED - ERR_NOT_FOUND = amdsmi_wrapper.AMDSMI_STATUS_NOT_FOUND - INSUFFICIENT_SIZE = amdsmi_wrapper.AMDSMI_STATUS_INSUFFICIENT_SIZE - INTERRUPT = amdsmi_wrapper.AMDSMI_STATUS_INTERRUPT - UNEXPECTED_SIZE = amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_SIZE - NO_DATA = amdsmi_wrapper.AMDSMI_STATUS_NO_DATA - UNEXPECTED_DATA = amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_DATA - ERR_BUSY = amdsmi_wrapper.AMDSMI_STATUS_BUSY - REFCOUNT_OVERFLOW = amdsmi_wrapper.AMDSMI_STATUS_REFCOUNT_OVERFLOW - FAIL_LOAD_MODULE = amdsmi_wrapper.AMDSMI_STATUS_FAIL_LOAD_MODULE - FAIL_LOAD_SYMBOL = amdsmi_wrapper.AMDSMI_STATUS_FAIL_LOAD_SYMBOL - DRM_ERROR = amdsmi_wrapper.AMDSMI_STATUS_DRM_ERROR - ERR_IO = amdsmi_wrapper.AMDSMI_STATUS_IO - API_FAILED = amdsmi_wrapper.AMDSMI_STATUS_API_FAILED - TIMEOUT = amdsmi_wrapper.AMDSMI_STATUS_TIMEOUT - NO_SLOT = amdsmi_wrapper.AMDSMI_STATUS_NO_SLOT - RETRY = amdsmi_wrapper.AMDSMI_STATUS_RETRY - NOT_INIT = amdsmi_wrapper.AMDSMI_STATUS_NOT_INIT + STATUS_INVAL = amdsmi_wrapper.AMDSMI_STATUS_INVAL + STATUS_NOT_SUPPORTED = amdsmi_wrapper.AMDSMI_STATUS_NOT_SUPPORTED + STATUS_FILE_ERROR = amdsmi_wrapper.AMDSMI_STATUS_FILE_ERROR + STATUS_NO_PERM = amdsmi_wrapper.AMDSMI_STATUS_NO_PERM + STATUS_OUT_OF_RESOURCES = amdsmi_wrapper.AMDSMI_STATUS_OUT_OF_RESOURCES + STATUS_INTERNAL_EXCEPTION = amdsmi_wrapper.AMDSMI_STATUS_INTERNAL_EXCEPTION + STATUS_INPUT_OUT_OF_BOUNDS = amdsmi_wrapper.AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS + STATUS_INIT_ERROR = amdsmi_wrapper.AMDSMI_STATUS_INIT_ERROR + STATUS_NOT_YET_IMPLEMENTED = amdsmi_wrapper.AMDSMI_STATUS_NOT_YET_IMPLEMENTED + STATUS_NOT_FOUND = amdsmi_wrapper.AMDSMI_STATUS_NOT_FOUND + STATUS_INSUFFICIENT_SIZE = amdsmi_wrapper.AMDSMI_STATUS_INSUFFICIENT_SIZE + STATUS_INTERRUPT = amdsmi_wrapper.AMDSMI_STATUS_INTERRUPT + STATUS_UNEXPECTED_SIZE = amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_SIZE + STATUS_NO_DATA = amdsmi_wrapper.AMDSMI_STATUS_NO_DATA + STATUS_UNEXPECTED_DATA = amdsmi_wrapper.AMDSMI_STATUS_UNEXPECTED_DATA + STATUS_BUSY = amdsmi_wrapper.AMDSMI_STATUS_BUSY + STATUS_REFCOUNT_OVERFLOW = amdsmi_wrapper.AMDSMI_STATUS_REFCOUNT_OVERFLOW + STATUS_FAIL_LOAD_MODULE = amdsmi_wrapper.AMDSMI_STATUS_FAIL_LOAD_MODULE + STATUS_FAIL_LOAD_SYMBOL = amdsmi_wrapper.AMDSMI_STATUS_FAIL_LOAD_SYMBOL + STATUS_DRM_ERROR = amdsmi_wrapper.AMDSMI_STATUS_DRM_ERROR + STATUS_IO = amdsmi_wrapper.AMDSMI_STATUS_IO + STATUS_API_FAILED = amdsmi_wrapper.AMDSMI_STATUS_API_FAILED + STATUS_TIMEOUT = amdsmi_wrapper.AMDSMI_STATUS_TIMEOUT + STATUS_NO_SLOT = amdsmi_wrapper.AMDSMI_STATUS_NO_SLOT + STATUS_RETRY = amdsmi_wrapper.AMDSMI_STATUS_RETRY + STATUS_NOT_INIT = amdsmi_wrapper.AMDSMI_STATUS_NOT_INIT UNKNOWN_ERROR = amdsmi_wrapper.AMDSMI_STATUS_UNKNOWN_ERROR @@ -79,32 +79,32 @@ class AmdSmiLibraryException(AmdSmiException): def set_err_info(self): switch = { - AmdSmiRetCode.ERR_INVAL: "AMDSMI_STATUS_INVAL - Invalid parameters", - AmdSmiRetCode.ERR_NOT_SUPPORTED: "AMDSMI_STATUS_NOT_SUPPORTED - Feature not supported", - AmdSmiRetCode.FILE_ERROR: "AMDSMI_STATUS_FILE_ERROR - Error opening file", - AmdSmiRetCode.ERR_OUT_OF_RESOURCES: "AMDSMI_STATUS_OUT_OF_RESOURCES - Not enough memory", - AmdSmiRetCode.INTERNAL_EXCEPTION: "AMDSMI_STATUS_INTERNAL_EXCEPTION - Internal error", - AmdSmiRetCode.ERR_NO_PERM: "AMDSMI_STATUS_NO_PERM - Permission Denied", - AmdSmiRetCode.INPUT_OUT_OF_BOUNDS: "AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS - Out of bounds", - AmdSmiRetCode.INIT_ERROR: "AMDSMI_STATUS_INIT_ERROR - Initialization error", - AmdSmiRetCode.ERR_BUSY: "AMDSMI_STATUS_BUSY - Device busy", - AmdSmiRetCode.ERR_NOT_FOUND: "AMDSMI_STATUS_NOT_FOUND - Device Not found", - AmdSmiRetCode.ERR_IO: "AMDSMI_STATUS_IO - I/O Error", - AmdSmiRetCode.NOT_IMPLEMENTED: "AMDSMI_STATUS_NOT_YET_IMPLEMENTED - Feature not yet implemented", - AmdSmiRetCode.INSUFFICIENT_SIZE: "AMDSMI_STATUS_INSUFFICIENT_SIZE - Insufficient size for operation", - AmdSmiRetCode.INTERRUPT: "AMDSMI_STATUS_INTERRUPT - Interrupt ocurred during execution", - AmdSmiRetCode.UNEXPECTED_SIZE: "AMDSMI_STATUS_UNEXPECTED_SIZE - unexpected size of data was read", - AmdSmiRetCode.NO_DATA: "AMDSMI_STATUS_NO_DATA - No data was found for given input", - AmdSmiRetCode.UNEXPECTED_DATA: "AMDSMI_STATUS_UNEXPECTED_DATA - The data read or provided was unexpected", - AmdSmiRetCode.REFCOUNT_OVERFLOW: "AMDSMI_STATUS_REFCOUNT_OVERFLOW - Internal reference counter exceeded INT32_MAX", - AmdSmiRetCode.FAIL_LOAD_MODULE: "AMDSMI_STATUS_FAIL_LOAD_MODULE - Fail to load lib", - AmdSmiRetCode.FAIL_LOAD_SYMBOL: "AMDSMI_STATUS_FAIL_LOAD_SYMBOL - Fail to load symbol", - AmdSmiRetCode.DRM_ERROR: "AMDSMI_STATUS_DRM_ERROR - Error when called libdrm", - AmdSmiRetCode.API_FAILED: "AMDSMI_STATUS_API_FAILED - API call failed", - AmdSmiRetCode.TIMEOUT: "AMDSMI_STATUS_TIMEOUT - Timeout in API call", - AmdSmiRetCode.NO_SLOT: "AMDSMI_STATUS_NO_SLOT - No more free slot", - AmdSmiRetCode.RETRY: "AMDSMI_STATUS_RETRY - Retry operation", - AmdSmiRetCode.NOT_INIT: "AMDSMI_STATUS_NOT_INIT - Device not initialized", + AmdSmiRetCode.STATUS_INVAL: "AMDSMI_STATUS_INVAL - Invalid parameters", + AmdSmiRetCode.STATUS_NOT_SUPPORTED: "AMDSMI_STATUS_NOT_SUPPORTED - Feature not supported", + AmdSmiRetCode.STATUS_FILE_ERROR: "AMDSMI_STATUS_FILE_ERROR - Error opening file", + AmdSmiRetCode.STATUS_OUT_OF_RESOURCES: "AMDSMI_STATUS_OUT_OF_RESOURCES - Not enough memory", + AmdSmiRetCode.STATUS_INTERNAL_EXCEPTION: "AMDSMI_STATUS_INTERNAL_EXCEPTION - Internal error", + AmdSmiRetCode.STATUS_NO_PERM: "AMDSMI_STATUS_NO_PERM - Permission Denied", + AmdSmiRetCode.STATUS_INPUT_OUT_OF_BOUNDS: "AMDSMI_STATUS_INPUT_OUT_OF_BOUNDS - Out of bounds", + AmdSmiRetCode.STATUS_INIT_ERROR: "AMDSMI_STATUS_INIT_ERROR - Initialization error", + AmdSmiRetCode.STATUS_BUSY: "AMDSMI_STATUS_BUSY - Device busy", + AmdSmiRetCode.STATUS_NOT_FOUND: "AMDSMI_STATUS_NOT_FOUND - Device Not found", + AmdSmiRetCode.STATUS_IO: "AMDSMI_STATUS_IO - I/O Error", + AmdSmiRetCode.STATUS_NOT_YET_IMPLEMENTED: "AMDSMI_STATUS_NOT_YET_IMPLEMENTED - Feature not yet implemented", + AmdSmiRetCode.STATUS_INSUFFICIENT_SIZE: "AMDSMI_STATUS_INSUFFICIENT_SIZE - Insufficient size for operation", + AmdSmiRetCode.STATUS_INTERRUPT: "AMDSMI_STATUS_INTERRUPT - Interrupt ocurred during execution", + AmdSmiRetCode.STATUS_UNEXPECTED_SIZE: "AMDSMI_STATUS_UNEXPECTED_SIZE - unexpected size of data was read", + AmdSmiRetCode.STATUS_NO_DATA: "AMDSMI_STATUS_NO_DATA - No data was found for given input", + AmdSmiRetCode.STATUS_UNEXPECTED_DATA: "AMDSMI_STATUS_UNEXPECTED_DATA - The data read or provided was unexpected", + AmdSmiRetCode.STATUS_REFCOUNT_OVERFLOW: "AMDSMI_STATUS_REFCOUNT_OVERFLOW - Internal reference counter exceeded INT32_MAX", + AmdSmiRetCode.STATUS_FAIL_LOAD_MODULE: "AMDSMI_STATUS_FAIL_LOAD_MODULE - Fail to load lib", + AmdSmiRetCode.STATUS_FAIL_LOAD_SYMBOL: "AMDSMI_STATUS_FAIL_LOAD_SYMBOL - Fail to load symbol", + AmdSmiRetCode.STATUS_DRM_ERROR: "AMDSMI_STATUS_DRM_ERROR - Error when called libdrm", + AmdSmiRetCode.STATUS_API_FAILED: "AMDSMI_STATUS_API_FAILED - API call failed", + AmdSmiRetCode.STATUS_TIMEOUT: "AMDSMI_STATUS_TIMEOUT - Timeout in API call", + AmdSmiRetCode.STATUS_NO_SLOT: "AMDSMI_STATUS_NO_SLOT - No more free slot", + AmdSmiRetCode.STATUS_RETRY: "AMDSMI_STATUS_RETRY - Retry operation", + AmdSmiRetCode.STATUS_NOT_INIT: "AMDSMI_STATUS_NOT_INIT - Device not initialized", } self.err_info = switch.get(self.err_code, "AMDSMI_STATUS_UNKNOWN_ERROR - An unknown error occurred") diff --git a/projects/amdsmi/py-interface/amdsmi_interface.py b/projects/amdsmi/py-interface/amdsmi_interface.py index 355faf2f0a..6c4f5e996b 100644 --- a/projects/amdsmi/py-interface/amdsmi_interface.py +++ b/projects/amdsmi/py-interface/amdsmi_interface.py @@ -29,11 +29,11 @@ from . import amdsmi_wrapper from .amdsmi_exception import * class AmdSmiInitFlags(IntEnum): - ALL_DEVICES = amdsmi_wrapper.AMDSMI_INIT_ALL_DEVICES - AMD_CPUS = amdsmi_wrapper.AMDSMI_INIT_AMD_CPUS - AMD_GPUS = amdsmi_wrapper.AMDSMI_INIT_AMD_GPUS - NON_AMD_CPUS = amdsmi_wrapper.AMDSMI_INIT_NON_AMD_CPUS - NON_AMD_GPUS = amdsmi_wrapper.AMDSMI_INIT_NON_AMD_GPUS + INIT_ALL_PROCESSORS = amdsmi_wrapper.AMDSMI_INIT_ALL_PROCESSORS + INIT_AMD_CPUS = amdsmi_wrapper.AMDSMI_INIT_AMD_CPUS + INIT_AMD_GPUS = amdsmi_wrapper.AMDSMI_INIT_AMD_GPUS + INIT_NON_AMD_CPUS = amdsmi_wrapper.AMDSMI_INIT_NON_AMD_CPUS + INIT_NON_AMD_GPUS = amdsmi_wrapper.AMDSMI_INIT_NON_AMD_GPUS class AmdSmiContainerTypes(IntEnum): @@ -94,6 +94,38 @@ class AmdSmiFwBlock(IntEnum): FW_ID_MC = amdsmi_wrapper.FW_ID_MC FW_ID_PSP_BL = amdsmi_wrapper.FW_ID_PSP_BL FW_ID_CP_PM4 = amdsmi_wrapper.FW_ID_CP_PM4 + FW_ID_RLC_P = amdsmi_wrapper.FW_ID_RLC_P + FW_ID_SEC_POLICY_STAGE2 = amdsmi_wrapper.FW_ID_SEC_POLICY_STAGE2 + FW_ID_REG_ACCESS_WHITELIST = amdsmi_wrapper.FW_ID_REG_ACCESS_WHITELIST + FW_ID_IMU_DRAM = amdsmi_wrapper.FW_ID_IMU_DRAM + FW_ID_IMU_IRAM = amdsmi_wrapper.FW_ID_IMU_IRAM + FW_ID_SDMA_TH0 = amdsmi_wrapper.FW_ID_SDMA_TH0 + FW_ID_SDMA_TH1 = amdsmi_wrapper.FW_ID_SDMA_TH1 + FW_ID_CP_MES = amdsmi_wrapper.FW_ID_CP_MES + FW_ID_MES_STACK = amdsmi_wrapper.FW_ID_MES_STACK + FW_ID_MES_THREAD1 = amdsmi_wrapper.FW_ID_MES_THREAD1 + FW_ID_MES_THREAD1_STACK = amdsmi_wrapper.FW_ID_MES_THREAD1_STACK + FW_ID_RLX6 = amdsmi_wrapper.FW_ID_RLX6 + FW_ID_RLX6_DRAM_BOOT = amdsmi_wrapper.FW_ID_RLX6_DRAM_BOOT + FW_ID_RS64_ME = amdsmi_wrapper.FW_ID_RS64_ME + FW_ID_RS64_ME_P0_DATA = amdsmi_wrapper.FW_ID_RS64_ME_P0_DATA + FW_ID_RS64_ME_P1_DATA = amdsmi_wrapper.FW_ID_RS64_ME_P1_DATA + FW_ID_RS64_PFP = amdsmi_wrapper.FW_ID_RS64_PFP + FW_ID_RS64_PFP_P0_DATA = amdsmi_wrapper.FW_ID_RS64_PFP_P0_DATA + FW_ID_RS64_PFP_P1_DATA = amdsmi_wrapper.FW_ID_RS64_PFP_P1_DATA + FW_ID_RS64_MEC = amdsmi_wrapper.FW_ID_RS64_MEC + FW_ID_RS64_MEC_P0_DATA = amdsmi_wrapper.FW_ID_RS64_MEC_P0_DATA + FW_ID_RS64_MEC_P1_DATA = amdsmi_wrapper.FW_ID_RS64_MEC_P1_DATA + FW_ID_RS64_MEC_P2_DATA = amdsmi_wrapper.FW_ID_RS64_MEC_P2_DATA + FW_ID_RS64_MEC_P3_DATA = amdsmi_wrapper.FW_ID_RS64_MEC_P3_DATA + FW_ID_PPTABLE = amdsmi_wrapper.FW_ID_PPTABLE + FW_ID_PSP_SOC = amdsmi_wrapper.FW_ID_PSP_SOC + FW_ID_PSP_DBG = amdsmi_wrapper.FW_ID_PSP_DBG + FW_ID_PSP_INTF = amdsmi_wrapper.FW_ID_PSP_INTF + FW_ID_RLX6_CORE1 = amdsmi_wrapper.FW_ID_RLX6_CORE1 + FW_ID_RLX6_DRAM_BOOT_CORE1 = amdsmi_wrapper.FW_ID_RLX6_DRAM_BOOT_CORE1 + FW_ID_RLCV_LX7 = amdsmi_wrapper.FW_ID_RLCV_LX7 + FW_ID_RLC_SAVE_RESTORE_LIST = amdsmi_wrapper.FW_ID_RLC_SAVE_RESTORE_LIST FW_ID_ASD = amdsmi_wrapper.FW_ID_ASD FW_ID_TA_RAS = amdsmi_wrapper.FW_ID_TA_RAS FW_ID_XGMI = amdsmi_wrapper.FW_ID_XGMI @@ -286,6 +318,13 @@ class AmdSmiUtilizationCounterType(IntEnum): COARSE_GRAIN_GFX_ACTIVITY = amdsmi_wrapper.AMDSMI_COARSE_GRAIN_GFX_ACTIVITY COARSE_GRAIN_MEM_ACTIVITY = amdsmi_wrapper.AMDSMI_COARSE_GRAIN_MEM_ACTIVITY +class AmdSmiProcessorType(IntEnum): + UNKNOWN = amdsmi_wrapper.UNKNOWN + AMD_GPU = amdsmi_wrapper.AMD_GPU + AMD_CPU = amdsmi_wrapper.AMD_CPU + NON_AMD_GPU = amdsmi_wrapper.NON_AMD_GPU + NON_AMD_CPU = amdsmi_wrapper.NON_AMD_CPU + class AmdSmiEventReader: def __init__( @@ -499,7 +538,7 @@ def amdsmi_get_socket_info(socket_handle): _check_res( amdsmi_wrapper.amdsmi_get_socket_info( - socket_handle, socket_info, ctypes.c_size_t(128)) + socket_handle, ctypes.c_size_t(128), socket_info) ) return socket_info.value.decode() @@ -536,7 +575,7 @@ def amdsmi_get_processor_handles() -> List[amdsmi_wrapper.amdsmi_processor_handl return devices -def amdsmi_init(flag=AmdSmiInitFlags.AMD_GPUS): +def amdsmi_init(flag=AmdSmiInitFlags.INIT_AMD_GPUS): if not isinstance(flag, AmdSmiInitFlags): raise AmdSmiParameterException(flag, AmdSmiInitFlags) _check_res(amdsmi_wrapper.amdsmi_init(flag)) @@ -559,7 +598,10 @@ def amdsmi_get_processor_type( amdsmi_wrapper.amdsmi_get_processor_type( processor_handle, ctypes.byref(dev_type)) ) - return dev_type.value + + return { + "processor_type": AmdSmiProcessorType(dev_type.value).name + } def amdsmi_get_gpu_device_bdf(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> str: @@ -594,6 +636,7 @@ def amdsmi_get_gpu_asic_info( return { "market_name": asic_info.market_name.decode("utf-8"), "vendor_id": asic_info.vendor_id, + "subvendor_id": asic_info.subvendor_id, "device_id": asic_info.device_id, "rev_id": asic_info.rev_id, "asic_serial": asic_info.asic_serial.decode("utf-8"), @@ -616,8 +659,8 @@ def amdsmi_get_power_cap_info( ) return {"power_cap": power_info.power_cap, + "default_power_cap": power_info.default_power_cap, "dpm_cap": power_info.dpm_cap, - "power_cap_default": power_info.default_power_cap, "min_power_cap": power_info.min_power_cap, "max_power_cap": power_info.max_power_cap} @@ -638,9 +681,9 @@ def amdsmi_get_gpu_vbios_info( return { "name": vbios_info.name.decode("utf-8"), - "version": vbios_info.version.decode("utf-8"), "build_date": vbios_info.build_date.decode("utf-8"), "part_number": vbios_info.part_number.decode("utf-8"), + "version": vbios_info.version.decode("utf-8"), } @@ -668,7 +711,7 @@ def amdsmi_get_gpu_activity( def amdsmi_get_clock_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - clock_type: amdsmi_wrapper.amdsmi_clk_type_t, + clock_type: AmdSmiClkType, ) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( @@ -681,15 +724,15 @@ def amdsmi_get_clock_info( _check_res( amdsmi_wrapper.amdsmi_get_clock_info( processor_handle, - amdsmi_wrapper.amdsmi_clk_type_t(clock_type), + clock_type, ctypes.byref(clock_measure), ) ) return { "cur_clk": clock_measure.cur_clk, - "min_clk": clock_measure.min_clk, "max_clk": clock_measure.max_clk, + "min_clk": clock_measure.min_clk, } @@ -824,44 +867,44 @@ def amdsmi_get_gpu_ras_block_features_enabled( def amdsmi_get_gpu_process_list( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, -) -> List[amdsmi_wrapper.amdsmi_process_handle]: +) -> List[amdsmi_wrapper.amdsmi_process_handle_t]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) max_processes = ctypes.c_uint32(0) - process_list = (amdsmi_wrapper.amdsmi_process_handle * + process_list = (amdsmi_wrapper.amdsmi_process_handle_t * max_processes.value)() _check_res( amdsmi_wrapper.amdsmi_get_gpu_process_list( - processor_handle, process_list, ctypes.byref(max_processes) + processor_handle, ctypes.byref(max_processes), process_list ) ) - process_list = (amdsmi_wrapper.amdsmi_process_handle * + process_list = (amdsmi_wrapper.amdsmi_process_handle_t * max_processes.value)() _check_res( amdsmi_wrapper.amdsmi_get_gpu_process_list( - processor_handle, process_list, ctypes.byref(max_processes) + processor_handle, ctypes.byref(max_processes), process_list ) ) - return [amdsmi_wrapper.amdsmi_process_handle(x) for x in list(process_list)] + return [amdsmi_wrapper.amdsmi_process_handle_t(x) for x in list(process_list)] def amdsmi_get_gpu_process_info( processor_handle: amdsmi_wrapper.amdsmi_processor_handle, - process: amdsmi_wrapper.amdsmi_process_handle, + process: amdsmi_wrapper.amdsmi_process_handle_t, ) -> Dict[str, Any]: if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle): raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - if not isinstance(process, amdsmi_wrapper.amdsmi_process_handle): + if not isinstance(process, amdsmi_wrapper.amdsmi_process_handle_t): raise AmdSmiParameterException( - process, amdsmi_wrapper.amdsmi_process_handle) + process, amdsmi_wrapper.amdsmi_process_handle_t) info = amdsmi_wrapper.amdsmi_proc_info_t() _check_res( @@ -946,6 +989,8 @@ def amdsmi_get_power_info( return { "average_socket_power": power_measure.average_socket_power, "gfx_voltage": power_measure.gfx_voltage, + 'soc_voltage': power_measure.soc_voltage, + 'mem_voltage': power_measure.mem_voltage, "power_limit" : power_measure.power_limit, } @@ -1019,7 +1064,7 @@ def amdsmi_get_pcie_link_caps( processor_handle, ctypes.byref(pcie_info)) ) - return {"pcie_lanes": pcie_info.pcie_lanes, "pcie_speed": pcie_info.pcie_speed} + return {"pcie_speed": pcie_info.pcie_speed, "pcie_lanes": pcie_info.pcie_lanes} def amdsmi_get_processor_handle_from_bdf(bdf): diff --git a/projects/amdsmi/py-interface/amdsmi_wrapper.py b/projects/amdsmi/py-interface/amdsmi_wrapper.py index 6036690e92..5c65e7899f 100644 --- a/projects/amdsmi/py-interface/amdsmi_wrapper.py +++ b/projects/amdsmi/py-interface/amdsmi_wrapper.py @@ -190,13 +190,13 @@ else: # values for enumeration 'c__EA_amdsmi_init_flags_t' c__EA_amdsmi_init_flags_t__enumvalues = { - 0: 'AMDSMI_INIT_ALL_DEVICES', + 0: 'AMDSMI_INIT_ALL_PROCESSORS', 1: 'AMDSMI_INIT_AMD_CPUS', 2: 'AMDSMI_INIT_AMD_GPUS', 4: 'AMDSMI_INIT_NON_AMD_CPUS', 8: 'AMDSMI_INIT_NON_AMD_GPUS', } -AMDSMI_INIT_ALL_DEVICES = 0 +AMDSMI_INIT_ALL_PROCESSORS = 0 AMDSMI_INIT_AMD_CPUS = 1 AMDSMI_INIT_AMD_GPUS = 2 AMDSMI_INIT_NON_AMD_CPUS = 4 @@ -418,14 +418,46 @@ c__EA_amdsmi_fw_block_t__enumvalues = { 36: 'FW_ID_MC', 37: 'FW_ID_PSP_BL', 38: 'FW_ID_CP_PM4', - 39: 'FW_ID_ASD', - 40: 'FW_ID_TA_RAS', - 41: 'FW_ID_XGMI', - 42: 'FW_ID_RLC_SRLG', - 43: 'FW_ID_RLC_SRLS', - 44: 'FW_ID_SMC', - 45: 'FW_ID_DMCU', - 46: 'FW_ID__MAX', + 39: 'FW_ID_RLC_P', + 40: 'FW_ID_SEC_POLICY_STAGE2', + 41: 'FW_ID_REG_ACCESS_WHITELIST', + 42: 'FW_ID_IMU_DRAM', + 43: 'FW_ID_IMU_IRAM', + 44: 'FW_ID_SDMA_TH0', + 45: 'FW_ID_SDMA_TH1', + 46: 'FW_ID_CP_MES', + 47: 'FW_ID_MES_STACK', + 48: 'FW_ID_MES_THREAD1', + 49: 'FW_ID_MES_THREAD1_STACK', + 50: 'FW_ID_RLX6', + 51: 'FW_ID_RLX6_DRAM_BOOT', + 52: 'FW_ID_RS64_ME', + 53: 'FW_ID_RS64_ME_P0_DATA', + 54: 'FW_ID_RS64_ME_P1_DATA', + 55: 'FW_ID_RS64_PFP', + 56: 'FW_ID_RS64_PFP_P0_DATA', + 57: 'FW_ID_RS64_PFP_P1_DATA', + 58: 'FW_ID_RS64_MEC', + 59: 'FW_ID_RS64_MEC_P0_DATA', + 60: 'FW_ID_RS64_MEC_P1_DATA', + 61: 'FW_ID_RS64_MEC_P2_DATA', + 62: 'FW_ID_RS64_MEC_P3_DATA', + 63: 'FW_ID_PPTABLE', + 64: 'FW_ID_PSP_SOC', + 65: 'FW_ID_PSP_DBG', + 66: 'FW_ID_PSP_INTF', + 67: 'FW_ID_RLX6_CORE1', + 68: 'FW_ID_RLX6_DRAM_BOOT_CORE1', + 69: 'FW_ID_RLCV_LX7', + 70: 'FW_ID_RLC_SAVE_RESTORE_LIST', + 71: 'FW_ID_ASD', + 72: 'FW_ID_TA_RAS', + 73: 'FW_ID_XGMI', + 74: 'FW_ID_RLC_SRLG', + 75: 'FW_ID_RLC_SRLS', + 76: 'FW_ID_SMC', + 77: 'FW_ID_DMCU', + 78: 'FW_ID__MAX', } FW_ID_SMU = 1 FW_ID_FIRST = 1 @@ -466,14 +498,46 @@ FW_ID_DRV_CAP = 35 FW_ID_MC = 36 FW_ID_PSP_BL = 37 FW_ID_CP_PM4 = 38 -FW_ID_ASD = 39 -FW_ID_TA_RAS = 40 -FW_ID_XGMI = 41 -FW_ID_RLC_SRLG = 42 -FW_ID_RLC_SRLS = 43 -FW_ID_SMC = 44 -FW_ID_DMCU = 45 -FW_ID__MAX = 46 +FW_ID_RLC_P = 39 +FW_ID_SEC_POLICY_STAGE2 = 40 +FW_ID_REG_ACCESS_WHITELIST = 41 +FW_ID_IMU_DRAM = 42 +FW_ID_IMU_IRAM = 43 +FW_ID_SDMA_TH0 = 44 +FW_ID_SDMA_TH1 = 45 +FW_ID_CP_MES = 46 +FW_ID_MES_STACK = 47 +FW_ID_MES_THREAD1 = 48 +FW_ID_MES_THREAD1_STACK = 49 +FW_ID_RLX6 = 50 +FW_ID_RLX6_DRAM_BOOT = 51 +FW_ID_RS64_ME = 52 +FW_ID_RS64_ME_P0_DATA = 53 +FW_ID_RS64_ME_P1_DATA = 54 +FW_ID_RS64_PFP = 55 +FW_ID_RS64_PFP_P0_DATA = 56 +FW_ID_RS64_PFP_P1_DATA = 57 +FW_ID_RS64_MEC = 58 +FW_ID_RS64_MEC_P0_DATA = 59 +FW_ID_RS64_MEC_P1_DATA = 60 +FW_ID_RS64_MEC_P2_DATA = 61 +FW_ID_RS64_MEC_P3_DATA = 62 +FW_ID_PPTABLE = 63 +FW_ID_PSP_SOC = 64 +FW_ID_PSP_DBG = 65 +FW_ID_PSP_INTF = 66 +FW_ID_RLX6_CORE1 = 67 +FW_ID_RLX6_DRAM_BOOT_CORE1 = 68 +FW_ID_RLCV_LX7 = 69 +FW_ID_RLC_SAVE_RESTORE_LIST = 70 +FW_ID_ASD = 71 +FW_ID_TA_RAS = 72 +FW_ID_XGMI = 73 +FW_ID_RLC_SRLG = 74 +FW_ID_RLC_SRLS = 75 +FW_ID_SMC = 76 +FW_ID_DMCU = 77 +FW_ID__MAX = 78 c__EA_amdsmi_fw_block_t = ctypes.c_uint32 # enum amdsmi_fw_block_t = c__EA_amdsmi_fw_block_t amdsmi_fw_block_t__enumvalues = c__EA_amdsmi_fw_block_t__enumvalues @@ -509,6 +573,7 @@ struct_c__SA_amdsmi_vram_info_t._pack_ = 1 # source:False struct_c__SA_amdsmi_vram_info_t._fields_ = [ ('vram_total', ctypes.c_uint32), ('vram_used', ctypes.c_uint32), + ('reserved', ctypes.c_uint32 * 2), ] amdsmi_vram_info_t = struct_c__SA_amdsmi_vram_info_t @@ -567,7 +632,7 @@ struct_c__SA_amdsmi_vbios_info_t._fields_ = [ ('build_date', ctypes.c_char * 32), ('part_number', ctypes.c_char * 64), ('version', ctypes.c_char * 32), - ('reserved', ctypes.c_uint32 * 15), + ('reserved', ctypes.c_uint32 * 16), ] amdsmi_vbios_info_t = struct_c__SA_amdsmi_vbios_info_t @@ -589,7 +654,7 @@ struct_c__SA_amdsmi_fw_info_t._pack_ = 1 # source:False struct_c__SA_amdsmi_fw_info_t._fields_ = [ ('num_fw_info', ctypes.c_ubyte), ('PADDING_0', ctypes.c_ubyte * 7), - ('fw_info_list', struct_c__SA_amdsmi_fw_info_t_0 * 46), + ('fw_info_list', struct_c__SA_amdsmi_fw_info_t_0 * 78), ('reserved', ctypes.c_uint32 * 7), ('PADDING_1', ctypes.c_ubyte * 4), ] @@ -606,7 +671,7 @@ struct_c__SA_amdsmi_asic_info_t._fields_ = [ ('device_id', ctypes.c_uint64), ('rev_id', ctypes.c_uint32), ('asic_serial', ctypes.c_char * 32), - ('PADDING_0', ctypes.c_ubyte * 4), + ('reserved', ctypes.c_uint32 * 3), ] amdsmi_asic_info_t = struct_c__SA_amdsmi_asic_info_t @@ -648,7 +713,7 @@ struct_c__SA_amdsmi_clk_info_t._fields_ = [ ('cur_clk', ctypes.c_uint32), ('min_clk', ctypes.c_uint32), ('max_clk', ctypes.c_uint32), - ('reserved', ctypes.c_uint32 * 4), + ('reserved', ctypes.c_uint32 * 5), ] amdsmi_clk_info_t = struct_c__SA_amdsmi_clk_info_t @@ -664,10 +729,20 @@ struct_c__SA_amdsmi_engine_usage_t._fields_ = [ ] amdsmi_engine_usage_t = struct_c__SA_amdsmi_engine_usage_t -amdsmi_process_handle = ctypes.c_uint32 +amdsmi_process_handle_t = ctypes.c_uint32 class struct_c__SA_amdsmi_proc_info_t(Structure): pass +class struct_c__SA_amdsmi_proc_info_t_0(Structure): + pass + +struct_c__SA_amdsmi_proc_info_t_0._pack_ = 1 # source:False +struct_c__SA_amdsmi_proc_info_t_0._fields_ = [ + ('gfx', ctypes.c_uint64), + ('enc', ctypes.c_uint64), + ('reserved', ctypes.c_uint32 * 12), +] + class struct_c__SA_amdsmi_proc_info_t_1(Structure): pass @@ -676,15 +751,7 @@ struct_c__SA_amdsmi_proc_info_t_1._fields_ = [ ('gtt_mem', ctypes.c_uint64), ('cpu_mem', ctypes.c_uint64), ('vram_mem', ctypes.c_uint64), -] - -class struct_c__SA_amdsmi_proc_info_t_0(Structure): - pass - -struct_c__SA_amdsmi_proc_info_t_0._pack_ = 1 # source:False -struct_c__SA_amdsmi_proc_info_t_0._fields_ = [ - ('gfx', ctypes.c_uint64), - ('enc', ctypes.c_uint64), + ('reserved', ctypes.c_uint32 * 10), ] struct_c__SA_amdsmi_proc_info_t._pack_ = 1 # source:False @@ -1322,7 +1389,7 @@ amdsmi_get_socket_handles.argtypes = [ctypes.POINTER(ctypes.c_uint32), ctypes.PO size_t = ctypes.c_uint64 amdsmi_get_socket_info = _libraries['libamd_smi.so'].amdsmi_get_socket_info amdsmi_get_socket_info.restype = amdsmi_status_t -amdsmi_get_socket_info.argtypes = [amdsmi_socket_handle, ctypes.POINTER(ctypes.c_char), size_t] +amdsmi_get_socket_info.argtypes = [amdsmi_socket_handle, size_t, ctypes.POINTER(ctypes.c_char)] amdsmi_get_processor_handles = _libraries['libamd_smi.so'].amdsmi_get_processor_handles amdsmi_get_processor_handles.restype = amdsmi_status_t amdsmi_get_processor_handles.argtypes = [amdsmi_socket_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.POINTER(None))] @@ -1587,7 +1654,7 @@ amdsmi_get_gpu_process_list.restype = amdsmi_status_t amdsmi_get_gpu_process_list.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_gpu_process_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_process_info amdsmi_get_gpu_process_info.restype = amdsmi_status_t -amdsmi_get_gpu_process_info.argtypes = [amdsmi_processor_handle, amdsmi_process_handle, ctypes.POINTER(struct_c__SA_amdsmi_proc_info_t)] +amdsmi_get_gpu_process_info.argtypes = [amdsmi_processor_handle, amdsmi_process_handle_t, ctypes.POINTER(struct_c__SA_amdsmi_proc_info_t)] amdsmi_get_gpu_total_ecc_count = _libraries['libamd_smi.so'].amdsmi_get_gpu_total_ecc_count amdsmi_get_gpu_total_ecc_count.restype = amdsmi_status_t amdsmi_get_gpu_total_ecc_count.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_c__SA_amdsmi_error_count_t)] @@ -1629,7 +1696,7 @@ __all__ = \ 'AMDSMI_GPU_BLOCK_PCIE_BIF', 'AMDSMI_GPU_BLOCK_RESERVED', 'AMDSMI_GPU_BLOCK_SDMA', 'AMDSMI_GPU_BLOCK_SEM', 'AMDSMI_GPU_BLOCK_SMN', 'AMDSMI_GPU_BLOCK_UMC', - 'AMDSMI_GPU_BLOCK_XGMI_WAFL', 'AMDSMI_INIT_ALL_DEVICES', + 'AMDSMI_GPU_BLOCK_XGMI_WAFL', 'AMDSMI_INIT_ALL_PROCESSORS', 'AMDSMI_INIT_AMD_CPUS', 'AMDSMI_INIT_AMD_GPUS', 'AMDSMI_INIT_NON_AMD_CPUS', 'AMDSMI_INIT_NON_AMD_GPUS', 'AMDSMI_IOLINK_TYPE_NUMIOLINKTYPES', @@ -1694,17 +1761,29 @@ __all__ = \ 'CLK_TYPE_VCLK1', 'CLK_TYPE__MAX', 'CONTAINER_DOCKER', 'CONTAINER_LXC', 'FW_ID_ASD', 'FW_ID_CP_CE', 'FW_ID_CP_ME', 'FW_ID_CP_MEC1', 'FW_ID_CP_MEC2', 'FW_ID_CP_MEC_JT1', - 'FW_ID_CP_MEC_JT2', 'FW_ID_CP_PFP', 'FW_ID_CP_PM4', 'FW_ID_DFC', - 'FW_ID_DMCU', 'FW_ID_DMCU_ERAM', 'FW_ID_DMCU_ISR', - 'FW_ID_DRV_CAP', 'FW_ID_FIRST', 'FW_ID_ISP', 'FW_ID_MC', - 'FW_ID_MMSCH', 'FW_ID_PSP_BL', 'FW_ID_PSP_KEYDB', + 'FW_ID_CP_MEC_JT2', 'FW_ID_CP_MES', 'FW_ID_CP_PFP', + 'FW_ID_CP_PM4', 'FW_ID_DFC', 'FW_ID_DMCU', 'FW_ID_DMCU_ERAM', + 'FW_ID_DMCU_ISR', 'FW_ID_DRV_CAP', 'FW_ID_FIRST', + 'FW_ID_IMU_DRAM', 'FW_ID_IMU_IRAM', 'FW_ID_ISP', 'FW_ID_MC', + 'FW_ID_MES_STACK', 'FW_ID_MES_THREAD1', 'FW_ID_MES_THREAD1_STACK', + 'FW_ID_MMSCH', 'FW_ID_PPTABLE', 'FW_ID_PSP_BL', 'FW_ID_PSP_DBG', + 'FW_ID_PSP_INTF', 'FW_ID_PSP_KEYDB', 'FW_ID_PSP_SOC', 'FW_ID_PSP_SOSDRV', 'FW_ID_PSP_SPL', 'FW_ID_PSP_SYSDRV', - 'FW_ID_PSP_TOC', 'FW_ID_RLC', 'FW_ID_RLC_RESTORE_LIST_CNTL', + 'FW_ID_PSP_TOC', 'FW_ID_REG_ACCESS_WHITELIST', 'FW_ID_RLC', + 'FW_ID_RLCV_LX7', 'FW_ID_RLC_P', 'FW_ID_RLC_RESTORE_LIST_CNTL', 'FW_ID_RLC_RESTORE_LIST_GPM_MEM', - 'FW_ID_RLC_RESTORE_LIST_SRM_MEM', 'FW_ID_RLC_SRLG', - 'FW_ID_RLC_SRLS', 'FW_ID_RLC_V', 'FW_ID_SDMA0', 'FW_ID_SDMA1', + 'FW_ID_RLC_RESTORE_LIST_SRM_MEM', 'FW_ID_RLC_SAVE_RESTORE_LIST', + 'FW_ID_RLC_SRLG', 'FW_ID_RLC_SRLS', 'FW_ID_RLC_V', 'FW_ID_RLX6', + 'FW_ID_RLX6_CORE1', 'FW_ID_RLX6_DRAM_BOOT', + 'FW_ID_RLX6_DRAM_BOOT_CORE1', 'FW_ID_RS64_ME', 'FW_ID_RS64_MEC', + 'FW_ID_RS64_MEC_P0_DATA', 'FW_ID_RS64_MEC_P1_DATA', + 'FW_ID_RS64_MEC_P2_DATA', 'FW_ID_RS64_MEC_P3_DATA', + 'FW_ID_RS64_ME_P0_DATA', 'FW_ID_RS64_ME_P1_DATA', + 'FW_ID_RS64_PFP', 'FW_ID_RS64_PFP_P0_DATA', + 'FW_ID_RS64_PFP_P1_DATA', 'FW_ID_SDMA0', 'FW_ID_SDMA1', 'FW_ID_SDMA2', 'FW_ID_SDMA3', 'FW_ID_SDMA4', 'FW_ID_SDMA5', - 'FW_ID_SDMA6', 'FW_ID_SDMA7', 'FW_ID_SMC', 'FW_ID_SMU', + 'FW_ID_SDMA6', 'FW_ID_SDMA7', 'FW_ID_SDMA_TH0', 'FW_ID_SDMA_TH1', + 'FW_ID_SEC_POLICY_STAGE2', 'FW_ID_SMC', 'FW_ID_SMU', 'FW_ID_TA_RAS', 'FW_ID_UVD', 'FW_ID_VCE', 'FW_ID_VCN', 'FW_ID_XGMI', 'FW_ID__MAX', 'NON_AMD_CPU', 'NON_AMD_GPU', 'TEMPERATURE_TYPE_EDGE', 'TEMPERATURE_TYPE_FIRST', @@ -1786,7 +1865,7 @@ __all__ = \ 'amdsmi_power_profile_preset_masks_t', 'amdsmi_power_profile_preset_masks_t__enumvalues', 'amdsmi_power_profile_status_t', 'amdsmi_proc_info_t', - 'amdsmi_process_handle', 'amdsmi_process_info_t', + 'amdsmi_process_handle_t', 'amdsmi_process_info_t', 'amdsmi_processor_handle', 'amdsmi_range_t', 'amdsmi_ras_err_state_t', 'amdsmi_ras_err_state_t__enumvalues', 'amdsmi_reset_gpu', 'amdsmi_reset_gpu_fan', diff --git a/projects/amdsmi/src/amd_smi/amd_smi.cc b/projects/amdsmi/src/amd_smi/amd_smi.cc index 282913d300..46b39ba5ff 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi.cc @@ -196,7 +196,7 @@ amdsmi_status_t amdsmi_get_socket_handles(uint32_t *socket_count, amdsmi_status_t amdsmi_get_socket_info( amdsmi_socket_handle socket_handle, - char *name, size_t len) { + size_t len, char *name) { AMDSMI_CHECK_INIT(); if (socket_handle == nullptr || name == nullptr) { @@ -1330,7 +1330,7 @@ amdsmi_get_gpu_total_ecc_count(amdsmi_processor_handle processor_handle, amdsmi_ } amdsmi_status_t -amdsmi_get_gpu_process_list(amdsmi_processor_handle processor_handle, amdsmi_process_handle *list, uint32_t *max_processes) { +amdsmi_get_gpu_process_list(amdsmi_processor_handle processor_handle, uint32_t *max_processes, amdsmi_process_handle_t *list) { AMDSMI_CHECK_INIT(); if (max_processes == nullptr) { @@ -1378,7 +1378,7 @@ amdsmi_get_gpu_process_list(amdsmi_processor_handle processor_handle, amdsmi_pro } amdsmi_status_t -amdsmi_get_gpu_process_info(amdsmi_processor_handle processor_handle, amdsmi_process_handle process, amdsmi_proc_info_t *info) { +amdsmi_get_gpu_process_info(amdsmi_processor_handle processor_handle, amdsmi_process_handle_t process, amdsmi_proc_info_t *info) { AMDSMI_CHECK_INIT(); if (info == nullptr) { diff --git a/projects/amdsmi/src/amd_smi/amd_smi_system.cc b/projects/amdsmi/src/amd_smi/amd_smi_system.cc index a872674acf..2347ef2c63 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi_system.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi_system.cc @@ -138,7 +138,7 @@ amdsmi_status_t AMDSmiSystem::cleanup() { } processors_.clear(); sockets_.clear(); - init_flag_ = AMDSMI_INIT_ALL_DEVICES; + init_flag_ = AMDSMI_INIT_ALL_PROCESSORS; rsmi_status_t ret = rsmi_shut_down(); if (ret != RSMI_STATUS_SUCCESS) { return amd::smi::rsmi_to_amdsmi_status(ret);