[SWDEV-453922] AMD SMI to provide mapping feature of other enumeration methods (#51)
Added enumeration mapping for - drm render - drm card - hsa id - hip id - hip uuid (rocminfo uuid) Signed-off-by: AL Musaffar, Yazen <Yazen.ALMusaffar@amd.com> Signed-off-by: Maisam Arif <Maisam.Arif@amd.com> Co-authored-by: Maisam Arif <Maisam.Arif@amd.com>
Esse commit está contido em:
@@ -80,9 +80,10 @@ try:
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
from .amdsmi_interface import amdsmi_get_processor_handle_from_bdf
|
||||
from .amdsmi_interface import amdsmi_get_gpu_device_bdf
|
||||
from .amdsmi_interface import amdsmi_get_gpu_device_uuid
|
||||
from .amdsmi_interface import amdsmi_get_processor_handle_from_bdf
|
||||
from .amdsmi_interface import amdsmi_get_gpu_enumeration_info
|
||||
|
||||
# # SW Version Information
|
||||
from .amdsmi_interface import amdsmi_get_gpu_driver_info
|
||||
|
||||
@@ -1690,6 +1690,65 @@ def amdsmi_get_gpu_device_bdf(processor_handle: amdsmi_wrapper.amdsmi_processor_
|
||||
return _format_bdf(bdf_info)
|
||||
|
||||
|
||||
def amdsmi_get_gpu_device_uuid(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> str:
|
||||
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
|
||||
raise AmdSmiParameterException(
|
||||
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
|
||||
)
|
||||
|
||||
uuid = ctypes.create_string_buffer(AMDSMI_GPU_UUID_SIZE)
|
||||
|
||||
uuid_length = ctypes.c_uint32()
|
||||
uuid_length.value = AMDSMI_GPU_UUID_SIZE
|
||||
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_get_gpu_device_uuid(
|
||||
processor_handle, ctypes.byref(uuid_length), uuid
|
||||
)
|
||||
)
|
||||
|
||||
return uuid.value.decode("utf-8")
|
||||
|
||||
|
||||
def amdsmi_get_gpu_enumeration_info(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> Dict[str, Any]:
|
||||
"""
|
||||
Retrieves GPU enumeration information including DRM card ID, DRM render ID, HIP ID, and HIP UUID.
|
||||
|
||||
Parameters:
|
||||
processor_handle (amdsmi_processor_handle): The processor handle.
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: A dictionary containing the retrieved enumeration information.
|
||||
|
||||
Raises:
|
||||
AmdSmiParameterException: If the input parameters are invalid.
|
||||
"""
|
||||
# Validate the processor handle
|
||||
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
|
||||
raise AmdSmiParameterException(
|
||||
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
|
||||
)
|
||||
|
||||
# Create an instance of the enumeration info struct
|
||||
enumeration_info = amdsmi_wrapper.amdsmi_enumeration_info_t()
|
||||
|
||||
# Call the C function to populate the struct
|
||||
status = amdsmi_wrapper.amdsmi_get_gpu_enumeration_info(processor_handle, ctypes.byref(enumeration_info))
|
||||
|
||||
# Validate the status result
|
||||
_check_res(status)
|
||||
|
||||
# Convert the struct fields into a dictionary and return
|
||||
enumeration_info = {
|
||||
"drm_render": _validate_if_max_uint(enumeration_info.drm_render, MaxUIntegerTypes.UINT32_T),
|
||||
"drm_card": _validate_if_max_uint(enumeration_info.drm_render, MaxUIntegerTypes.UINT32_T),
|
||||
"hsa_id": _validate_if_max_uint(enumeration_info.hsa_id, MaxUIntegerTypes.UINT32_T),
|
||||
"hip_id": _validate_if_max_uint(enumeration_info.hip_id, MaxUIntegerTypes.UINT32_T),
|
||||
"hip_uuid": enumeration_info.hip_uuid.decode('utf-8')
|
||||
}
|
||||
|
||||
return enumeration_info
|
||||
|
||||
def amdsmi_get_gpu_asic_info(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
) -> Dict[str, Any]:
|
||||
@@ -2258,26 +2317,6 @@ def amdsmi_get_gpu_process_list(
|
||||
return result
|
||||
|
||||
|
||||
def amdsmi_get_gpu_device_uuid(processor_handle: amdsmi_wrapper.amdsmi_processor_handle) -> str:
|
||||
if not isinstance(processor_handle, amdsmi_wrapper.amdsmi_processor_handle):
|
||||
raise AmdSmiParameterException(
|
||||
processor_handle, amdsmi_wrapper.amdsmi_processor_handle
|
||||
)
|
||||
|
||||
uuid = ctypes.create_string_buffer(AMDSMI_GPU_UUID_SIZE)
|
||||
|
||||
uuid_length = ctypes.c_uint32()
|
||||
uuid_length.value = AMDSMI_GPU_UUID_SIZE
|
||||
|
||||
_check_res(
|
||||
amdsmi_wrapper.amdsmi_get_gpu_device_uuid(
|
||||
processor_handle, ctypes.byref(uuid_length), uuid
|
||||
)
|
||||
)
|
||||
|
||||
return uuid.value.decode("utf-8")
|
||||
|
||||
|
||||
def amdsmi_get_gpu_driver_info(
|
||||
processor_handle: amdsmi_wrapper.amdsmi_processor_handle,
|
||||
) -> Dict[str, Any]:
|
||||
|
||||
@@ -827,6 +827,19 @@ union_amdsmi_bdf_t._fields_ = [
|
||||
]
|
||||
|
||||
amdsmi_bdf_t = union_amdsmi_bdf_t
|
||||
class struct_amdsmi_enumeration_info_t(Structure):
|
||||
pass
|
||||
|
||||
struct_amdsmi_enumeration_info_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_enumeration_info_t._fields_ = [
|
||||
('drm_render', ctypes.c_uint32),
|
||||
('drm_card', ctypes.c_uint32),
|
||||
('hsa_id', ctypes.c_uint32),
|
||||
('hip_id', ctypes.c_uint32),
|
||||
('hip_uuid', ctypes.c_char * 256),
|
||||
]
|
||||
|
||||
amdsmi_enumeration_info_t = struct_amdsmi_enumeration_info_t
|
||||
|
||||
# values for enumeration 'amdsmi_card_form_factor_t'
|
||||
amdsmi_card_form_factor_t__enumvalues = {
|
||||
@@ -843,21 +856,6 @@ amdsmi_card_form_factor_t = ctypes.c_uint32 # enum
|
||||
class struct_amdsmi_pcie_info_t(Structure):
|
||||
pass
|
||||
|
||||
class struct_pcie_static_(Structure):
|
||||
pass
|
||||
|
||||
struct_pcie_static_._pack_ = 1 # source:False
|
||||
struct_pcie_static_._fields_ = [
|
||||
('max_pcie_width', ctypes.c_uint16),
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('max_pcie_speed', ctypes.c_uint32),
|
||||
('pcie_interface_version', ctypes.c_uint32),
|
||||
('slot_type', amdsmi_card_form_factor_t),
|
||||
('max_pcie_interface_version', ctypes.c_uint32),
|
||||
('PADDING_1', ctypes.c_ubyte * 4),
|
||||
('reserved', ctypes.c_uint64 * 9),
|
||||
]
|
||||
|
||||
class struct_pcie_metric_(Structure):
|
||||
pass
|
||||
|
||||
@@ -878,6 +876,21 @@ struct_pcie_metric_._fields_ = [
|
||||
('reserved', ctypes.c_uint64 * 12),
|
||||
]
|
||||
|
||||
class struct_pcie_static_(Structure):
|
||||
pass
|
||||
|
||||
struct_pcie_static_._pack_ = 1 # source:False
|
||||
struct_pcie_static_._fields_ = [
|
||||
('max_pcie_width', ctypes.c_uint16),
|
||||
('PADDING_0', ctypes.c_ubyte * 2),
|
||||
('max_pcie_speed', ctypes.c_uint32),
|
||||
('pcie_interface_version', ctypes.c_uint32),
|
||||
('slot_type', amdsmi_card_form_factor_t),
|
||||
('max_pcie_interface_version', ctypes.c_uint32),
|
||||
('PADDING_1', ctypes.c_ubyte * 4),
|
||||
('reserved', ctypes.c_uint64 * 9),
|
||||
]
|
||||
|
||||
struct_amdsmi_pcie_info_t._pack_ = 1 # source:False
|
||||
struct_amdsmi_pcie_info_t._fields_ = [
|
||||
('pcie_static', struct_pcie_static_),
|
||||
@@ -2243,6 +2256,9 @@ amdsmi_get_gpu_device_bdf.argtypes = [amdsmi_processor_handle, ctypes.POINTER(un
|
||||
amdsmi_get_gpu_device_uuid = _libraries['libamd_smi.so'].amdsmi_get_gpu_device_uuid
|
||||
amdsmi_get_gpu_device_uuid.restype = amdsmi_status_t
|
||||
amdsmi_get_gpu_device_uuid.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_char)]
|
||||
amdsmi_get_gpu_enumeration_info = _libraries['libamd_smi.so'].amdsmi_get_gpu_enumeration_info
|
||||
amdsmi_get_gpu_enumeration_info.restype = amdsmi_status_t
|
||||
amdsmi_get_gpu_enumeration_info.argtypes = [amdsmi_processor_handle, ctypes.POINTER(struct_amdsmi_enumeration_info_t)]
|
||||
amdsmi_get_gpu_id = _libraries['libamd_smi.so'].amdsmi_get_gpu_id
|
||||
amdsmi_get_gpu_id.restype = amdsmi_status_t
|
||||
amdsmi_get_gpu_id.argtypes = [amdsmi_processor_handle, ctypes.POINTER(ctypes.c_uint16)]
|
||||
@@ -2957,9 +2973,9 @@ __all__ = \
|
||||
'amdsmi_dimm_thermal_t', 'amdsmi_dpm_level_t',
|
||||
'amdsmi_dpm_policy_entry_t', 'amdsmi_dpm_policy_t',
|
||||
'amdsmi_driver_info_t', 'amdsmi_engine_usage_t',
|
||||
'amdsmi_error_count_t', 'amdsmi_event_group_t',
|
||||
'amdsmi_event_handle_t', 'amdsmi_event_type_t',
|
||||
'amdsmi_evt_notification_data_t',
|
||||
'amdsmi_enumeration_info_t', 'amdsmi_error_count_t',
|
||||
'amdsmi_event_group_t', 'amdsmi_event_handle_t',
|
||||
'amdsmi_event_type_t', 'amdsmi_evt_notification_data_t',
|
||||
'amdsmi_evt_notification_type_t',
|
||||
'amdsmi_first_online_core_on_cpu_socket',
|
||||
'amdsmi_free_name_value_pairs', 'amdsmi_freq_ind_t',
|
||||
@@ -3005,6 +3021,7 @@ __all__ = \
|
||||
'amdsmi_get_gpu_device_bdf', 'amdsmi_get_gpu_device_uuid',
|
||||
'amdsmi_get_gpu_driver_info', 'amdsmi_get_gpu_ecc_count',
|
||||
'amdsmi_get_gpu_ecc_enabled', 'amdsmi_get_gpu_ecc_status',
|
||||
'amdsmi_get_gpu_enumeration_info',
|
||||
'amdsmi_get_gpu_event_notification', 'amdsmi_get_gpu_fan_rpms',
|
||||
'amdsmi_get_gpu_fan_speed', 'amdsmi_get_gpu_fan_speed_max',
|
||||
'amdsmi_get_gpu_id', 'amdsmi_get_gpu_kfd_info',
|
||||
@@ -3123,7 +3140,7 @@ __all__ = \
|
||||
'struct_amdsmi_dimm_thermal_t', 'struct_amdsmi_dpm_level_t',
|
||||
'struct_amdsmi_dpm_policy_entry_t', 'struct_amdsmi_dpm_policy_t',
|
||||
'struct_amdsmi_driver_info_t', 'struct_amdsmi_engine_usage_t',
|
||||
'struct_amdsmi_error_count_t',
|
||||
'struct_amdsmi_enumeration_info_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',
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário