[SWDEV-528097] Unique ID fix for missing ID in KGD -> use KFD's (#292)

Changes:
   - Unique Id tries reading from KGD
     -> falls back to use KFD if not found

Change-Id: I05456dd79715e04d83f118b5bb4f1d3612822173
---------

Signed-off-by: Charis Poag <Charis.Poag@amd.com>
Signed-off-by: Arif, Maisam <Maisam.Arif@amd.com>
This commit is contained in:
Poag, Charis
2025-04-22 16:27:33 -05:00
committed by GitHub
orang tua bd20b1b150
melakukan b58625cafa
5 mengubah file dengan 66 tambahan dan 20 penghapusan
+22 -16
Melihat File
@@ -1341,16 +1341,7 @@ amdsmi_get_gpu_asic_info(amdsmi_processor_handle processor_handle, amdsmi_asic_i
amd::smi::AMDSmiSystem::getInstance().clean_up_drm();
return status;
}
SMIGPUDEVICE_MUTEX(gpu_device->get_mutex())
std::string path = "/sys/class/drm/" + gpu_device->get_gpu_path() + "/device/unique_id";
FILE *fp = fopen(path.c_str(), "r");
if (fp) {
fscanf(fp, "%s", info->asic_serial);
fclose(fp);
}
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, 0,
@@ -1361,13 +1352,6 @@ amdsmi_get_gpu_asic_info(amdsmi_processor_handle processor_handle, amdsmi_asic_i
info->rev_id = dev_info.pci_rev;
info->vendor_id = gpu_device->get_vendor_id();
} else {
uint64_t dv_uid = 0;
status = rsmi_wrapper(rsmi_dev_unique_id_get, processor_handle, 0,
&dv_uid);
if (status == AMDSMI_STATUS_SUCCESS) {
snprintf(info->asic_serial, sizeof(info->asic_serial), "%lu", dv_uid);
}
status = rsmi_wrapper(rsmi_dev_brand_get, processor_handle, 0,
info->market_name, AMDSMI_256_LENGTH);
@@ -1376,6 +1360,28 @@ amdsmi_get_gpu_asic_info(amdsmi_processor_handle processor_handle, amdsmi_asic_i
if (status == AMDSMI_STATUS_SUCCESS) info->vendor_id = vendor_id;
}
// For other sysfs related information, get from rocm-smi
// Ensure asic_serial defaults to an unsupported value
std::string max_uint64_str = "ffffffffffffffff";
smi_clear_char_and_reinitialize(info->asic_serial, AMDSMI_MAX_STRING_LENGTH, max_uint64_str);
uint64_t dv_uid = 0;
status = rsmi_wrapper(rsmi_dev_unique_id_get, processor_handle, 0, &dv_uid);
if (status == AMDSMI_STATUS_SUCCESS) {
ss.clear();
ss << std::hex << dv_uid;
std::string asic_serial_str = ss.str();
ss.clear();
smi_clear_char_and_reinitialize(info->asic_serial, AMDSMI_MAX_STRING_LENGTH,
asic_serial_str);
ss << __PRETTY_FUNCTION__
<< " | Retrieved unique_id from rsmi: " << processor_handle << "\n"
<< " ; Successfully fell back to KFD's unique_id... \n"
<< " ; info->asic_serial (hex): " << info->asic_serial << "\n"
<< " ; info->asic_serial (dec): " << std::dec
<< static_cast<uint64_t>(std::stoull(asic_serial_str, nullptr, 16));
LOG_INFO(ss);
}
status = rsmi_wrapper(rsmi_dev_subsystem_vendor_id_get, processor_handle, 0,
&subvendor_id);
if (status == AMDSMI_STATUS_SUCCESS) info->subvendor_id = subvendor_id;
+5 -3
Melihat File
@@ -97,7 +97,8 @@ std::string removeString(const std::string origStr,
return modifiedStr;
}
static void clearCharBufferAndReinitialize(char buffer[], uint32_t len, std::string newString) {
amdsmi_status_t smi_clear_char_and_reinitialize(char buffer[], uint32_t len,
std::string newString) {
char *begin = &buffer[0];
char *end = &buffer[len];
std::fill(begin, end, 0);
@@ -108,14 +109,15 @@ static void clearCharBufferAndReinitialize(char buffer[], uint32_t len, std::str
std::memcpy(buffer, newString.c_str(), copy_len);
}
buffer[copy_len] = '\0';
}
return AMDSMI_STATUS_SUCCESS;
}
int openFileAndModifyBuffer(std::string path, char *buff, size_t sizeOfBuff,
bool trim_whitespace = true) {
bool errorDiscovered = false;
std::ifstream file(path, std::ifstream::in);
std::string contents = {std::istreambuf_iterator<char>{file}, std::istreambuf_iterator<char>{}};
clearCharBufferAndReinitialize(buff, static_cast<uint32_t>(sizeOfBuff), contents);
smi_clear_char_and_reinitialize(buff, static_cast<uint32_t>(sizeOfBuff), contents);
if (!file.is_open()) {
errorDiscovered = true;
} else {