Display GPU vram vendor
Add support and testing for reading the vram vendor associated with
the GPU. The vram vendor can be found as a separate sysfs file at:
/sys/class/drm/card[X]/device/mem_info_vram_vendor
The vram vendor is displayed as a string value.
Change-Id: I12c8e56e57f45aa08d7d6c25338c4e468ed1c7fc
Signed-off-by: Ori Messinger <Ori.Messinger@amd.com>
[ROCm/rocm_smi_lib commit: 2412dff6a2]
此提交包含在:
@@ -878,6 +878,31 @@ rsmi_status_t rsmi_dev_brand_get(uint32_t dv_ind, char *brand, uint32_t len);
|
||||
rsmi_status_t rsmi_dev_vendor_name_get(uint32_t dv_ind, char *name,
|
||||
size_t len);
|
||||
|
||||
/**
|
||||
* @brief Get the vram vendor string of a gpu device.
|
||||
*
|
||||
* @details Given a device index @p dv_ind, a pointer to a caller provided
|
||||
* char buffer @p brand, and a length of this buffer @p len, this function
|
||||
* will write the vram vendor of the device (up to @p len characters) to the
|
||||
* buffer @p brand.
|
||||
*
|
||||
* If the vram vendor for the device is not found as one of the values
|
||||
* contained within rsmi_dev_vram_vendor_get, then this function will return
|
||||
* the string 'unknown' instead of the vram vendor.
|
||||
*
|
||||
* @param[in] dv_ind a device index
|
||||
*
|
||||
* @param[inout] brand a pointer to a caller provided char buffer to which the
|
||||
* vram vendor will be written
|
||||
*
|
||||
* @param[in] len the length of the caller provided buffer @p brand.
|
||||
*
|
||||
* @retval ::RSMI_STATUS_SUCCESS is returned upon successful call.
|
||||
*
|
||||
*/
|
||||
rsmi_status_t rsmi_dev_vram_vendor_get(uint32_t dv_ind, char *brand,
|
||||
uint32_t len);
|
||||
|
||||
/**
|
||||
* @brief Get the serial number string for a device
|
||||
*
|
||||
|
||||
@@ -125,6 +125,7 @@ enum DevInfoTypes {
|
||||
kDevMemUsedGTT,
|
||||
kDevMemUsedVisVRAM,
|
||||
kDevMemUsedVRAM,
|
||||
kDevVramVendor,
|
||||
kDevPCIEReplayCount,
|
||||
kDevUniqueId,
|
||||
kDevDFCountersAvailable,
|
||||
|
||||
@@ -1494,6 +1494,35 @@ rsmi_dev_brand_get(uint32_t dv_ind, char *brand, uint32_t len) {
|
||||
return RSMI_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_vram_vendor_get(uint32_t dv_ind, char *brand, uint32_t len) {
|
||||
if (brand == nullptr || len == 0) {
|
||||
return RSMI_STATUS_INVALID_ARGS;
|
||||
}
|
||||
|
||||
TRY
|
||||
GET_DEV_FROM_INDX
|
||||
std::string val_str;
|
||||
|
||||
DEVICE_MUTEX
|
||||
int ret = dev->readDevInfo(amd::smi::kDevVramVendor, &val_str);
|
||||
|
||||
if (ret != 0) {
|
||||
return errno_to_rsmi_status(ret);
|
||||
}
|
||||
|
||||
uint32_t ln = val_str.copy(brand, len);
|
||||
|
||||
brand[std::min(len - 1, ln)] = '\0';
|
||||
|
||||
if (len < (val_str.size() + 1)) {
|
||||
return RSMI_STATUS_INSUFFICIENT_SIZE;
|
||||
}
|
||||
return RSMI_STATUS_SUCCESS;
|
||||
|
||||
CATCH
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_subsystem_name_get(uint32_t dv_ind, char *name, size_t len) {
|
||||
rsmi_status_t ret;
|
||||
|
||||
@@ -100,6 +100,7 @@ static const char *kDevMemTotVRAMFName = "mem_info_vram_total";
|
||||
static const char *kDevMemUsedGTTFName = "mem_info_gtt_used";
|
||||
static const char *kDevMemUsedVisVRAMFName = "mem_info_vis_vram_used";
|
||||
static const char *kDevMemUsedVRAMFName = "mem_info_vram_used";
|
||||
static const char *kDevVramVendorFName = "mem_info_vram_vendor";
|
||||
static const char *kDevPCIEReplayCountFName = "pcie_replay_count";
|
||||
static const char *kDevUniqueIdFName = "unique_id";
|
||||
static const char *kDevDFCountersAvailableFName = "df_cntr_avail";
|
||||
@@ -236,6 +237,7 @@ static const std::map<DevInfoTypes, const char *> kDevAttribNameMap = {
|
||||
{kDevMemUsedGTT, kDevMemUsedGTTFName},
|
||||
{kDevMemUsedVisVRAM, kDevMemUsedVisVRAMFName},
|
||||
{kDevMemUsedVRAM, kDevMemUsedVRAMFName},
|
||||
{kDevVramVendor, kDevVramVendorFName},
|
||||
{kDevPCIEReplayCount, kDevPCIEReplayCountFName},
|
||||
{kDevUniqueId, kDevUniqueIdFName},
|
||||
{kDevDFCountersAvailable, kDevDFCountersAvailableFName},
|
||||
@@ -328,6 +330,7 @@ static std::map<DevInfoTypes, uint8_t> kDevInfoVarTypeToRSMIVariant = {
|
||||
|
||||
static const std::map<const char *, dev_depends_t> kDevFuncDependsMap = {
|
||||
// Functions with only mandatory dependencies
|
||||
{"rsmi_dev_vram_vendor_get", {{kDevVramVendorFName}, {}}},
|
||||
{"rsmi_dev_id_get", {{kDevDevIDFName}, {}}},
|
||||
{"rsmi_dev_vendor_id_get", {{kDevVendorIDFName}, {}}},
|
||||
|
||||
@@ -747,6 +750,7 @@ int Device::readDevInfo(DevInfoTypes type, std::string *val) {
|
||||
case kDevSubSysDevID:
|
||||
case kDevSubSysVendorID:
|
||||
case kDevVendorID:
|
||||
case kDevVramVendor:
|
||||
case kDevVBiosVer:
|
||||
case kDevPCIEThruPut:
|
||||
case kDevSerialNumber:
|
||||
|
||||
@@ -127,6 +127,17 @@ void TestIdInfoRead::Run(void) {
|
||||
std::cout << "\t**Device Brand name: " << buffer << std::endl;
|
||||
}
|
||||
}
|
||||
err = rsmi_dev_vram_vendor_get(i, buffer, kBufferLen);
|
||||
if (err == RSMI_STATUS_NOT_SUPPORTED) {
|
||||
std::cout <<
|
||||
"\t**Vram Vendor string not supported on this system." << std::endl;
|
||||
} else if (err != RSMI_STATUS_SUCCESS) {
|
||||
CHK_ERR_ASRT(err)
|
||||
} else {
|
||||
IF_VERB(STANDARD) {
|
||||
std::cout << "\t**Device Vram Vendor name: " << buffer << std::endl;
|
||||
}
|
||||
}
|
||||
err = rsmi_dev_vendor_id_get(i, &id);
|
||||
if (err != RSMI_STATUS_SUCCESS) {
|
||||
CHK_ERR_ASRT(err)
|
||||
|
||||
新增問題並參考
封鎖使用者