From 338cdd63cecfd5439c990d63c9676510142e76ad Mon Sep 17 00:00:00 2001 From: Maisam Arif Date: Thu, 19 Dec 2024 18:18:56 -0600 Subject: [PATCH] [SWDEV-481702] Update marketing name source Signed-off-by: Maisam Arif --- include/amd_smi/impl/amd_smi_utils.h | 2 +- src/CMakeLists.txt | 2 +- src/amd_smi/amd_smi.cc | 2 +- src/amd_smi/amd_smi_utils.cc | 71 +++++++++++++--------------- 4 files changed, 36 insertions(+), 41 deletions(-) diff --git a/include/amd_smi/impl/amd_smi_utils.h b/include/amd_smi/impl/amd_smi_utils.h index 9b89c37229..2749db8f04 100644 --- a/include/amd_smi/impl/amd_smi_utils.h +++ b/include/amd_smi/impl/amd_smi_utils.h @@ -48,7 +48,7 @@ amdsmi_status_t smi_amdgpu_get_bad_page_info(amd::smi::AMDSmiGPUDevice* device, amdsmi_status_t smi_amdgpu_get_ecc_error_count(amd::smi::AMDSmiGPUDevice* device, amdsmi_error_count_t *err_cnt); amdsmi_status_t smi_amdgpu_get_driver_version(amd::smi::AMDSmiGPUDevice* device, int *length, char *version); amdsmi_status_t smi_amdgpu_get_pcie_speed_from_pcie_type(uint16_t pcie_type, uint32_t *pcie_speed); -amdsmi_status_t smi_amdgpu_get_market_name_from_dev_id(uint32_t device_id, char *market_name); +amdsmi_status_t smi_amdgpu_get_market_name_from_dev_id(amd::smi::AMDSmiGPUDevice* device, char *market_name); amdsmi_status_t smi_amdgpu_is_gpu_power_management_enabled(amd::smi::AMDSmiGPUDevice* device, bool *enabled); std::string smi_split_string(std::string str, char delim); std::string smi_amdgpu_get_status_string(amdsmi_status_t ret, bool fullStatus); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 15e3a1977b..4b46c52821 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -81,7 +81,7 @@ configure_file("${AMD_SMI_TARGET}Config.in" "${PROJECT_SOURCE_DIR}/include/amd_s add_executable(amd_smi_ex "../example/amd_smi_drm_example.cc") target_link_libraries(amd_smi_ex ${AMD_SMI_TARGET}) add_library(${AMD_SMI_TARGET} ${SRC_LIST} ${INC_LIST}) -target_link_libraries(${AMD_SMI_TARGET} pthread rt dl) +target_link_libraries(${AMD_SMI_TARGET} pthread rt dl ${DRM_AMDGPU_LIB} ${AMDGPU_DRM_LIBRARIES}) target_include_directories(${AMD_SMI_TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/rocm_smi/include ${PROJECT_SOURCE_DIR}/common/shared_mutex) diff --git a/src/amd_smi/amd_smi.cc b/src/amd_smi/amd_smi.cc index e42cae5313..86656c3a64 100644 --- a/src/amd_smi/amd_smi.cc +++ b/src/amd_smi/amd_smi.cc @@ -992,7 +992,7 @@ amdsmi_get_gpu_asic_info(amdsmi_processor_handle processor_handle, amdsmi_asic_i fclose(fp); } - status = smi_amdgpu_get_market_name_from_dev_id(dev_info.device_id, info->market_name); + status = smi_amdgpu_get_market_name_from_dev_id(gpu_device, info->market_name); if (status != AMDSMI_STATUS_SUCCESS) { rsmi_wrapper(rsmi_dev_brand_get, processor_handle, info->market_name, AMDSMI_256_LENGTH); diff --git a/src/amd_smi/amd_smi_utils.cc b/src/amd_smi/amd_smi_utils.cc index b8a7b34601..08b224c6ef 100644 --- a/src/amd_smi/amd_smi_utils.cc +++ b/src/amd_smi/amd_smi_utils.cc @@ -20,6 +20,7 @@ * THE SOFTWARE. */ +#include #include #include #include @@ -562,47 +563,41 @@ amdsmi_status_t smi_amdgpu_get_pcie_speed_from_pcie_type(uint16_t pcie_type, uin return AMDSMI_STATUS_SUCCESS; } -amdsmi_status_t smi_amdgpu_get_market_name_from_dev_id(uint32_t device_id, char *market_name) -{ - switch (device_id) { - case 0x73c8: - case 0x73c4: - case 0x73c5: - case 0x7460: - case 0x7461: - strcpy(market_name, "NAVI32"); - break; - case 0x73a1: - case 0x73ae: - case 0x73bf: - strcpy(market_name, "NAVI21"); - break; - case 0x74b4: - case 0x74a0: - strcpy(market_name, "MI300A"); - break; - case 0x74a1: - case 0x74b5: - strcpy(market_name, "AMD Instinct MI300X"); - break; - case 0x74a2: - case 0x74b6: - strcpy(market_name, "MI308X"); - break; - case 0x74a5: - strcpy(market_name, "AMD Instinct MI325X"); - break; - case 0x74a9: - case 0x74bd: - strcpy(market_name, "AMD Instinct MI300X HF"); - break; - default: - return AMDSMI_STATUS_API_FAILED; +amdsmi_status_t smi_amdgpu_get_market_name_from_dev_id(amd::smi::AMDSmiGPUDevice* device, char *market_name) { + if (market_name == nullptr || device == nullptr) { + return AMDSMI_STATUS_ARG_PTR_NULL; } - return AMDSMI_STATUS_SUCCESS; + + if (!device->check_if_drm_is_supported()) { + return AMDSMI_STATUS_NOT_SUPPORTED; + } + + uint32_t major_version, minor_version; + amdgpu_device_handle device_handle = nullptr; + + uint32_t gpu_fd = device->get_gpu_fd(); + + char drm_path[32]; + + int ret = amdgpu_device_initialize(gpu_fd, &major_version, &minor_version, &device_handle); + if (ret != 0) { + return AMDSMI_STATUS_DRM_ERROR; + } + + // Get the marketing name using libdrm's API + const char *name = amdgpu_get_marketing_name(device_handle); + if (name != nullptr) { + std::strncpy(market_name, name, AMDSMI_256_LENGTH - 1); + market_name[AMDSMI_256_LENGTH - 1] = '\0'; + amdgpu_device_deinitialize(device_handle); + return AMDSMI_STATUS_SUCCESS; + } + + amdgpu_device_deinitialize(device_handle); + return AMDSMI_STATUS_DRM_ERROR; } -amdsmi_status_t smi_amdgpu_is_gpu_power_management_enabled(amd::smi::AMDSmiGPUDevice *device, +amdsmi_status_t smi_amdgpu_is_gpu_power_management_enabled(amd::smi::AMDSmiGPUDevice* device, bool *enabled) { if (!device->check_if_drm_is_supported()) { return AMDSMI_STATUS_NOT_SUPPORTED;