Check FRU-based product information if available
WKS and server cards have an FRU with product information, so try to use that for product name and product SKU if it exists. Signed-off-by: Kent Russell <kent.russell@amd.com> Change-Id: I40bbd3bf62f4cb02e96015ed1630112691cacbc3
This commit is contained in:
+33
-1
@@ -722,6 +722,15 @@ rsmi_dev_id_get(uint32_t dv_ind, uint16_t *id) {
|
||||
return get_id(dv_ind, amd::smi::kDevDevID, id);
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_sku_get(uint32_t dv_ind, uint16_t *id) {
|
||||
TRY
|
||||
CHK_SUPPORT_NAME_ONLY(id)
|
||||
DEVICE_MUTEX
|
||||
return get_id(dv_ind, amd::smi::kDevDevProdNum, id);
|
||||
CATCH
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_subsystem_id_get(uint32_t dv_ind, uint16_t *id) {
|
||||
CHK_SUPPORT_NAME_ONLY(id)
|
||||
@@ -1530,6 +1539,25 @@ static rsmi_status_t get_backup_name(uint16_t id, char *name, size_t len) {
|
||||
return RSMI_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static rsmi_status_t get_dev_name_from_file(uint32_t dv_ind, char *name,
|
||||
size_t len) {
|
||||
std::string val_str;
|
||||
rsmi_status_t ret = get_dev_value_line(amd::smi::kDevDevProdName, dv_ind, &val_str);
|
||||
|
||||
if (ret != 0) {
|
||||
return amd::smi::ErrnoToRsmiStatus(ret);
|
||||
}
|
||||
size_t ct = val_str.copy(name, len);
|
||||
|
||||
name[std::min(len - 1, ct)] = '\0';
|
||||
|
||||
if (len < (val_str.size() + 1)) {
|
||||
return RSMI_STATUS_INSUFFICIENT_SIZE;
|
||||
}
|
||||
|
||||
return RSMI_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
// Parse pci.ids files. Comment lines have # in first column. Otherwise,
|
||||
// Syntax:
|
||||
// vendor vendor_name
|
||||
@@ -1687,7 +1715,11 @@ rsmi_dev_name_get(uint32_t dv_ind, char *name, size_t len) {
|
||||
|
||||
DEVICE_MUTEX
|
||||
|
||||
ret = get_dev_name_from_id(dv_ind, name, len, NAME_STR_DEVICE);
|
||||
ret = get_dev_name_from_file(dv_ind, name, len);
|
||||
|
||||
if (ret) {
|
||||
ret = get_dev_name_from_id(dv_ind, name, len, NAME_STR_DEVICE);
|
||||
}
|
||||
|
||||
return ret;
|
||||
CATCH
|
||||
|
||||
@@ -72,6 +72,8 @@ namespace smi {
|
||||
|
||||
// Device sysfs file names
|
||||
static const char *kDevPerfLevelFName = "power_dpm_force_performance_level";
|
||||
static const char *kDevDevProdNameFName = "product_name";
|
||||
static const char *kDevDevProdNumFName = "product_number";
|
||||
static const char *kDevDevIDFName = "device";
|
||||
static const char *kDevVendorIDFName = "vendor";
|
||||
static const char *kDevSubSysDevIDFName = "subsystem_device";
|
||||
@@ -212,6 +214,8 @@ static const char *kDevPerfLevelUnknownStr = "unknown";
|
||||
static const std::map<DevInfoTypes, const char *> kDevAttribNameMap = {
|
||||
{kDevPerfLevel, kDevPerfLevelFName},
|
||||
{kDevOverDriveLevel, kDevOverDriveLevelFName},
|
||||
{kDevDevProdName, kDevDevProdNameFName},
|
||||
{kDevDevProdNum, kDevDevProdNumFName},
|
||||
{kDevDevID, kDevDevIDFName},
|
||||
{kDevVendorID, kDevVendorIDFName},
|
||||
{kDevSubSysDevID, kDevSubSysDevIDFName},
|
||||
@@ -338,7 +342,8 @@ static const std::map<const char *, dev_depends_t> kDevFuncDependsMap = {
|
||||
{"rsmi_dev_vendor_id_get", {{kDevVendorIDFName}, {}}},
|
||||
|
||||
{"rsmi_dev_name_get", {{kDevVendorIDFName,
|
||||
kDevDevIDFName}, {}}},
|
||||
kDevDevIDFName}, {}}},
|
||||
{"rsmi_dev_sku_get", {{kDevDevProdNumFName}, {}}},
|
||||
{"rsmi_dev_brand_get", {{kDevVendorIDFName}, {}}},
|
||||
{"rsmi_dev_vendor_name_get", {{kDevVendorIDFName}, {}}},
|
||||
{"rsmi_dev_serial_number_get", {{kDevSerialNumberFName}, {}}},
|
||||
@@ -798,6 +803,8 @@ int Device::readDevInfo(DevInfoTypes type, std::string *val) {
|
||||
case kDevPerfLevel:
|
||||
case kDevUsage:
|
||||
case kDevOverDriveLevel:
|
||||
case kDevDevProdName:
|
||||
case kDevDevProdNum:
|
||||
case kDevDevID:
|
||||
case kDevSubSysDevID:
|
||||
case kDevSubSysVendorID:
|
||||
|
||||
Reference in New Issue
Block a user