Commit 0d9d78b5 authored by Evan Quan's avatar Evan Quan Committed by Alex Deucher

drm/amd/powerplay: correct smu_update_table usage

The interface was used in a confusing way. In profile mode scenario,
the 2nd parameter of the interface was used in a different way from
other scenarios.
Signed-off-by: default avatarEvan Quan <evan.quan@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent f68ccf43
...@@ -323,7 +323,7 @@ int smu_common_read_sensor(struct smu_context *smu, enum amd_pp_sensors sensor, ...@@ -323,7 +323,7 @@ int smu_common_read_sensor(struct smu_context *smu, enum amd_pp_sensors sensor,
return ret; return ret;
} }
int smu_update_table(struct smu_context *smu, enum smu_table_id table_index, int smu_update_table(struct smu_context *smu, enum smu_table_id table_index, int argument,
void *table_data, bool drv2smu) void *table_data, bool drv2smu)
{ {
struct smu_table_context *smu_table = &smu->smu_table; struct smu_table_context *smu_table = &smu->smu_table;
...@@ -350,7 +350,7 @@ int smu_update_table(struct smu_context *smu, enum smu_table_id table_index, ...@@ -350,7 +350,7 @@ int smu_update_table(struct smu_context *smu, enum smu_table_id table_index,
ret = smu_send_smc_msg_with_param(smu, drv2smu ? ret = smu_send_smc_msg_with_param(smu, drv2smu ?
SMU_MSG_TransferTableDram2Smu : SMU_MSG_TransferTableDram2Smu :
SMU_MSG_TransferTableSmu2Dram, SMU_MSG_TransferTableSmu2Dram,
table_id); table_id | ((argument & 0xFFFF) << 16));
if (ret) if (ret)
return ret; return ret;
......
...@@ -937,7 +937,7 @@ extern int smu_feature_is_supported(struct smu_context *smu, ...@@ -937,7 +937,7 @@ extern int smu_feature_is_supported(struct smu_context *smu,
extern int smu_feature_set_supported(struct smu_context *smu, extern int smu_feature_set_supported(struct smu_context *smu,
enum smu_feature_mask mask, bool enable); enum smu_feature_mask mask, bool enable);
int smu_update_table(struct smu_context *smu, uint32_t table_index, int smu_update_table(struct smu_context *smu, enum smu_table_id table_index, int argument,
void *table_data, bool drv2smu); void *table_data, bool drv2smu);
bool is_support_sw_smu(struct amdgpu_device *adev); bool is_support_sw_smu(struct amdgpu_device *adev);
......
...@@ -613,7 +613,7 @@ static int navi10_get_current_clk_freq_by_table(struct smu_context *smu, ...@@ -613,7 +613,7 @@ static int navi10_get_current_clk_freq_by_table(struct smu_context *smu,
memset(&metrics, 0, sizeof(metrics)); memset(&metrics, 0, sizeof(metrics));
ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, (void *)&metrics, false); ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics, false);
if (ret) if (ret)
return ret; return ret;
...@@ -866,7 +866,7 @@ static int navi10_get_gpu_power(struct smu_context *smu, uint32_t *value) ...@@ -866,7 +866,7 @@ static int navi10_get_gpu_power(struct smu_context *smu, uint32_t *value)
if (!value) if (!value)
return -EINVAL; return -EINVAL;
ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, (void *)&metrics, ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics,
false); false);
if (ret) if (ret)
return ret; return ret;
...@@ -888,7 +888,7 @@ static int navi10_get_current_activity_percent(struct smu_context *smu, ...@@ -888,7 +888,7 @@ static int navi10_get_current_activity_percent(struct smu_context *smu,
msleep(1); msleep(1);
ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0,
(void *)&metrics, false); (void *)&metrics, false);
if (ret) if (ret)
return ret; return ret;
...@@ -929,7 +929,7 @@ static int navi10_get_fan_speed(struct smu_context *smu, uint16_t *value) ...@@ -929,7 +929,7 @@ static int navi10_get_fan_speed(struct smu_context *smu, uint16_t *value)
memset(&metrics, 0, sizeof(metrics)); memset(&metrics, 0, sizeof(metrics));
ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0,
(void *)&metrics, false); (void *)&metrics, false);
if (ret) if (ret)
return ret; return ret;
...@@ -995,7 +995,7 @@ static int navi10_get_power_profile_mode(struct smu_context *smu, char *buf) ...@@ -995,7 +995,7 @@ static int navi10_get_power_profile_mode(struct smu_context *smu, char *buf)
/* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */ /* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */
workload_type = smu_workload_get_type(smu, i); workload_type = smu_workload_get_type(smu, i);
result = smu_update_table(smu, result = smu_update_table(smu,
SMU_TABLE_ACTIVITY_MONITOR_COEFF | workload_type << 16, SMU_TABLE_ACTIVITY_MONITOR_COEFF, workload_type,
(void *)(&activity_monitor), false); (void *)(&activity_monitor), false);
if (result) { if (result) {
pr_err("[%s] Failed to get activity monitor!", __func__); pr_err("[%s] Failed to get activity monitor!", __func__);
...@@ -1068,7 +1068,7 @@ static int navi10_set_power_profile_mode(struct smu_context *smu, long *input, u ...@@ -1068,7 +1068,7 @@ static int navi10_set_power_profile_mode(struct smu_context *smu, long *input, u
return -EINVAL; return -EINVAL;
ret = smu_update_table(smu, ret = smu_update_table(smu,
SMU_TABLE_ACTIVITY_MONITOR_COEFF | WORKLOAD_PPLIB_CUSTOM_BIT << 16, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
(void *)(&activity_monitor), false); (void *)(&activity_monitor), false);
if (ret) { if (ret) {
pr_err("[%s] Failed to get activity monitor!", __func__); pr_err("[%s] Failed to get activity monitor!", __func__);
...@@ -1112,7 +1112,7 @@ static int navi10_set_power_profile_mode(struct smu_context *smu, long *input, u ...@@ -1112,7 +1112,7 @@ static int navi10_set_power_profile_mode(struct smu_context *smu, long *input, u
} }
ret = smu_update_table(smu, ret = smu_update_table(smu,
SMU_TABLE_ACTIVITY_MONITOR_COEFF | WORKLOAD_PPLIB_CUSTOM_BIT << 16, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
(void *)(&activity_monitor), true); (void *)(&activity_monitor), true);
if (ret) { if (ret) {
pr_err("[%s] Failed to set activity monitor!", __func__); pr_err("[%s] Failed to set activity monitor!", __func__);
...@@ -1278,7 +1278,7 @@ static int navi10_thermal_get_temperature(struct smu_context *smu, ...@@ -1278,7 +1278,7 @@ static int navi10_thermal_get_temperature(struct smu_context *smu,
if (!value) if (!value)
return -EINVAL; return -EINVAL;
ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, (void *)&metrics, false); ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0, (void *)&metrics, false);
if (ret) if (ret)
return ret; return ret;
......
...@@ -703,7 +703,7 @@ static int smu_v11_0_write_pptable(struct smu_context *smu) ...@@ -703,7 +703,7 @@ static int smu_v11_0_write_pptable(struct smu_context *smu)
struct smu_table_context *table_context = &smu->smu_table; struct smu_table_context *table_context = &smu->smu_table;
int ret = 0; int ret = 0;
ret = smu_update_table(smu, SMU_TABLE_PPTABLE, ret = smu_update_table(smu, SMU_TABLE_PPTABLE, 0,
table_context->driver_pptable, true); table_context->driver_pptable, true);
return ret; return ret;
...@@ -722,7 +722,7 @@ static int smu_v11_0_write_watermarks_table(struct smu_context *smu) ...@@ -722,7 +722,7 @@ static int smu_v11_0_write_watermarks_table(struct smu_context *smu)
if (!table->cpu_addr) if (!table->cpu_addr)
return -EINVAL; return -EINVAL;
ret = smu_update_table(smu, SMU_TABLE_WATERMARKS, table->cpu_addr, ret = smu_update_table(smu, SMU_TABLE_WATERMARKS, 0, table->cpu_addr,
true); true);
return ret; return ret;
......
...@@ -1680,7 +1680,7 @@ static int vega20_get_metrics_table(struct smu_context *smu, ...@@ -1680,7 +1680,7 @@ static int vega20_get_metrics_table(struct smu_context *smu,
int ret = 0; int ret = 0;
if (!smu_table->metrics_time || time_after(jiffies, smu_table->metrics_time + HZ / 1000)) { if (!smu_table->metrics_time || time_after(jiffies, smu_table->metrics_time + HZ / 1000)) {
ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, ret = smu_update_table(smu, SMU_TABLE_SMU_METRICS, 0,
(void *)smu_table->metrics_table, false); (void *)smu_table->metrics_table, false);
if (ret) { if (ret) {
pr_info("Failed to export SMU metrics table!\n"); pr_info("Failed to export SMU metrics table!\n");
...@@ -1709,7 +1709,7 @@ static int vega20_set_default_od_settings(struct smu_context *smu, ...@@ -1709,7 +1709,7 @@ static int vega20_set_default_od_settings(struct smu_context *smu,
if (!table_context->overdrive_table) if (!table_context->overdrive_table)
return -ENOMEM; return -ENOMEM;
ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, 0,
table_context->overdrive_table, false); table_context->overdrive_table, false);
if (ret) { if (ret) {
pr_err("Failed to export over drive table!\n"); pr_err("Failed to export over drive table!\n");
...@@ -1721,7 +1721,7 @@ static int vega20_set_default_od_settings(struct smu_context *smu, ...@@ -1721,7 +1721,7 @@ static int vega20_set_default_od_settings(struct smu_context *smu,
return ret; return ret;
} }
ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, 0,
table_context->overdrive_table, true); table_context->overdrive_table, true);
if (ret) { if (ret) {
pr_err("Failed to import over drive table!\n"); pr_err("Failed to import over drive table!\n");
...@@ -1805,7 +1805,7 @@ static int vega20_get_power_profile_mode(struct smu_context *smu, char *buf) ...@@ -1805,7 +1805,7 @@ static int vega20_get_power_profile_mode(struct smu_context *smu, char *buf)
/* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */ /* conv PP_SMC_POWER_PROFILE* to WORKLOAD_PPLIB_*_BIT */
workload_type = smu_workload_get_type(smu, i); workload_type = smu_workload_get_type(smu, i);
result = smu_update_table(smu, result = smu_update_table(smu,
SMU_TABLE_ACTIVITY_MONITOR_COEFF | workload_type << 16, SMU_TABLE_ACTIVITY_MONITOR_COEFF, workload_type,
(void *)(&activity_monitor), false); (void *)(&activity_monitor), false);
if (result) { if (result) {
pr_err("[%s] Failed to get activity monitor!", __func__); pr_err("[%s] Failed to get activity monitor!", __func__);
...@@ -1891,7 +1891,7 @@ static int vega20_set_power_profile_mode(struct smu_context *smu, long *input, u ...@@ -1891,7 +1891,7 @@ static int vega20_set_power_profile_mode(struct smu_context *smu, long *input, u
if (smu->power_profile_mode == PP_SMC_POWER_PROFILE_CUSTOM) { if (smu->power_profile_mode == PP_SMC_POWER_PROFILE_CUSTOM) {
ret = smu_update_table(smu, ret = smu_update_table(smu,
SMU_TABLE_ACTIVITY_MONITOR_COEFF | WORKLOAD_PPLIB_CUSTOM_BIT << 16, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
(void *)(&activity_monitor), false); (void *)(&activity_monitor), false);
if (ret) { if (ret) {
pr_err("[%s] Failed to get activity monitor!", __func__); pr_err("[%s] Failed to get activity monitor!", __func__);
...@@ -1946,7 +1946,7 @@ static int vega20_set_power_profile_mode(struct smu_context *smu, long *input, u ...@@ -1946,7 +1946,7 @@ static int vega20_set_power_profile_mode(struct smu_context *smu, long *input, u
} }
ret = smu_update_table(smu, ret = smu_update_table(smu,
SMU_TABLE_ACTIVITY_MONITOR_COEFF | WORKLOAD_PPLIB_CUSTOM_BIT << 16, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
(void *)(&activity_monitor), true); (void *)(&activity_monitor), true);
if (ret) { if (ret) {
pr_err("[%s] Failed to set activity monitor!", __func__); pr_err("[%s] Failed to set activity monitor!", __func__);
...@@ -2495,7 +2495,7 @@ static int vega20_update_od8_settings(struct smu_context *smu, ...@@ -2495,7 +2495,7 @@ static int vega20_update_od8_settings(struct smu_context *smu,
struct smu_table_context *table_context = &smu->smu_table; struct smu_table_context *table_context = &smu->smu_table;
int ret; int ret;
ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, 0,
table_context->overdrive_table, false); table_context->overdrive_table, false);
if (ret) { if (ret) {
pr_err("Failed to export over drive table!\n"); pr_err("Failed to export over drive table!\n");
...@@ -2506,7 +2506,7 @@ static int vega20_update_od8_settings(struct smu_context *smu, ...@@ -2506,7 +2506,7 @@ static int vega20_update_od8_settings(struct smu_context *smu,
if (ret) if (ret)
return ret; return ret;
ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, 0,
table_context->overdrive_table, true); table_context->overdrive_table, true);
if (ret) { if (ret) {
pr_err("Failed to import over drive table!\n"); pr_err("Failed to import over drive table!\n");
...@@ -2770,7 +2770,7 @@ static int vega20_odn_edit_dpm_table(struct smu_context *smu, ...@@ -2770,7 +2770,7 @@ static int vega20_odn_edit_dpm_table(struct smu_context *smu,
break; break;
case PP_OD_RESTORE_DEFAULT_TABLE: case PP_OD_RESTORE_DEFAULT_TABLE:
ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, table_context->overdrive_table, false); ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, 0, table_context->overdrive_table, false);
if (ret) { if (ret) {
pr_err("Failed to export over drive table!\n"); pr_err("Failed to export over drive table!\n");
return ret; return ret;
...@@ -2779,7 +2779,7 @@ static int vega20_odn_edit_dpm_table(struct smu_context *smu, ...@@ -2779,7 +2779,7 @@ static int vega20_odn_edit_dpm_table(struct smu_context *smu,
break; break;
case PP_OD_COMMIT_DPM_TABLE: case PP_OD_COMMIT_DPM_TABLE:
ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, table_context->overdrive_table, true); ret = smu_update_table(smu, SMU_TABLE_OVERDRIVE, 0, table_context->overdrive_table, true);
if (ret) { if (ret) {
pr_err("Failed to import over drive table!\n"); pr_err("Failed to import over drive table!\n");
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment