Added new clock types
Also added missing error code strings and improved test output messages
Этот коммит содержится в:
+45
-9
@@ -879,16 +879,30 @@ rsmi_status_t
|
||||
rsmi_dev_gpu_clk_freq_get(uint32_t dv_ind, rsmi_clk_type_t clk_type,
|
||||
rsmi_frequencies_t *f) {
|
||||
TRY
|
||||
amd::smi::DevInfoTypes dev_type;
|
||||
|
||||
switch (clk_type) {
|
||||
case RSMI_CLK_TYPE_SYS:
|
||||
return get_frequencies(amd::smi::kDevGPUSClk, dv_ind, f);
|
||||
dev_type = amd::smi::kDevGPUSClk;
|
||||
break;
|
||||
case RSMI_CLK_TYPE_MEM:
|
||||
return get_frequencies(amd::smi::kDevGPUMClk, dv_ind, f);
|
||||
dev_type = amd::smi::kDevGPUMClk;
|
||||
break;
|
||||
case RSMI_CLK_TYPE_DF:
|
||||
dev_type = amd::smi::kDevFClk;
|
||||
break;
|
||||
case RSMI_CLK_TYPE_DCEF:
|
||||
dev_type = amd::smi::kDevDCEFClk;
|
||||
break;
|
||||
case RSMI_CLK_TYPE_SOC:
|
||||
dev_type = amd::smi::kDevSOCClk;
|
||||
break;
|
||||
default:
|
||||
return RSMI_STATUS_INVALID_ARGS;
|
||||
}
|
||||
|
||||
return get_frequencies(dev_type, dv_ind, f);
|
||||
|
||||
CATCH
|
||||
}
|
||||
|
||||
@@ -940,22 +954,30 @@ rsmi_dev_gpu_clk_freq_set(uint32_t dv_ind,
|
||||
}
|
||||
|
||||
int ret_i;
|
||||
amd::smi::DevInfoTypes dev_type;
|
||||
|
||||
switch (clk_type) {
|
||||
case RSMI_CLK_TYPE_SYS:
|
||||
ret_i = dev->writeDevInfo(amd::smi::kDevGPUSClk, freq_enable_str);
|
||||
return errno_to_rsmi_status(ret_i);
|
||||
dev_type = amd::smi::kDevGPUSClk;
|
||||
break;
|
||||
|
||||
case RSMI_CLK_TYPE_MEM:
|
||||
ret_i = dev->writeDevInfo(amd::smi::kDevGPUMClk, freq_enable_str);
|
||||
return errno_to_rsmi_status(ret_i);
|
||||
dev_type = amd::smi::kDevGPUMClk;
|
||||
break;
|
||||
case RSMI_CLK_TYPE_DF:
|
||||
dev_type = amd::smi::kDevFClk;
|
||||
break;
|
||||
case RSMI_CLK_TYPE_SOC:
|
||||
dev_type = amd::smi::kDevSOCClk;
|
||||
break;
|
||||
case RSMI_CLK_TYPE_DCEF:
|
||||
dev_type = amd::smi::kDevDCEFClk;
|
||||
break;
|
||||
|
||||
default:
|
||||
return RSMI_STATUS_INVALID_ARGS;
|
||||
}
|
||||
|
||||
return RSMI_STATUS_SUCCESS;
|
||||
ret_i = dev->writeDevInfo(dev_type, freq_enable_str);
|
||||
return errno_to_rsmi_status(ret_i);
|
||||
|
||||
CATCH
|
||||
}
|
||||
@@ -1691,6 +1713,20 @@ rsmi_status_string(rsmi_status_t status, const char **status_string) {
|
||||
"system for this device type";
|
||||
break;
|
||||
|
||||
case RSMI_STATUS_NOT_FOUND:
|
||||
*status_string = "An item required to complete the call was not found";
|
||||
break;
|
||||
|
||||
case RSMI_STATUS_INSUFFICIENT_SIZE:
|
||||
*status_string = "Not enough resources were available to fully execute"
|
||||
" the call";
|
||||
break;
|
||||
|
||||
case RSMI_STATUS_UNKNOWN_ERROR:
|
||||
*status_string = "An unknown error prevented the call from completing"
|
||||
" successfully";
|
||||
break;
|
||||
|
||||
default:
|
||||
*status_string = "An unknown error occurred";
|
||||
return RSMI_STATUS_UNKNOWN_ERROR;
|
||||
|
||||
@@ -68,6 +68,9 @@ static const char *kDevSubSysVendorIDFName = "subsystem_vendor";
|
||||
static const char *kDevOverDriveLevelFName = "pp_sclk_od";
|
||||
static const char *kDevGPUSClkFName = "pp_dpm_sclk";
|
||||
static const char *kDevGPUMClkFName = "pp_dpm_mclk";
|
||||
static const char *kDevDCEFClkFName = "pp_dpm_dcefclk";
|
||||
static const char *kDevFClkFName = "pp_dpm_fclk";
|
||||
static const char *kDevSOCClkFName = "pp_dpm_socclk";
|
||||
static const char *kDevGPUPCIEClkFname = "pp_dpm_pcie";
|
||||
static const char *kDevPowerProfileModeFName = "pp_power_profile_mode";
|
||||
static const char *kDevPowerODVoltageFName = "pp_od_clk_voltage";
|
||||
@@ -104,6 +107,9 @@ static const std::map<DevInfoTypes, const char *> kDevAttribNameMap = {
|
||||
{kDevSubSysVendorID, kDevSubSysVendorIDFName},
|
||||
{kDevGPUMClk, kDevGPUMClkFName},
|
||||
{kDevGPUSClk, kDevGPUSClkFName},
|
||||
{kDevDCEFClk, kDevDCEFClkFName},
|
||||
{kDevFClk, kDevFClkFName},
|
||||
{kDevSOCClk, kDevSOCClkFName},
|
||||
{kDevPCIEClk, kDevGPUPCIEClkFname},
|
||||
{kDevPowerProfileMode, kDevPowerProfileModeFName},
|
||||
{kDevUsage, kDevUsageFName},
|
||||
@@ -152,13 +158,13 @@ Device:: ~Device() {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
int Device::openSysfsFileStream(DevInfoTypes type, T *fs, bool write) {
|
||||
int Device::openSysfsFileStream(DevInfoTypes type, T *fs, const char *str) {
|
||||
auto sysfs_path = path_;
|
||||
|
||||
if (env_->path_DRM_root_override && type == env_->enum_override) {
|
||||
sysfs_path = env_->path_DRM_root_override;
|
||||
|
||||
if (write) {
|
||||
if (str) {
|
||||
sysfs_path += ".write";
|
||||
}
|
||||
}
|
||||
@@ -166,7 +172,7 @@ int Device::openSysfsFileStream(DevInfoTypes type, T *fs, bool write) {
|
||||
sysfs_path += "/device/";
|
||||
sysfs_path += kDevAttribNameMap.at(type);
|
||||
|
||||
DBG_FILE_ERROR(sysfs_path, (std::string *)nullptr);
|
||||
DBG_FILE_ERROR(sysfs_path, str);
|
||||
if (!isRegularFile(sysfs_path)) {
|
||||
return EISDIR;
|
||||
}
|
||||
@@ -202,7 +208,7 @@ int Device::writeDevInfoStr(DevInfoTypes type, std::string valStr) {
|
||||
std::ofstream fs;
|
||||
int ret;
|
||||
|
||||
ret = openSysfsFileStream(type, &fs, true);
|
||||
ret = openSysfsFileStream(type, &fs, valStr.c_str());
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
@@ -252,9 +258,12 @@ int Device::writeDevInfo(DevInfoTypes type, uint64_t val) {
|
||||
int Device::writeDevInfo(DevInfoTypes type, std::string val) {
|
||||
switch (type) {
|
||||
case kDevGPUMClk:
|
||||
case kDevDCEFClk:
|
||||
case kDevFClk:
|
||||
case kDevGPUSClk:
|
||||
case kDevPCIEClk:
|
||||
case kDevPowerODVoltage:
|
||||
case kDevSOCClk:
|
||||
return writeDevInfoStr(type, val);
|
||||
|
||||
default:
|
||||
@@ -347,7 +356,10 @@ int Device::readDevInfo(DevInfoTypes type, std::vector<std::string> *val) {
|
||||
switch (type) {
|
||||
case kDevGPUMClk:
|
||||
case kDevGPUSClk:
|
||||
case kDevDCEFClk:
|
||||
case kDevFClk:
|
||||
case kDevPCIEClk:
|
||||
case kDevSOCClk:
|
||||
case kDevPowerProfileMode:
|
||||
case kDevPowerODVoltage:
|
||||
case kDevErrCntSDMA:
|
||||
|
||||
Ссылка в новой задаче
Block a user