Use different sysfs for soc_pstate and xmgi_plpd
The sysfs is changed to use the pm_policy folder with multiple dpm_policy files. Change-Id: I40fac8de2d0cb127950d238b8196f6d2416778d0
This commit is contained in:
@@ -3353,7 +3353,7 @@ rsmi_status_t rsmi_dev_gpu_clk_freq_set(uint32_t dv_ind,
|
||||
*
|
||||
* @return ::RSMI_STATUS_SUCCESS is returned upon successful call, non-zero on fail
|
||||
*/
|
||||
rsmi_status_t rsmi_dev_dpm_policy_get(uint32_t dv_ind,
|
||||
rsmi_status_t rsmi_dev_soc_pstate_get(uint32_t dv_ind,
|
||||
rsmi_dpm_policy_t* policy);
|
||||
|
||||
/**
|
||||
@@ -3371,7 +3371,7 @@ rsmi_status_t rsmi_dev_dpm_policy_get(uint32_t dv_ind,
|
||||
*
|
||||
* @return ::RSMI_STATUS_SUCCESS is returned upon successful call, non-zero on fail
|
||||
*/
|
||||
rsmi_status_t rsmi_dev_dpm_policy_set(uint32_t dv_ind,
|
||||
rsmi_status_t rsmi_dev_soc_pstate_set(uint32_t dv_ind,
|
||||
uint32_t policy_id);
|
||||
|
||||
/**
|
||||
@@ -3406,7 +3406,7 @@ rsmi_status_t rsmi_dev_xgmi_plpd_get(uint32_t dv_ind,
|
||||
* @param[in] processor_handle a processor handle
|
||||
*
|
||||
* @param[in] xgmi_plpd_id the xgmi plpd id to set. The id is the id in
|
||||
* rsmi_dpm_policy_entry_t, which can be obtained by calling
|
||||
* rsmi_soc_pstate_entry_t, which can be obtained by calling
|
||||
* rsmi_dev_xgmi_plpd_get()
|
||||
*
|
||||
* @return ::RSMI_STATUS_SUCCESS is returned upon successful call, non-zero on fail
|
||||
|
||||
@@ -101,6 +101,8 @@ enum DevKFDNodePropTypes {
|
||||
|
||||
enum DevInfoTypes {
|
||||
kDevPerfLevel,
|
||||
kDevSocPstate,
|
||||
kDevXgmiPlpd,
|
||||
kDevProcessIsolation,
|
||||
kDevShaderClean,
|
||||
kDevOverDriveLevel,
|
||||
@@ -175,7 +177,6 @@ enum DevInfoTypes {
|
||||
kDevNumaNode,
|
||||
kDevGpuMetrics,
|
||||
kDevPmMetrics,
|
||||
kDevDPMPolicy,
|
||||
kDevRegMetrics,
|
||||
kDevGpuReset,
|
||||
kDevAvailableComputePartition,
|
||||
|
||||
+30
-54
@@ -2142,27 +2142,6 @@ rsmi_status_t rsmi_dev_gpu_clear_sram_data(uint32_t dv_ind,
|
||||
CATCH
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_dpm_policy_set(uint32_t dv_ind,
|
||||
uint32_t policy_id) {
|
||||
rsmi_status_t ret;
|
||||
|
||||
TRY
|
||||
std::ostringstream ss;
|
||||
ss << __PRETTY_FUNCTION__ << " | ======= start =======";
|
||||
LOG_TRACE(ss);
|
||||
REQUIRE_ROOT_ACCESS
|
||||
DEVICE_MUTEX
|
||||
GET_DEV_FROM_INDX
|
||||
|
||||
std::string value("soc_pstate ");
|
||||
value += std::to_string(policy_id);
|
||||
int ret = dev->writeDevInfo(amd::smi::kDevDPMPolicy , value);
|
||||
return amd::smi::ErrnoToRsmiStatus(ret);
|
||||
|
||||
CATCH
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_xgmi_plpd_get(uint32_t dv_ind,
|
||||
rsmi_dpm_policy_t* policy) {
|
||||
@@ -2181,7 +2160,7 @@ rsmi_dev_xgmi_plpd_get(uint32_t dv_ind,
|
||||
LOG_TRACE(ss);
|
||||
DEVICE_MUTEX
|
||||
|
||||
ret = GetDevValueVec(amd::smi::kDevDPMPolicy, dv_ind, &val_vec);
|
||||
ret = GetDevValueVec(amd::smi::kDevXgmiPlpd, dv_ind, &val_vec);
|
||||
if (ret == RSMI_STATUS_FILE_ERROR) {
|
||||
ss << __PRETTY_FUNCTION__ << " | ======= end ======="
|
||||
<< ", GetDevValueVec() ret was RSMI_STATUS_FILE_ERROR "
|
||||
@@ -2199,21 +2178,14 @@ rsmi_dev_xgmi_plpd_get(uint32_t dv_ind,
|
||||
/*
|
||||
It will reply on the number but no string as it may vary from soc to soc.
|
||||
The current xmgi plpd marked with *
|
||||
xgmi plpd
|
||||
0 : plpd_disallow
|
||||
1 : plpd_default
|
||||
2 : plpd_optimized*
|
||||
0 : plpd_disallow
|
||||
1 : plpd_default*
|
||||
2 : plpd_optimized
|
||||
*/
|
||||
bool see_plpd_pstate = false;
|
||||
bool see_current = false;
|
||||
policy->num_supported = 0;
|
||||
for (uint32_t i = 0; i < val_vec.size(); ++i) {
|
||||
auto current_line = amd::smi::trim(val_vec[i]);
|
||||
if (current_line == "xgmi plpd") {
|
||||
see_plpd_pstate = true;
|
||||
continue;
|
||||
}
|
||||
if (see_plpd_pstate == false) continue;
|
||||
|
||||
// Get tokens: <integer> : <string *>
|
||||
std::vector<std::string> tokens;
|
||||
@@ -2250,17 +2222,13 @@ rsmi_dev_xgmi_plpd_get(uint32_t dv_ind,
|
||||
policy->num_supported++;
|
||||
} // end for
|
||||
|
||||
if (!see_plpd_pstate) {
|
||||
return RSMI_STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
if (!see_current) {
|
||||
ss << __PRETTY_FUNCTION__ << " | ======= end ======="
|
||||
<< ", Unexpected pstat data: cannot find the current plpd policy.";
|
||||
<< ", Unexpected pstat data: cannot find the current xgmi_plpd policy.";
|
||||
LOG_ERROR(ss);
|
||||
return RSMI_STATUS_UNEXPECTED_DATA;
|
||||
}
|
||||
// Cannot find it
|
||||
|
||||
return RSMI_STATUS_SUCCESS;
|
||||
|
||||
CATCH
|
||||
@@ -2279,16 +2247,15 @@ rsmi_dev_xgmi_plpd_set(uint32_t dv_ind,
|
||||
DEVICE_MUTEX
|
||||
GET_DEV_FROM_INDX
|
||||
|
||||
std::string value("xgmi ");
|
||||
value += std::to_string(plpd_id);
|
||||
int ret = dev->writeDevInfo(amd::smi::kDevDPMPolicy , value);
|
||||
std::string value = std::to_string(plpd_id);
|
||||
int ret = dev->writeDevInfo(amd::smi::kDevXgmiPlpd , value);
|
||||
return amd::smi::ErrnoToRsmiStatus(ret);
|
||||
|
||||
CATCH
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_dpm_policy_get(uint32_t dv_ind,
|
||||
rsmi_dev_soc_pstate_get(uint32_t dv_ind,
|
||||
rsmi_dpm_policy_t* policy) {
|
||||
rsmi_status_t ret;
|
||||
std::vector<std::string> val_vec;
|
||||
@@ -2305,7 +2272,7 @@ rsmi_dev_dpm_policy_get(uint32_t dv_ind,
|
||||
LOG_TRACE(ss);
|
||||
DEVICE_MUTEX
|
||||
|
||||
ret = GetDevValueVec(amd::smi::kDevDPMPolicy, dv_ind, &val_vec);
|
||||
ret = GetDevValueVec(amd::smi::kDevSocPstate, dv_ind, &val_vec);
|
||||
if (ret == RSMI_STATUS_FILE_ERROR) {
|
||||
ss << __PRETTY_FUNCTION__ << " | ======= end ======="
|
||||
<< ", GetDevValueVec() ret was RSMI_STATUS_FILE_ERROR "
|
||||
@@ -2323,22 +2290,15 @@ rsmi_dev_dpm_policy_get(uint32_t dv_ind,
|
||||
/*
|
||||
It will reply on the number but no string as it may vary from soc to soc.
|
||||
The current pstate marked with *
|
||||
soc pstate
|
||||
0 : soc_pstate_default
|
||||
1 : soc_pstate_0
|
||||
2 : soc_pstate_1*
|
||||
3 : soc_pstate_2
|
||||
*/
|
||||
bool see_soc_pstate = false;
|
||||
bool see_current = false;
|
||||
policy->num_supported = 0;
|
||||
for (uint32_t i = 0; i < val_vec.size(); ++i) {
|
||||
auto current_line = amd::smi::trim(val_vec[i]);
|
||||
if (current_line == "soc pstate") {
|
||||
see_soc_pstate = true;
|
||||
continue;
|
||||
}
|
||||
if (see_soc_pstate == false) continue;
|
||||
|
||||
// Get tokens: <integer> : <string *>
|
||||
std::vector<std::string> tokens;
|
||||
@@ -2375,10 +2335,6 @@ rsmi_dev_dpm_policy_get(uint32_t dv_ind,
|
||||
policy->num_supported++;
|
||||
} // end for
|
||||
|
||||
if (!see_soc_pstate) {
|
||||
return RSMI_STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
if (!see_current) {
|
||||
ss << __PRETTY_FUNCTION__ << " | ======= end ======="
|
||||
<< ", Unexpected pstat data: cannot find the current policy.";
|
||||
@@ -2391,6 +2347,26 @@ rsmi_dev_dpm_policy_get(uint32_t dv_ind,
|
||||
CATCH
|
||||
}
|
||||
|
||||
rsmi_status_t
|
||||
rsmi_dev_soc_pstate_set(uint32_t dv_ind,
|
||||
uint32_t policy_id) {
|
||||
rsmi_status_t ret;
|
||||
|
||||
TRY
|
||||
std::ostringstream ss;
|
||||
ss << __PRETTY_FUNCTION__ << " | ======= start =======";
|
||||
LOG_TRACE(ss);
|
||||
REQUIRE_ROOT_ACCESS
|
||||
DEVICE_MUTEX
|
||||
GET_DEV_FROM_INDX
|
||||
|
||||
std::string value = std::to_string(policy_id);
|
||||
int ret = dev->writeDevInfo(amd::smi::kDevSocPstate , value);
|
||||
return amd::smi::ErrnoToRsmiStatus(ret);
|
||||
|
||||
CATCH
|
||||
}
|
||||
|
||||
static std::vector<std::string> pci_name_files = {
|
||||
"/usr/share/misc/pci.ids",
|
||||
"/usr/share/hwdata/pci.ids",
|
||||
|
||||
@@ -82,6 +82,8 @@ static const char *kDevPCieVendorIDFName = "vendor";
|
||||
|
||||
// Device sysfs file names
|
||||
static const char *kDevPerfLevelFName = "power_dpm_force_performance_level";
|
||||
static const char *kDevSocPstateFName = "pm_policy/soc_pstate";
|
||||
static const char *kDevXgmiPlpdFName = "pm_policy/xgmi_plpd";
|
||||
static const char *kDevProcessIsolationFName = "enforce_isolation";
|
||||
static const char *kDevShaderCleanFName = "run_cleaner_shader";
|
||||
static const char *kDevDevProdNameFName = "product_name";
|
||||
@@ -138,7 +140,6 @@ static const char *kDevAvailableComputePartitionFName =
|
||||
"available_compute_partition";
|
||||
static const char *kDevComputePartitionFName = "current_compute_partition";
|
||||
static const char *kDevMemoryPartitionFName = "current_memory_partition";
|
||||
static const char* kDevDPMPolicyFName = "pm_policy"; // The PM policy for pstat and XGMI
|
||||
|
||||
// Firmware version files
|
||||
static const char *kDevFwVersionAsdFName = "fw_version/asd_fw_version";
|
||||
@@ -318,7 +319,8 @@ static const std::map<DevInfoTypes, const char *> kDevAttribNameMap = {
|
||||
{kDevNumaNode, kDevNumaNodeFName},
|
||||
{kDevGpuMetrics, kDevGpuMetricsFName},
|
||||
{kDevPmMetrics, kDevPmMetricsFName},
|
||||
{kDevDPMPolicy, kDevDPMPolicyFName},
|
||||
{kDevSocPstate, kDevSocPstateFName},
|
||||
{kDevXgmiPlpd, kDevXgmiPlpdFName},
|
||||
{kDevProcessIsolation, kDevProcessIsolationFName},
|
||||
{kDevShaderClean, kDevShaderCleanFName},
|
||||
{kDevRegMetrics, kDevRegMetricsFName},
|
||||
@@ -478,7 +480,8 @@ Device::devInfoTypesStrings = {
|
||||
{kDevComputePartition, "kDevComputePartition"},
|
||||
{kDevMemoryPartition, "kDevMemoryPartition"},
|
||||
{kDevPCieVendorID, "kDevPCieVendorID"},
|
||||
{kDevDPMPolicy, "kDevDPMPolicy"},
|
||||
{kDevSocPstate, "kDevSocPstate"},
|
||||
{kDevXgmiPlpd, "kDevXgmiPlpd"},
|
||||
{kDevProcessIsolation, "kDevProcessIsolation"},
|
||||
{kDevShaderClean, "kDevShaderClean"},
|
||||
};
|
||||
@@ -522,6 +525,10 @@ static const std::map<const char *, dev_depends_t> kDevFuncDependsMap = {
|
||||
{"rsmi_dev_perf_level_set", {{kDevPerfLevelFName}, {}}},
|
||||
{"rsmi_dev_perf_level_set_v1", {{kDevPerfLevelFName}, {}}},
|
||||
{"rsmi_dev_perf_level_get", {{kDevPerfLevelFName}, {}}},
|
||||
{"rsmi_dev_soc_pstate_set", {{kDevSocPstateFName}, {}}},
|
||||
{"rsmi_dev_soc_pstate_get", {{kDevSocPstateFName}, {}}},
|
||||
{"rsmi_dev_xgmi_plpd_set", {{kDevXgmiPlpdFName}, {}}},
|
||||
{"rsmi_dev_xgmi_plpd_get", {{kDevXgmiPlpdFName}, {}}},
|
||||
{"rsmi_dev_process_isolation_set", {{kDevProcessIsolationFName}, {}}},
|
||||
{"rsmi_dev_process_isolation_get", {{kDevProcessIsolationFName}, {}}},
|
||||
{"rsmi_dev_gpu_shader_clean", {{kDevShaderCleanFName}, {}}},
|
||||
@@ -545,10 +552,6 @@ static const std::map<const char *, dev_depends_t> kDevFuncDependsMap = {
|
||||
{"rsmi_topo_numa_affinity_get", {{kDevNumaNodeFName}, {}}},
|
||||
{"rsmi_dev_gpu_metrics_info_get", {{kDevGpuMetricsFName}, {}}},
|
||||
{"rsmi_dev_pm_metrics_info_get", {{kDevPmMetricsFName}, {}}},
|
||||
{"rsmi_dev_dpm_policy_get", {{kDevDPMPolicyFName}, {}}},
|
||||
{"rsmi_dev_dpm_policy_set", {{kDevDPMPolicyFName}, {}}},
|
||||
{"rsmi_dev_xgmi_plpd_get", {{kDevDPMPolicyFName}, {}}},
|
||||
{"rsmi_dev_xgmi_plpd_set", {{kDevDPMPolicyFName}, {}}},
|
||||
{"rsmi_dev_reg_table_info_get", {{kDevRegMetricsFName}, {}}},
|
||||
{"rsmi_dev_gpu_reset", {{kDevGpuResetFName}, {}}},
|
||||
{"rsmi_dev_compute_partition_get", {{kDevComputePartitionFName}, {}}},
|
||||
@@ -948,6 +951,8 @@ int Device::writeDevInfo(DevInfoTypes type, std::string val) {
|
||||
sysfs_path += kDevAttribNameMap.at(type);
|
||||
switch (type) {
|
||||
case kDevGPUMClk:
|
||||
case kDevSocPstate:
|
||||
case kDevXgmiPlpd:
|
||||
case kDevProcessIsolation:
|
||||
case kDevShaderClean:
|
||||
case kDevDCEFClk:
|
||||
@@ -956,7 +961,6 @@ int Device::writeDevInfo(DevInfoTypes type, std::string val) {
|
||||
case kDevPCIEClk:
|
||||
case kDevPowerODVoltage:
|
||||
case kDevSOCClk:
|
||||
case kDevDPMPolicy:
|
||||
return writeDevInfoStr(type, val);
|
||||
case kDevComputePartition:
|
||||
case kDevMemoryPartition:
|
||||
@@ -1223,6 +1227,8 @@ int Device::readDevInfo(DevInfoTypes type, std::vector<std::string> *val) {
|
||||
|
||||
switch (type) {
|
||||
case kDevGPUMClk:
|
||||
case kDevSocPstate:
|
||||
case kDevXgmiPlpd:
|
||||
case kDevProcessIsolation:
|
||||
case kDevGPUSClk:
|
||||
case kDevDCEFClk:
|
||||
@@ -1239,7 +1245,6 @@ int Device::readDevInfo(DevInfoTypes type, std::vector<std::string> *val) {
|
||||
case kDevErrCntHDP:
|
||||
case kDevErrCntXGMIWAFL:
|
||||
case kDevMemPageBad:
|
||||
case kDevDPMPolicy:
|
||||
return readDevInfoMultiLineStr(type, val);
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user