diff --git a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py index 7febc5dc23..2c950db42e 100644 --- a/projects/amdsmi/amdsmi_cli/amdsmi_commands.py +++ b/projects/amdsmi/amdsmi_cli/amdsmi_commands.py @@ -1969,6 +1969,18 @@ class AMDSMICommands(): if (args.cpu_metrics_table): static_dict["metrics_table"] = {} + try: + cpu_fam = amdsmi_interface.amdsmi_get_cpu_family() + static_dict["metrics_table"]["cpu_family"] = cpu_fam + except amdsmi_exception.AmdSmiLibraryException as e: + static_dict["metrics_table"]["cpu_family"] = "N/A" + logging.debug("Failed to get cpu family | %s", e.get_error_info()) + try: + cpu_mod = amdsmi_interface.amdsmi_get_cpu_model() + static_dict["metrics_table"]["cpu_model"] = cpu_mod + except amdsmi_exception.AmdSmiLibraryException as e: + static_dict["metrics_table"]["cpu_model"] = "N/A" + logging.debug("Failed to get cpu model | %s", e.get_error_info()) try: metrics_table = amdsmi_interface.amdsmi_get_metrics_table(args.cpu) static_dict["metrics_table"]["response"] = metrics_table diff --git a/projects/amdsmi/include/amd_smi/amdsmi.h b/projects/amdsmi/include/amd_smi/amdsmi.h index 194ebc86b5..042f5ca9db 100644 --- a/projects/amdsmi/include/amd_smi/amdsmi.h +++ b/projects/amdsmi/include/amd_smi/amdsmi.h @@ -4963,6 +4963,24 @@ amdsmi_status_t amdsmi_get_metrics_table(amdsmi_processor_handle processor_handl amdsmi_status_t amdsmi_first_online_core_on_cpu_socket(amdsmi_processor_handle processor_handle, uint32_t *pcore_ind); +/** + * @brief Get CPU family. + * + * @param[in,out] cpu_family - Input buffer to return the cpu family + * + * @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail + */ +amdsmi_status_t amdsmi_get_cpu_family(uint32_t *cpu_family); + +/** + * @brief Get CPU model. + * + * @param[in,out] cpu_model - Input buffer to return the cpu model + * + * @return ::amdsmi_status_t | ::AMDSMI_STATUS_SUCCESS on success, non-zero on fail + */ +amdsmi_status_t amdsmi_get_cpu_model(uint32_t *cpu_model); + /** * @brief Get a description of provided AMDSMI error status for esmi errors. * diff --git a/projects/amdsmi/include/amd_smi/impl/amd_smi_system.h b/projects/amdsmi/include/amd_smi/impl/amd_smi_system.h index 9e1004aa3c..18f93e7ab1 100644 --- a/projects/amdsmi/include/amd_smi/impl/amd_smi_system.h +++ b/projects/amdsmi/include/amd_smi/impl/amd_smi_system.h @@ -75,6 +75,9 @@ class AMDSmiSystem { amdsmi_status_t gpu_index_to_handle(uint32_t gpu_index, amdsmi_processor_handle* processor_handle); + amdsmi_status_t get_cpu_family(uint32_t *cpu_family); + + amdsmi_status_t get_cpu_model(uint32_t *cpu_model); private: AMDSmiSystem() : init_flag_(AMDSMI_INIT_AMD_GPUS) {} diff --git a/projects/amdsmi/py-interface/README.md b/projects/amdsmi/py-interface/README.md index f350208697..f16163fb29 100644 --- a/projects/amdsmi/py-interface/README.md +++ b/projects/amdsmi/py-interface/README.md @@ -6038,3 +6038,43 @@ try: except AmdSmiException as e: print(e) ``` + +### amdsmi_get_cpu_family + +Description: Get cpu family. + +Output: cpu family + +Exceptions that can be thrown by `amdsmi_get_cpu_family` function: + +* `AmdSmiLibraryException` + +Example: + +```python +try: + cpu_family = amdsmi_get_cpu_family() + print(cpu_family) +except AmdSmiException as e: + print(e) +``` + +### amdsmi_get_cpu_model + +Description: Get cpu model. + +Output: cpu model + +Exceptions that can be thrown by `amdsmi_get_cpu_model` function: + +* `AmdSmiLibraryException` + +Example: + +```python +try: + cpu_model = amdsmi_get_cpu_model() + print(cpu_model) +except AmdSmiException as e: + print(e) +``` diff --git a/projects/amdsmi/py-interface/__init__.py b/projects/amdsmi/py-interface/__init__.py index 76b2921907..5297f0ffb9 100644 --- a/projects/amdsmi/py-interface/__init__.py +++ b/projects/amdsmi/py-interface/__init__.py @@ -72,6 +72,8 @@ try: from .amdsmi_interface import amdsmi_get_metrics_table_version from .amdsmi_interface import amdsmi_get_metrics_table from .amdsmi_interface import amdsmi_first_online_core_on_cpu_socket + from .amdsmi_interface import amdsmi_get_cpu_family + from .amdsmi_interface import amdsmi_get_cpu_model except AttributeError: pass diff --git a/projects/amdsmi/py-interface/amdsmi_interface.py b/projects/amdsmi/py-interface/amdsmi_interface.py index 4fa456b0ab..381eacd025 100644 --- a/projects/amdsmi/py-interface/amdsmi_interface.py +++ b/projects/amdsmi/py-interface/amdsmi_interface.py @@ -1496,6 +1496,20 @@ def amdsmi_first_online_core_on_cpu_socket( return pcore_ind.value +def amdsmi_get_cpu_family(): + family = ctypes.c_uint32() + _check_res( + amdsmi_wrapper.amdsmi_get_cpu_family(ctypes.byref(family)) + ) + return family.value + +def amdsmi_get_cpu_model(): + model = ctypes.c_uint32() + _check_res( + amdsmi_wrapper.amdsmi_get_cpu_model(ctypes.byref(model)) + ) + return model.value + def amdsmi_init(flag=AmdSmiInitFlags.INIT_AMD_GPUS): if not isinstance(flag, AmdSmiInitFlags): raise AmdSmiParameterException(flag, AmdSmiInitFlags) diff --git a/projects/amdsmi/py-interface/amdsmi_wrapper.py b/projects/amdsmi/py-interface/amdsmi_wrapper.py index 117d55a0c6..e73ef07af7 100644 --- a/projects/amdsmi/py-interface/amdsmi_wrapper.py +++ b/projects/amdsmi/py-interface/amdsmi_wrapper.py @@ -2294,6 +2294,12 @@ amdsmi_get_metrics_table.argtypes = [amdsmi_processor_handle, ctypes.POINTER(str amdsmi_first_online_core_on_cpu_socket = _libraries['libamd_smi.so'].amdsmi_first_online_core_on_cpu_socket amdsmi_first_online_core_on_cpu_socket.restype = amdsmi_status_t amdsmi_first_online_core_on_cpu_socket.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_cpu_family = _libraries['libamd_smi.so'].amdsmi_get_cpu_family +amdsmi_get_cpu_family.restype = amdsmi_status_t +amdsmi_get_cpu_family.argtypes = [ctypes.POINTER(ctypes.c_uint32)] +amdsmi_get_cpu_model = _libraries['libamd_smi.so'].amdsmi_get_cpu_model +amdsmi_get_cpu_model.restype = amdsmi_status_t +amdsmi_get_cpu_model.argtypes = [ctypes.POINTER(ctypes.c_uint32)] amdsmi_get_esmi_err_msg = _libraries['libamd_smi.so'].amdsmi_get_esmi_err_msg amdsmi_get_esmi_err_msg.restype = amdsmi_status_t amdsmi_get_esmi_err_msg.argtypes = [amdsmi_status_t, ctypes.POINTER(ctypes.POINTER(ctypes.c_char))] @@ -2490,8 +2496,9 @@ __all__ = \ 'amdsmi_get_cpu_current_xgmi_bw', 'amdsmi_get_cpu_ddr_bw', 'amdsmi_get_cpu_dimm_power_consumption', 'amdsmi_get_cpu_dimm_temp_range_and_refresh_rate', - 'amdsmi_get_cpu_dimm_thermal_sensor', 'amdsmi_get_cpu_fclk_mclk', - 'amdsmi_get_cpu_hsmp_proto_ver', 'amdsmi_get_cpu_prochot_status', + 'amdsmi_get_cpu_dimm_thermal_sensor', 'amdsmi_get_cpu_family', + 'amdsmi_get_cpu_fclk_mclk', 'amdsmi_get_cpu_hsmp_proto_ver', + 'amdsmi_get_cpu_model', 'amdsmi_get_cpu_prochot_status', 'amdsmi_get_cpu_pwr_svi_telemetry_all_rails', 'amdsmi_get_cpu_smu_fw_version', 'amdsmi_get_cpu_socket_c0_residency', diff --git a/projects/amdsmi/src/amd_smi/amd_smi.cc b/projects/amdsmi/src/amd_smi/amd_smi.cc index d54a58f6a6..472d7ba325 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi.cc @@ -3081,6 +3081,38 @@ amdsmi_status_t amdsmi_first_online_core_on_cpu_socket(amdsmi_processor_handle p return AMDSMI_STATUS_SUCCESS; } +amdsmi_status_t amdsmi_get_cpu_family(uint32_t *cpu_family) +{ + amdsmi_status_t status; + uint32_t family; + + AMDSMI_CHECK_INIT(); + + status = amd::smi::AMDSmiSystem::getInstance().get_cpu_family(&family); + if (status != AMDSMI_STATUS_SUCCESS) + return amdsmi_errno_to_esmi_status(status); + + *cpu_family = family; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_cpu_model(uint32_t *cpu_model) +{ + amdsmi_status_t status; + uint32_t model; + + AMDSMI_CHECK_INIT(); + + status = amd::smi::AMDSmiSystem::getInstance().get_cpu_model(&model); + if (status != AMDSMI_STATUS_SUCCESS) + return amdsmi_errno_to_esmi_status(status); + + *cpu_model = model; + + return AMDSMI_STATUS_SUCCESS; +} + amdsmi_status_t amdsmi_get_esmi_err_msg(amdsmi_status_t status, const char **status_string) { for (auto& iter : amd::smi::esmi_status_map) { diff --git a/projects/amdsmi/src/amd_smi/amd_smi_system.cc b/projects/amdsmi/src/amd_smi/amd_smi_system.cc index 3480cbef41..e46eb71784 100644 --- a/projects/amdsmi/src/amd_smi/amd_smi_system.cc +++ b/projects/amdsmi/src/amd_smi/amd_smi_system.cc @@ -56,7 +56,7 @@ namespace smi { #define AMD_SMI_INIT_FLAG_RESRV_TEST1 0x800000000000000 //!< Reserved for test -static amdsmi_status_t get_cpu_family(uint32_t *cpu_family) { +amdsmi_status_t AMDSmiSystem::get_cpu_family(uint32_t *cpu_family) { amdsmi_status_t ret; ret = static_cast(esmi_cpu_family_get(cpu_family)); @@ -68,7 +68,7 @@ static amdsmi_status_t get_cpu_family(uint32_t *cpu_family) { } -static amdsmi_status_t get_cpu_model(uint32_t *cpu_model) { +amdsmi_status_t AMDSmiSystem::get_cpu_model(uint32_t *cpu_model) { amdsmi_status_t ret; ret = static_cast(esmi_cpu_model_get(cpu_model));