diff --git a/projects/amdsmi/py-interface/amdsmi_interface.py b/projects/amdsmi/py-interface/amdsmi_interface.py index 425ced72e7..01ce67a793 100644 --- a/projects/amdsmi/py-interface/amdsmi_interface.py +++ b/projects/amdsmi/py-interface/amdsmi_interface.py @@ -863,14 +863,22 @@ def amdsmi_get_gpu_ras_feature_info( raise AmdSmiParameterException( processor_handle, amdsmi_wrapper.amdsmi_processor_handle ) - # Dummy data waiting on population - ras_info = {"eeprom_version": "N/A", - "parity_schema" : "N/A", - "single_bit_schema" : "N/A", - "double_bit_schema" : "N/A", - "poison_schema" : "N/A"} - return ras_info + ras_feature = amdsmi_wrapper.amdsmi_ras_feature_t() + + _check_res( + amdsmi_wrapper.amdsmi_get_gpu_ras_feature_info( + processor_handle, ctypes.byref(ras_feature) + ) + ) + + return { + "eeprom_version": ras_feature.ras_eeprom_version, + "parity_schema" : bool(ras_feature.ecc_correction_schema_flags & 1), + "single_bit_schema" : bool(ras_feature.ecc_correction_schema_flags & 2), + "double_bit_schema" : bool(ras_feature.ecc_correction_schema_flags & 4), + "poison_schema" : bool(ras_feature.ecc_correction_schema_flags & 8) + } def amdsmi_get_gpu_ras_block_features_enabled( diff --git a/projects/amdsmi/py-interface/amdsmi_wrapper.py b/projects/amdsmi/py-interface/amdsmi_wrapper.py index 883ffd5b7f..af8edfe8a0 100644 --- a/projects/amdsmi/py-interface/amdsmi_wrapper.py +++ b/projects/amdsmi/py-interface/amdsmi_wrapper.py @@ -1447,6 +1447,17 @@ struct_amdsmi_gpu_metrics_t._fields_ = [ ] amdsmi_gpu_metrics_t = struct_amdsmi_gpu_metrics_t + +class struct_amdsmi_ras_feature_t(Structure): + pass + +struct_amdsmi_ras_feature_t._pack_ = 1 # source:False +struct_amdsmi_ras_feature_t._fields_ = [ + ('ras_eeprom_version', ctypes.c_uint32), + ('ecc_correction_schema_flag', ctypes.c_uint32), +] + +amdsmi_ras_feature_t = struct_amdsmi_ras_feature_t class struct_amdsmi_error_count_t(Structure): pass @@ -1637,6 +1648,9 @@ amdsmi_get_gpu_od_volt_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER( amdsmi_get_gpu_metrics_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_metrics_info amdsmi_get_gpu_metrics_info.restype = amdsmi_status_t amdsmi_get_gpu_metrics_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_gpu_metrics_t)] +amdsmi_get_gpu_ras_feature_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_ras_feature_info +amdsmi_get_gpu_ras_feature_info.restype = amdsmi_status_t +amdsmi_get_gpu_ras_feature_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_ras_feature_t)] amdsmi_set_gpu_clk_range = _libraries['libamd_smi.so'].amdsmi_set_gpu_clk_range amdsmi_set_gpu_clk_range.restype = amdsmi_status_t amdsmi_set_gpu_clk_range.argtypes = [amdsmi_processor_handle, uint64_t, uint64_t, amdsmi_clk_type_t] @@ -1972,7 +1986,7 @@ __all__ = \ 'amdsmi_get_gpu_fan_speed', 'amdsmi_get_gpu_fan_speed_max', 'amdsmi_get_gpu_id', 'amdsmi_get_gpu_memory_reserved_pages', 'amdsmi_get_gpu_memory_total', 'amdsmi_get_gpu_memory_usage', - 'amdsmi_get_gpu_metrics_info', + 'amdsmi_get_gpu_metrics_info', 'amdsmi_get_gpu_ras_feature_info', 'amdsmi_get_gpu_od_volt_curve_regions', 'amdsmi_get_gpu_od_volt_info', 'amdsmi_get_gpu_overdrive_level', 'amdsmi_get_gpu_pci_bandwidth', @@ -2029,7 +2043,7 @@ __all__ = \ 'amdsmi_temperature_metric_t', 'amdsmi_temperature_type_t', 'amdsmi_topo_get_link_type', 'amdsmi_topo_get_link_weight', 'amdsmi_topo_get_numa_node_number', - 'amdsmi_utilization_counter_t', + 'amdsmi_utilization_counter_t', 'struct_amdsmi_ras_feature_t', 'amdsmi_utilization_counter_type_t', 'amdsmi_vbios_info_t', 'amdsmi_version_t', 'amdsmi_voltage_metric_t', 'amdsmi_voltage_type_t', 'amdsmi_vram_info_t',