diff --git a/py-interface/README.md b/py-interface/README.md index e410c9c895..657d7846bf 100644 --- a/py-interface/README.md +++ b/py-interface/README.md @@ -448,51 +448,7 @@ Output: Dictionary with fields Field | Description ---|--- -`FW_ID_SMU` | SMU info -`FW_ID_CP_CE` | CP_CE info -`FW_ID_CP_PFP` | CP_PFP info -`FW_ID_CP_ME` | CP_ME info -`FW_ID_CP_MEC_JT1` | CP_MEC_JT1 info -`FW_ID_CP_MEC_JT2` | CP_MEC_JT2 info -`FW_ID_CP_MEC1` | CP_MEC1 info -`FW_ID_CP_MEC2` | CP_MEC2 info -`FW_ID_RLC` | RLC info -`FW_ID_SDMA0` | SDMA0 info -`FW_ID_SDMA1` | SDMA1 info -`FW_ID_SDMA2` | SDMA2 info -`FW_ID_SDMA3` | SDMA3 info -`FW_ID_SDMA4` | SDMA4 info -`FW_ID_SDMA5` | SDMA5 info -`FW_ID_SDMA6` | SDMA6 info -`FW_ID_SDMA7` | SDMA7 info -`FW_ID_VCN` | VCN info -`FW_ID_UVD` | UVD info -`FW_ID_VCE` | VCE info -`FW_ID_ISP` | ISP info -`FW_ID_DMCU_ERAM` | DMCU_ERAM info -`FW_ID_DMCU_ISR` | DMCU_ISR info -`FW_ID_RLC_RESTORE_LIST_GPM_MEM` | RLC_RESTORE_LIST_GPM_MEM info -`FW_ID_RLC_RESTORE_LIST_SRM_MEM` | RLC_RESTORE_LIST_SRM_MEM info -`FW_ID_RLC_RESTORE_LIST_CNTL` | RLC_RESTORE_LIST_CNTL info -`FW_ID_RLC_V` | RLC_V info -`FW_ID_MMSCH` | MMSCH info -`FW_ID_PSP_SYSDRV` | PSP_SYSDRV info -`FW_ID_PSP_SOSDRV` | PSP_SOSDRV info -`FW_ID_PSP_TOC` | PSP_TOC info -`FW_ID_PSP_KEYDB` | PSP_KEYDB info -`FW_ID_DFC` | DFC info -`FW_ID_PSP_SPL` | PSP_SPL info -`FW_ID_DRV_CAP` | DRV_CAP info -`FW_ID_MC` | MC info -`FW_ID_PSP_BL` | PSP_BL info -`FW_ID_CP_PM4` | CP_PM4 info -`FW_ID_ASD` | ASD info -`FW_ID_TA_RAS` | TA_RAS info -`FW_ID_XGMI` | XGMI info -`FW_ID_RLC_SRLG` | RLC_SRLG info -`FW_ID_RLC_SRLS` | RLC_SRLS info -`FW_ID_SMC` | SMC info -`FW_ID_DMCU` | DMCU info +`fw_list`| List of dictionaries that contain information about a certain firmware block Exceptions that can be thrown by `amdsmi_get_fw_info` function: * `AmdSmiLibraryException` @@ -507,10 +463,10 @@ try: print("No GPUs on machine") else: for device in devices: - fw_info = amdsmi_get_fw_info(device) - for block_name, block_value in fw_info.items(): - print(block_name, str(block_value)) - + firmware_list = amdsmi_get_fw_info(device)['fw_list'] + for firmware_block in firmware_list: + print(firmware_block['fw_name']) + print(firmware_block['fw_version']) except AmdSmiException as e: print(e) ``` diff --git a/py-interface/__init__.py b/py-interface/__init__.py index 3a1bbac5f3..fa2851e026 100644 --- a/py-interface/__init__.py +++ b/py-interface/__init__.py @@ -185,7 +185,7 @@ from .amdsmi_interface import AmdSmiInitFlags from .amdsmi_interface import AmdSmiContainerTypes from .amdsmi_interface import AmdSmiDeviceType from .amdsmi_interface import AmdSmiMmIp -from .amdsmi_interface import AmdSmiFWBlock +from .amdsmi_interface import AmdSmiFwBlock from .amdsmi_interface import AmdSmiClkType from .amdsmi_interface import AmdSmiTemperatureType from .amdsmi_interface import AmdSmiDevPerfLevel diff --git a/py-interface/amdsmi_interface.py b/py-interface/amdsmi_interface.py index 45dfca6e00..91c50c969c 100644 --- a/py-interface/amdsmi_interface.py +++ b/py-interface/amdsmi_interface.py @@ -56,7 +56,7 @@ class AmdSmiMmIp(IntEnum): VCN = amdsmi_wrapper.AMDSMI_MM_VCN -class AmdSmiFWBlock(IntEnum): +class AmdSmiFwBlock(IntEnum): FW_ID_SMU = amdsmi_wrapper.FW_ID_SMU FW_ID_CP_CE = amdsmi_wrapper.FW_ID_CP_CE FW_ID_CP_PFP = amdsmi_wrapper.FW_ID_CP_PFP @@ -376,38 +376,6 @@ _AMDSMI_GPU_UUID_SIZE = 38 _AMDSMI_STRING_LENGTH = 80 -def _parse_fw_info(fw_info: amdsmi_wrapper.amdsmi_fw_info_t) -> Dict[str, Any]: - """ - Format firmware info extracted. - - Parameters: - fw_info(`amdsmi_fw_info_t`): Struct containing the extracted info to be - formatted. - - Returns: - `dict`: All of the firmware info formatted into a dictionary. - """ - if not isinstance(fw_info, amdsmi_wrapper.amdsmi_fw_info_t): - raise AmdSmiParameterException( - fw_info, amdsmi_wrapper.amdsmi_fw_info_t) - formatted_fw_info = dict() - formatted_fw_info = {"num_fw_info": fw_info.num_fw_info} - - - for i in range(0, fw_info.num_fw_info): - index = fw_info.fw_info_list[i].fw_id - value = amdsmi_wrapper.amdsmi_fw_block__enumvalues.get(index) - if value == "FW_ID_FIRST": - value = "FW_ID_SMU" - if value == "FW_ID__MAX": - continue - - formatted_fw_info.update( - {value: fw_info.fw_info_list[i].fw_version}) - - return formatted_fw_info - - def _format_bad_page_info(bad_page_info, bad_page_count: ctypes.c_uint32) -> List[Dict]: """ Format bad page info data retrieved. @@ -1090,18 +1058,23 @@ def amdsmi_get_power_measure( def amdsmi_get_fw_info( - device_handle: amdsmi_wrapper.amdsmi_device_handle, -) -> Dict[str, Any]: + device_handle: amdsmi_wrapper.amdsmi_device_handle +) -> List[Dict[str, Any]]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): raise AmdSmiParameterException( - device_handle, amdsmi_wrapper.amdsmi_device_handle - ) - + device_handle, amdsmi_wrapper.amdsmi_device_handle) fw_info = amdsmi_wrapper.amdsmi_fw_info_t() _check_res(amdsmi_wrapper.amdsmi_get_fw_info( device_handle, ctypes.byref(fw_info))) - - return _parse_fw_info(fw_info) + firmwares = list() + for i in range(0, fw_info.num_fw_info): + firmwares.append({ + 'fw_name': AmdSmiFwBlock(fw_info.fw_info_list[i].fw_id), + 'fw_version': fw_info.fw_info_list[i].fw_version, + }) + return { + 'fw_list': firmwares + } def amdsmi_get_vram_usage( @@ -1342,7 +1315,7 @@ def amdsmi_topo_get_link_weight( return weight.value -def amdsmi_get_minmax_bandwidth( +def amdsmi_get_minmax_bandwidth( device_handle_src: amdsmi_wrapper.amdsmi_device_handle, device_handle_dst: amdsmi_wrapper.amdsmi_device_handle, ): @@ -1392,7 +1365,8 @@ def amdsmi_topo_get_link_type( _check_res( amdsmi_wrapper.amdsmi_topo_get_link_type( #device_handle_src, device_handle_dst, ctypes.byref(hops), type - device_handle_src, device_handle_dst, ctypes.byref(hops), ctypes.byref(type) + device_handle_src, device_handle_dst, ctypes.byref( + hops), ctypes.byref(type) ) ) @@ -1529,7 +1503,7 @@ def amdsmi_read_counter( } -def amdsmi_counter_get_available_counters( +def amdsmi_counter_get_available_counters( device_handle: amdsmi_wrapper.amdsmi_device_handle, event_group: AmdSmiEventGroup, ) -> int: @@ -1550,7 +1524,7 @@ def amdsmi_counter_get_available_counters( return available.value -def amdsmi_dev_set_perf_level( +def amdsmi_dev_set_perf_level( device_handle: amdsmi_wrapper.amdsmi_device_handle, perf_level: AmdSmiDevPerfLevel, ): @@ -1565,7 +1539,7 @@ def amdsmi_dev_set_perf_level( device_handle, perf_level)) -def amdsmi_dev_get_power_profile_presets( +def amdsmi_dev_get_power_profile_presets( device_handle: amdsmi_wrapper.amdsmi_device_handle, sensor_idx: int ) -> Dict[str, Any]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -1651,7 +1625,7 @@ def amdsmi_dev_reset_fan( _check_res(amdsmi_wrapper.amdsmi_dev_reset_fan(device_handle, sensor_idx)) -def amdsmi_dev_set_clk_freq( +def amdsmi_dev_set_clk_freq( device_handle: amdsmi_wrapper.amdsmi_device_handle, clk_type: AmdSmiClkType, freq_bitmask: int, @@ -1672,7 +1646,7 @@ def amdsmi_dev_set_clk_freq( ) -def amdsmi_dev_set_overdrive_level_v1( +def amdsmi_dev_set_overdrive_level_v1( device_handle: amdsmi_wrapper.amdsmi_device_handle, overdrive_value: int ): if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -1689,7 +1663,7 @@ def amdsmi_dev_set_overdrive_level_v1( ) -def amdsmi_dev_set_overdrive_level( +def amdsmi_dev_set_overdrive_level( device_handle: amdsmi_wrapper.amdsmi_device_handle, overdrive_value: int ): if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -1814,7 +1788,7 @@ def amdsmi_get_func_iter_value( } -def amdsmi_dev_set_pci_bandwidth( +def amdsmi_dev_set_pci_bandwidth( device_handle: amdsmi_wrapper.amdsmi_device_handle, bitmask: int ) -> None: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -1883,7 +1857,7 @@ def amdsmi_dev_get_pci_throughput(device_handle: amdsmi_wrapper.amdsmi_device_ha } -def amdsmi_dev_get_pci_replay_counter(device_handle: amdsmi_wrapper.amdsmi_device_handle): +def amdsmi_dev_get_pci_replay_counter(device_handle: amdsmi_wrapper.amdsmi_device_handle): if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): raise AmdSmiParameterException( device_handle, amdsmi_wrapper.amdsmi_device_handle @@ -1915,7 +1889,7 @@ def amdsmi_topo_get_numa_affinity(device_handle: amdsmi_wrapper.amdsmi_device_ha return numa_node.value -def amdsmi_dev_set_power_cap( +def amdsmi_dev_set_power_cap( device_handle: amdsmi_wrapper.amdsmi_device_handle, sensor_ind: int, cap: int ) -> None: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -1952,7 +1926,7 @@ def amdsmi_dev_get_power_ave(device_handle: amdsmi_wrapper.amdsmi_device_handle, return power.value -def amdsmi_dev_set_power_profile( +def amdsmi_dev_set_power_profile( device_handle: amdsmi_wrapper.amdsmi_device_handle, reserved: int, profile: AmdSmiPowerProfilePresetMasks, @@ -2048,7 +2022,7 @@ def amdsmi_dev_get_memory_total(device_handle: amdsmi_wrapper.amdsmi_device_hand return total.value -def amdsmi_dev_set_od_clk_info( +def amdsmi_dev_set_od_clk_info( device_handle: amdsmi_wrapper.amdsmi_device_handle, level: AmdSmiFreqInd, value: int, @@ -2096,7 +2070,7 @@ def amdsmi_dev_get_memory_usage(device_handle: amdsmi_wrapper.amdsmi_device_hand return used.value -def amdsmi_dev_set_od_volt_info( +def amdsmi_dev_set_od_volt_info( device_handle: amdsmi_wrapper.amdsmi_device_handle, vpoint: int, clk_value: int, @@ -2142,7 +2116,7 @@ def amdsmi_dev_get_memory_busy_percent(device_handle: amdsmi_wrapper.amdsmi_devi return busy_percent.value -def amdsmi_dev_set_perf_level_v1( +def amdsmi_dev_set_perf_level_v1( device_handle: amdsmi_wrapper.amdsmi_device_handle, perf_lvl: AmdSmiDevPerfLevel, ) -> None: @@ -2215,7 +2189,7 @@ def amdsmi_dev_get_fan_speed_max( return fan_speed.value -def amdsmi_dev_get_temp_metric( +def amdsmi_dev_get_temp_metric( device_handle: amdsmi_wrapper.amdsmi_device_handle, sensor_type: AmdSmiTemperatureType, metric: AmdSmiTemperatureMetric, @@ -2239,7 +2213,7 @@ def amdsmi_dev_get_temp_metric( return temp_value.value -def amdsmi_dev_get_volt_metric( +def amdsmi_dev_get_volt_metric( device_handle: amdsmi_wrapper.amdsmi_device_handle, sensor_type: AmdSmiVoltageType, metric: AmdSmiVoltageMetric, @@ -2383,7 +2357,7 @@ def amdsmi_dev_get_overdrive_level( return od_level.value -def amdsmi_dev_get_gpu_clk_freq( +def amdsmi_dev_get_gpu_clk_freq( device_handle: amdsmi_wrapper.amdsmi_device_handle, clk_type: AmdSmiClkType ) -> Dict[str, Any]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -2407,7 +2381,7 @@ def amdsmi_dev_get_gpu_clk_freq( } -def amdsmi_dev_get_od_volt_info( +def amdsmi_dev_get_od_volt_info( device_handle: amdsmi_wrapper.amdsmi_device_handle, ) -> Dict[str, Any]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -2444,7 +2418,7 @@ def amdsmi_dev_get_od_volt_info( } -def amdsmi_dev_get_gpu_metrics_info( +def amdsmi_dev_get_gpu_metrics_info( device_handle: amdsmi_wrapper.amdsmi_device_handle, ) -> Dict[str, Any]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -2497,7 +2471,7 @@ def amdsmi_dev_get_gpu_metrics_info( } -def amdsmi_dev_get_od_volt_curve_regions( +def amdsmi_dev_get_od_volt_curve_regions( device_handle: amdsmi_wrapper.amdsmi_device_handle, num_regions: int ) -> List[Dict[str, Any]]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -2536,7 +2510,7 @@ def amdsmi_dev_get_od_volt_curve_regions( return result -def amdsmi_dev_get_power_profile_presets( +def amdsmi_dev_get_power_profile_presets( device_handle: amdsmi_wrapper.amdsmi_device_handle, sensor_idx: int ) -> Dict[str, Any]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -2560,7 +2534,7 @@ def amdsmi_dev_get_power_profile_presets( } -def amdsmi_dev_get_ecc_count( +def amdsmi_dev_get_ecc_count( device_handle: amdsmi_wrapper.amdsmi_device_handle, block: AmdSmiGpuBlock ) -> Dict[str, int]: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -2583,7 +2557,7 @@ def amdsmi_dev_get_ecc_count( } -def amdsmi_dev_get_ecc_enabled( +def amdsmi_dev_get_ecc_enabled( device_handle: amdsmi_wrapper.amdsmi_device_handle, ) -> int: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle): @@ -2600,7 +2574,7 @@ def amdsmi_dev_get_ecc_enabled( return blocks.value -def amdsmi_dev_get_ecc_status( +def amdsmi_dev_get_ecc_status( device_handle: amdsmi_wrapper.amdsmi_device_handle, block: AmdSmiGpuBlock ) -> AmdSmiRasErrState: if not isinstance(device_handle, amdsmi_wrapper.amdsmi_device_handle):