> -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf > Of Rex Zhu > Sent: Wednesday, September 06, 2017 7:37 AM > To: amd-gfx at lists.freedesktop.org > Cc: Zhu, Rex > Subject: [PATCH 3/3] drm/amdgpu: unify amd_pm_funcitons in dpm and > powerplay > > delete amd_pm_funcs in amdgpu_pm, > put pm function table in struct powerplay for all > asics. > > Change-Id: I6248c4bd4cf23ae406a540bb5225c991fb9aca6e > Signed-off-by: Rex Zhu <Rex.Zhu at amd.com> Series is: Reviewed-by: Alex Deucher <alexander.deucher at amd.com> Is it worth merging the ci_dpm code into the powerplay smu7 code at some point? Not sure if it's worth the effort or not. Alex > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 5 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h | 120 ++++++------- > drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 234 +++++++++++------- > -------- > drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c | 3 + > drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 10 +- > drivers/gpu/drm/amd/amdgpu/cik_dpm.h | 3 +- > drivers/gpu/drm/amd/amdgpu/kv_dpm.c | 10 +- > drivers/gpu/drm/amd/amdgpu/si_dpm.c | 10 +- > drivers/gpu/drm/amd/amdgpu/si_dpm.h | 1 + > 9 files changed, 159 insertions(+), 237 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index 3467179..773a0bc 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -3574,10 +3574,7 @@ static ssize_t > amdgpu_debugfs_sensor_read(struct file *f, char __user *buf, > > valuesize = sizeof(values); > if (adev->powerplay.pp_funcs && adev->powerplay.pp_funcs- > >read_sensor) > - r = adev->powerplay.pp_funcs->read_sensor(adev- > >powerplay.pp_handle, idx, &values[0], &valuesize); > - else if (adev->pm.funcs && adev->pm.funcs->read_sensor) > - r = adev->pm.funcs->read_sensor(adev, idx, &values[0], > - &valuesize); > + r = amdgpu_dpm_read_sensor(adev, idx, &values[0], > &valuesize); > else > return -EINVAL; > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > index 5b2b724..0d22259 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > @@ -241,134 +241,119 @@ enum amdgpu_pcie_gen { > AMDGPU_PCIE_GEN_INVALID = 0xffff > }; > > -#define amdgpu_dpm_pre_set_power_state(adev) (adev)->pm.funcs- > >pre_set_power_state((adev)) > -#define amdgpu_dpm_set_power_state(adev) (adev)->pm.funcs- > >set_power_state((adev)) > -#define amdgpu_dpm_post_set_power_state(adev) (adev)->pm.funcs- > >post_set_power_state((adev)) > -#define amdgpu_dpm_display_configuration_changed(adev) (adev)- > >pm.funcs->display_configuration_changed((adev)) > -#define amdgpu_dpm_print_power_state(adev, ps) (adev)->pm.funcs- > >print_power_state((adev), (ps)) > -#define amdgpu_dpm_vblank_too_short(adev) (adev)->pm.funcs- > >vblank_too_short((adev)) > -#define amdgpu_dpm_enable_bapm(adev, e) (adev)->pm.funcs- > >enable_bapm((adev), (e)) > +#define amdgpu_dpm_pre_set_power_state(adev) \ > + ((adev)->powerplay.pp_funcs- > >pre_set_power_state((adev)->powerplay.pp_handle)) > + > +#define amdgpu_dpm_set_power_state(adev) \ > + ((adev)->powerplay.pp_funcs->set_power_state((adev)- > >powerplay.pp_handle)) > + > +#define amdgpu_dpm_post_set_power_state(adev) \ > + ((adev)->powerplay.pp_funcs- > >post_set_power_state((adev)->powerplay.pp_handle)) > + > +#define amdgpu_dpm_display_configuration_changed(adev) \ > + ((adev)->powerplay.pp_funcs- > >display_configuration_changed((adev)->powerplay.pp_handle)) > + > +#define amdgpu_dpm_print_power_state(adev, ps) \ > + ((adev)->powerplay.pp_funcs->print_power_state((adev)- > >powerplay.pp_handle, (ps))) > + > +#define amdgpu_dpm_vblank_too_short(adev) \ > + ((adev)->powerplay.pp_funcs->vblank_too_short((adev)- > >powerplay.pp_handle)) > + > +#define amdgpu_dpm_enable_bapm(adev, e) \ > + ((adev)->powerplay.pp_funcs->enable_bapm((adev)- > >powerplay.pp_handle, (e))) > > #define amdgpu_dpm_read_sensor(adev, idx, value, size) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->read_sensor(adev- > >powerplay.pp_handle, (idx), (value), (size)) : \ > - (adev)->pm.funcs->read_sensor((adev), (idx), (value), > (size))) > + ((adev)->powerplay.pp_funcs->read_sensor((adev)- > >powerplay.pp_handle, (idx), (value), (size))) > > #define amdgpu_dpm_get_temperature(adev) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->get_temperature((adev)- > >powerplay.pp_handle) : \ > - (adev)->pm.funcs->get_temperature((adev))) > + ((adev)->powerplay.pp_funcs->get_temperature((adev)- > >powerplay.pp_handle)) > > #define amdgpu_dpm_set_fan_control_mode(adev, m) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->set_fan_control_mode((adev)- > >powerplay.pp_handle, (m)) : \ > - (adev)->pm.funcs->set_fan_control_mode((adev), (m))) > + ((adev)->powerplay.pp_funcs- > >set_fan_control_mode((adev)->powerplay.pp_handle, (m))) > > #define amdgpu_dpm_get_fan_control_mode(adev) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->get_fan_control_mode((adev)- > >powerplay.pp_handle) : \ > - (adev)->pm.funcs->get_fan_control_mode((adev))) > + ((adev)->powerplay.pp_funcs- > >get_fan_control_mode((adev)->powerplay.pp_handle)) > > #define amdgpu_dpm_set_fan_speed_percent(adev, s) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->set_fan_speed_percent((adev)- > >powerplay.pp_handle, (s)) : \ > - (adev)->pm.funcs->set_fan_speed_percent((adev), (s))) > + ((adev)->powerplay.pp_funcs- > >set_fan_speed_percent((adev)->powerplay.pp_handle, (s))) > > #define amdgpu_dpm_get_fan_speed_percent(adev, s) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->get_fan_speed_percent((adev)- > >powerplay.pp_handle, (s)) : \ > - (adev)->pm.funcs->get_fan_speed_percent((adev), (s))) > + ((adev)->powerplay.pp_funcs- > >get_fan_speed_percent((adev)->powerplay.pp_handle, (s))) > > #define amdgpu_dpm_get_fan_speed_rpm(adev, s) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->get_fan_speed_rpm((adev)- > >powerplay.pp_handle, (s)) : \ > - -EINVAL) > + ((adev)->powerplay.pp_funcs- > >get_fan_speed_rpm)((adev)->powerplay.pp_handle, (s)) > > #define amdgpu_dpm_get_sclk(adev, l) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->get_sclk((adev)- > >powerplay.pp_handle, (l)) : \ > - (adev)->pm.funcs->get_sclk((adev), (l))) > + ((adev)->powerplay.pp_funcs->get_sclk((adev)- > >powerplay.pp_handle, (l))) > > #define amdgpu_dpm_get_mclk(adev, l) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->get_mclk((adev)- > >powerplay.pp_handle, (l)) : \ > - (adev)->pm.funcs->get_mclk((adev), (l))) > - > + ((adev)->powerplay.pp_funcs->get_mclk((adev)- > >powerplay.pp_handle, (l))) > > #define amdgpu_dpm_force_performance_level(adev, l) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->force_performance_level((adev)- > >powerplay.pp_handle, (l)) : \ > - (adev)->pm.funcs->force_performance_level((adev), (l))) > + ((adev)->powerplay.pp_funcs- > >force_performance_level((adev)->powerplay.pp_handle, (l))) > > #define amdgpu_dpm_powergate_uvd(adev, g) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->powergate_uvd((adev)- > >powerplay.pp_handle, (g)) : \ > - (adev)->pm.funcs->powergate_uvd((adev), (g))) > + ((adev)->powerplay.pp_funcs->powergate_uvd((adev)- > >powerplay.pp_handle, (g))) > > #define amdgpu_dpm_powergate_vce(adev, g) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->powergate_vce((adev)- > >powerplay.pp_handle, (g)) : \ > - (adev)->pm.funcs->powergate_vce((adev), (g))) > + ((adev)->powerplay.pp_funcs->powergate_vce((adev)- > >powerplay.pp_handle, (g))) > > #define amdgpu_dpm_get_current_power_state(adev) \ > - (adev)->powerplay.pp_funcs->get_current_power_state((adev)- > >powerplay.pp_handle) > + ((adev)->powerplay.pp_funcs- > >get_current_power_state((adev)->powerplay.pp_handle)) > > #define amdgpu_dpm_get_pp_num_states(adev, data) \ > - (adev)->powerplay.pp_funcs->get_pp_num_states((adev)- > >powerplay.pp_handle, data) > + ((adev)->powerplay.pp_funcs->get_pp_num_states((adev)- > >powerplay.pp_handle, data)) > > #define amdgpu_dpm_get_pp_table(adev, table) \ > - (adev)->powerplay.pp_funcs->get_pp_table((adev)- > >powerplay.pp_handle, table) > + ((adev)->powerplay.pp_funcs->get_pp_table((adev)- > >powerplay.pp_handle, table)) > > #define amdgpu_dpm_set_pp_table(adev, buf, size) \ > - (adev)->powerplay.pp_funcs->set_pp_table((adev)- > >powerplay.pp_handle, buf, size) > + ((adev)->powerplay.pp_funcs->set_pp_table((adev)- > >powerplay.pp_handle, buf, size)) > > #define amdgpu_dpm_print_clock_levels(adev, type, buf) \ > - (adev)->powerplay.pp_funcs->print_clock_levels((adev)- > >powerplay.pp_handle, type, buf) > + ((adev)->powerplay.pp_funcs->print_clock_levels((adev)- > >powerplay.pp_handle, type, buf)) > > #define amdgpu_dpm_force_clock_level(adev, type, level) \ > - (adev)->powerplay.pp_funcs->force_clock_level((adev)- > >powerplay.pp_handle, type, level) > + ((adev)->powerplay.pp_funcs->force_clock_level((adev)- > >powerplay.pp_handle, type, level)) > > #define amdgpu_dpm_get_sclk_od(adev) \ > - (adev)->powerplay.pp_funcs->get_sclk_od((adev)- > >powerplay.pp_handle) > + ((adev)->powerplay.pp_funcs->get_sclk_od((adev)- > >powerplay.pp_handle)) > > #define amdgpu_dpm_set_sclk_od(adev, value) \ > - (adev)->powerplay.pp_funcs->set_sclk_od((adev)- > >powerplay.pp_handle, value) > + ((adev)->powerplay.pp_funcs->set_sclk_od((adev)- > >powerplay.pp_handle, value)) > > #define amdgpu_dpm_get_mclk_od(adev) \ > - ((adev)->powerplay.pp_funcs->get_mclk_od((adev)- > >powerplay.pp_handle)) > + ((adev)->powerplay.pp_funcs->get_mclk_od((adev)- > >powerplay.pp_handle)) > > #define amdgpu_dpm_set_mclk_od(adev, value) \ > - ((adev)->powerplay.pp_funcs->set_mclk_od((adev)- > >powerplay.pp_handle, value)) > + ((adev)->powerplay.pp_funcs->set_mclk_od((adev)- > >powerplay.pp_handle, value)) > > #define amdgpu_dpm_dispatch_task(adev, task_id, input, output) > \ > - ((adev)->powerplay.pp_funcs->dispatch_tasks)((adev)- > >powerplay.pp_handle, (task_id), (input), (output)) > + ((adev)->powerplay.pp_funcs->dispatch_tasks)((adev)- > >powerplay.pp_handle, (task_id), (input), (output)) > > -#define amgdpu_dpm_check_state_equal(adev, cps, rps, equal) (adev)- > >pm.funcs->check_state_equal((adev), (cps),(rps),(equal)) > +#define amdgpu_dpm_check_state_equal(adev, cps, rps, equal) \ > + ((adev)->powerplay.pp_funcs->check_state_equal((adev)- > >powerplay.pp_handle, (cps), (rps), (equal))) > > #define amdgpu_dpm_get_vce_clock_state(adev, i) > \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->get_vce_clock_state((adev)- > >powerplay.pp_handle, (i)) : \ > - (adev)->pm.funcs->get_vce_clock_state((adev), (i))) > + ((adev)->powerplay.pp_funcs->get_vce_clock_state((adev)- > >powerplay.pp_handle, (i))) > > -#define amdgpu_dpm_get_performance_level(adev) \ > - ((adev)->pp_enabled ? \ > - (adev)->powerplay.pp_funcs->get_performance_level((adev)- > >powerplay.pp_handle) : \ > - (adev)->pm.dpm.forced_level) > +#define amdgpu_dpm_get_performance_level(adev) > \ > + ((adev)->powerplay.pp_funcs- > >get_performance_level((adev)->powerplay.pp_handle)) > > #define amdgpu_dpm_reset_power_profile_state(adev, request) \ > - ((adev)->powerplay.pp_funcs->reset_power_profile_state(\ > + ((adev)->powerplay.pp_funcs- > >reset_power_profile_state(\ > (adev)->powerplay.pp_handle, request)) > > #define amdgpu_dpm_get_power_profile_state(adev, query) \ > - ((adev)->powerplay.pp_funcs->get_power_profile_state(\ > + ((adev)->powerplay.pp_funcs->get_power_profile_state(\ > (adev)->powerplay.pp_handle, query)) > > #define amdgpu_dpm_set_power_profile_state(adev, request) \ > - ((adev)->powerplay.pp_funcs->set_power_profile_state(\ > + ((adev)->powerplay.pp_funcs->set_power_profile_state(\ > (adev)->powerplay.pp_handle, request)) > > #define amdgpu_dpm_switch_power_profile(adev, type) \ > - ((adev)->powerplay.pp_funcs->switch_power_profile(\ > + ((adev)->powerplay.pp_funcs->switch_power_profile(\ > (adev)->powerplay.pp_handle, type)) > > struct amdgpu_dpm { > @@ -442,7 +427,6 @@ struct amdgpu_pm { > struct amdgpu_dpm dpm; > const struct firmware *fw; /* SMC firmware */ > uint32_t fw_version; > - const struct amd_pm_funcs *funcs; > uint32_t pcie_gen_mask; > uint32_t pcie_mlw_mask; > struct amd_pp_display_configuration pm_display_cfg;/* set by dc */ > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > index e78395a..58a9db4 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > @@ -74,7 +74,7 @@ void amdgpu_pm_acpi_event_handler(struct > amdgpu_device *adev) > adev->pm.dpm.ac_power = true; > else > adev->pm.dpm.ac_power = false; > - if (adev->pm.funcs->enable_bapm) > + if (adev->powerplay.pp_funcs->enable_bapm) > amdgpu_dpm_enable_bapm(adev, adev- > >pm.dpm.ac_power); > mutex_unlock(&adev->pm.mutex); > } > @@ -88,9 +88,9 @@ static ssize_t amdgpu_get_dpm_state(struct device > *dev, > struct amdgpu_device *adev = ddev->dev_private; > enum amd_pm_state_type pm; > > - if (adev->pp_enabled) { > + if (adev->powerplay.pp_funcs->get_current_power_state) > pm = amdgpu_dpm_get_current_power_state(adev); > - } else > + else > pm = adev->pm.dpm.user_state; > > return snprintf(buf, PAGE_SIZE, "%s\n", > @@ -140,13 +140,15 @@ static ssize_t > amdgpu_get_dpm_forced_performance_level(struct device *dev, > { > struct drm_device *ddev = dev_get_drvdata(dev); > struct amdgpu_device *adev = ddev->dev_private; > - enum amd_dpm_forced_level level; > + enum amd_dpm_forced_level level = 0xff; > > if ((adev->flags & AMD_IS_PX) && > (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) > return snprintf(buf, PAGE_SIZE, "off\n"); > > - level = amdgpu_dpm_get_performance_level(adev); > + if (adev->powerplay.pp_funcs->get_performance_level) > + level = amdgpu_dpm_get_performance_level(adev); > + > return snprintf(buf, PAGE_SIZE, "%s\n", > (level == AMD_DPM_FORCED_LEVEL_AUTO) ? > "auto" : > (level == AMD_DPM_FORCED_LEVEL_LOW) ? "low" : > @@ -167,7 +169,7 @@ static ssize_t > amdgpu_set_dpm_forced_performance_level(struct device *dev, > struct drm_device *ddev = dev_get_drvdata(dev); > struct amdgpu_device *adev = ddev->dev_private; > enum amd_dpm_forced_level level; > - enum amd_dpm_forced_level current_level; > + enum amd_dpm_forced_level current_level = 0xff; > int ret = 0; > > /* Can't force performance level when the card is off */ > @@ -175,7 +177,8 @@ static ssize_t > amdgpu_set_dpm_forced_performance_level(struct device *dev, > (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) > return -EINVAL; > > - current_level = amdgpu_dpm_get_performance_level(adev); > + if (adev->powerplay.pp_funcs->get_performance_level) > + current_level = > amdgpu_dpm_get_performance_level(adev); > > if (strncmp("low", buf, strlen("low")) == 0) { > level = AMD_DPM_FORCED_LEVEL_LOW; > @@ -203,9 +206,7 @@ static ssize_t > amdgpu_set_dpm_forced_performance_level(struct device *dev, > if (current_level == level) > return count; > > - if (adev->pp_enabled) > - amdgpu_dpm_force_performance_level(adev, level); > - else { > + if (adev->powerplay.pp_funcs->force_performance_level) { > mutex_lock(&adev->pm.mutex); > if (adev->pm.dpm.thermal_active) { > count = -EINVAL; > @@ -233,7 +234,7 @@ static ssize_t amdgpu_get_pp_num_states(struct > device *dev, > struct pp_states_info data; > int i, buf_len; > > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->get_pp_num_states) > amdgpu_dpm_get_pp_num_states(adev, &data); > > buf_len = snprintf(buf, PAGE_SIZE, "states: %d\n", data.nums); > @@ -257,8 +258,8 @@ static ssize_t amdgpu_get_pp_cur_state(struct > device *dev, > enum amd_pm_state_type pm = 0; > int i = 0; > > - if (adev->pp_enabled) { > - > + if (adev->powerplay.pp_funcs->get_current_power_state > + && adev->powerplay.pp_funcs->get_pp_num_states) { > pm = amdgpu_dpm_get_current_power_state(adev); > amdgpu_dpm_get_pp_num_states(adev, &data); > > @@ -280,25 +281,10 @@ static ssize_t amdgpu_get_pp_force_state(struct > device *dev, > { > struct drm_device *ddev = dev_get_drvdata(dev); > struct amdgpu_device *adev = ddev->dev_private; > - struct pp_states_info data; > - enum amd_pm_state_type pm = 0; > - int i; > - > - if (adev->pp_force_state_enabled && adev->pp_enabled) { > - pm = amdgpu_dpm_get_current_power_state(adev); > - amdgpu_dpm_get_pp_num_states(adev, &data); > - > - for (i = 0; i < data.nums; i++) { > - if (pm == data.states[i]) > - break; > - } > > - if (i == data.nums) > - i = -EINVAL; > - > - return snprintf(buf, PAGE_SIZE, "%d\n", i); > - > - } else > + if (adev->pp_force_state_enabled) > + return amdgpu_get_pp_cur_state(dev, attr, buf); > + else > return snprintf(buf, PAGE_SIZE, "\n"); > } > > @@ -347,7 +333,7 @@ static ssize_t amdgpu_get_pp_table(struct device > *dev, > char *table = NULL; > int size; > > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->get_pp_table) > size = amdgpu_dpm_get_pp_table(adev, &table); > else > return 0; > @@ -368,7 +354,7 @@ static ssize_t amdgpu_set_pp_table(struct device > *dev, > struct drm_device *ddev = dev_get_drvdata(dev); > struct amdgpu_device *adev = ddev->dev_private; > > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->set_pp_table) > amdgpu_dpm_set_pp_table(adev, buf, count); > > return count; > @@ -380,14 +366,11 @@ static ssize_t amdgpu_get_pp_dpm_sclk(struct > device *dev, > { > struct drm_device *ddev = dev_get_drvdata(dev); > struct amdgpu_device *adev = ddev->dev_private; > - ssize_t size = 0; > - > - if (adev->pp_enabled) > - size = amdgpu_dpm_print_clock_levels(adev, PP_SCLK, buf); > - else if (adev->pm.funcs->print_clock_levels) > - size = adev->pm.funcs->print_clock_levels(adev, PP_SCLK, > buf); > > - return size; > + if (adev->powerplay.pp_funcs->print_clock_levels) > + return amdgpu_dpm_print_clock_levels(adev, PP_SCLK, > buf); > + else > + return snprintf(buf, PAGE_SIZE, "\n"); > } > > static ssize_t amdgpu_set_pp_dpm_sclk(struct device *dev, > @@ -416,10 +399,9 @@ static ssize_t amdgpu_set_pp_dpm_sclk(struct > device *dev, > mask |= 1 << level; > } > > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->force_clock_level) > amdgpu_dpm_force_clock_level(adev, PP_SCLK, mask); > - else if (adev->pm.funcs->force_clock_level) > - adev->pm.funcs->force_clock_level(adev, PP_SCLK, mask); > + > fail: > return count; > } > @@ -430,14 +412,11 @@ static ssize_t amdgpu_get_pp_dpm_mclk(struct > device *dev, > { > struct drm_device *ddev = dev_get_drvdata(dev); > struct amdgpu_device *adev = ddev->dev_private; > - ssize_t size = 0; > - > - if (adev->pp_enabled) > - size = amdgpu_dpm_print_clock_levels(adev, PP_MCLK, > buf); > - else if (adev->pm.funcs->print_clock_levels) > - size = adev->pm.funcs->print_clock_levels(adev, PP_MCLK, > buf); > > - return size; > + if (adev->powerplay.pp_funcs->print_clock_levels) > + return amdgpu_dpm_print_clock_levels(adev, PP_MCLK, > buf); > + else > + return snprintf(buf, PAGE_SIZE, "\n"); > } > > static ssize_t amdgpu_set_pp_dpm_mclk(struct device *dev, > @@ -465,11 +444,9 @@ static ssize_t amdgpu_set_pp_dpm_mclk(struct > device *dev, > } > mask |= 1 << level; > } > - > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->force_clock_level) > amdgpu_dpm_force_clock_level(adev, PP_MCLK, mask); > - else if (adev->pm.funcs->force_clock_level) > - adev->pm.funcs->force_clock_level(adev, PP_MCLK, mask); > + > fail: > return count; > } > @@ -480,14 +457,11 @@ static ssize_t amdgpu_get_pp_dpm_pcie(struct > device *dev, > { > struct drm_device *ddev = dev_get_drvdata(dev); > struct amdgpu_device *adev = ddev->dev_private; > - ssize_t size = 0; > - > - if (adev->pp_enabled) > - size = amdgpu_dpm_print_clock_levels(adev, PP_PCIE, buf); > - else if (adev->pm.funcs->print_clock_levels) > - size = adev->pm.funcs->print_clock_levels(adev, PP_PCIE, > buf); > > - return size; > + if (adev->powerplay.pp_funcs->print_clock_levels) > + return amdgpu_dpm_print_clock_levels(adev, PP_PCIE, > buf); > + else > + return snprintf(buf, PAGE_SIZE, "\n"); > } > > static ssize_t amdgpu_set_pp_dpm_pcie(struct device *dev, > @@ -515,11 +489,9 @@ static ssize_t amdgpu_set_pp_dpm_pcie(struct > device *dev, > } > mask |= 1 << level; > } > - > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->force_clock_level) > amdgpu_dpm_force_clock_level(adev, PP_PCIE, mask); > - else if (adev->pm.funcs->force_clock_level) > - adev->pm.funcs->force_clock_level(adev, PP_PCIE, mask); > + > fail: > return count; > } > @@ -532,10 +504,8 @@ static ssize_t amdgpu_get_pp_sclk_od(struct device > *dev, > struct amdgpu_device *adev = ddev->dev_private; > uint32_t value = 0; > > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->get_sclk_od) > value = amdgpu_dpm_get_sclk_od(adev); > - else if (adev->pm.funcs->get_sclk_od) > - value = adev->pm.funcs->get_sclk_od(adev); > > return snprintf(buf, PAGE_SIZE, "%d\n", value); > } > @@ -556,12 +526,12 @@ static ssize_t amdgpu_set_pp_sclk_od(struct > device *dev, > count = -EINVAL; > goto fail; > } > + if (adev->powerplay.pp_funcs->set_sclk_od) > + amdgpu_dpm_set_sclk_od(adev, (uint32_t)value); > > if (adev->pp_enabled) { > - amdgpu_dpm_set_sclk_od(adev, (uint32_t)value); > amdgpu_dpm_dispatch_task(adev, > AMD_PP_TASK_READJUST_POWER_STATE, NULL, NULL); > - } else if (adev->pm.funcs->set_sclk_od) { > - adev->pm.funcs->set_sclk_od(adev, (uint32_t)value); > + } else { > adev->pm.dpm.current_ps = adev->pm.dpm.boot_ps; > amdgpu_pm_compute_clocks(adev); > } > @@ -578,10 +548,8 @@ static ssize_t amdgpu_get_pp_mclk_od(struct > device *dev, > struct amdgpu_device *adev = ddev->dev_private; > uint32_t value = 0; > > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->get_mclk_od) > value = amdgpu_dpm_get_mclk_od(adev); > - else if (adev->pm.funcs->get_mclk_od) > - value = adev->pm.funcs->get_mclk_od(adev); > > return snprintf(buf, PAGE_SIZE, "%d\n", value); > } > @@ -602,12 +570,12 @@ static ssize_t amdgpu_set_pp_mclk_od(struct > device *dev, > count = -EINVAL; > goto fail; > } > + if (adev->powerplay.pp_funcs->set_mclk_od) > + amdgpu_dpm_set_mclk_od(adev, (uint32_t)value); > > if (adev->pp_enabled) { > - amdgpu_dpm_set_mclk_od(adev, (uint32_t)value); > amdgpu_dpm_dispatch_task(adev, > AMD_PP_TASK_READJUST_POWER_STATE, NULL, NULL); > - } else if (adev->pm.funcs->set_mclk_od) { > - adev->pm.funcs->set_mclk_od(adev, (uint32_t)value); > + } else { > adev->pm.dpm.current_ps = adev->pm.dpm.boot_ps; > amdgpu_pm_compute_clocks(adev); > } > @@ -621,14 +589,11 @@ static ssize_t > amdgpu_get_pp_power_profile(struct device *dev, > { > struct drm_device *ddev = dev_get_drvdata(dev); > struct amdgpu_device *adev = ddev->dev_private; > - int ret = 0; > + int ret = 0xff; > > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->get_power_profile_state) > ret = amdgpu_dpm_get_power_profile_state( > adev, query); > - else if (adev->pm.funcs->get_power_profile_state) > - ret = adev->pm.funcs->get_power_profile_state( > - adev, query); > > if (ret) > return ret; > @@ -675,15 +640,12 @@ static ssize_t > amdgpu_set_pp_power_profile(struct device *dev, > char *sub_str, buf_cpy[128], *tmp_str; > const char delimiter[3] = {' ', '\n', '\0'}; > long int value; > - int ret = 0; > + int ret = 0xff; > > if (strncmp("reset", buf, strlen("reset")) == 0) { > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->reset_power_profile_state) > ret = amdgpu_dpm_reset_power_profile_state( > adev, request); > - else if (adev->pm.funcs->reset_power_profile_state) > - ret = adev->pm.funcs->reset_power_profile_state( > - adev, request); > if (ret) { > count = -EINVAL; > goto fail; > @@ -692,12 +654,10 @@ static ssize_t > amdgpu_set_pp_power_profile(struct device *dev, > } > > if (strncmp("set", buf, strlen("set")) == 0) { > - if (adev->pp_enabled) > + if (adev->powerplay.pp_funcs->set_power_profile_state) > ret = amdgpu_dpm_set_power_profile_state( > adev, request); > - else if (adev->pm.funcs->set_power_profile_state) > - ret = adev->pm.funcs->set_power_profile_state( > - adev, request); > + > if (ret) { > count = -EINVAL; > goto fail; > @@ -745,13 +705,8 @@ static ssize_t amdgpu_set_pp_power_profile(struct > device *dev, > > loop++; > } > - > - if (adev->pp_enabled) > - ret = amdgpu_dpm_set_power_profile_state( > - adev, request); > - else if (adev->pm.funcs->set_power_profile_state) > - ret = adev->pm.funcs->set_power_profile_state( > - adev, request); > + if (adev->powerplay.pp_funcs->set_power_profile_state) > + ret = amdgpu_dpm_set_power_profile_state(adev, > request); > > if (ret) > count = -EINVAL; > @@ -831,7 +786,7 @@ static ssize_t amdgpu_hwmon_show_temp(struct > device *dev, > (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) > return -EINVAL; > > - if (!adev->pp_enabled && !adev->pm.funcs->get_temperature) > + if (!adev->powerplay.pp_funcs->get_temperature) > temp = 0; > else > temp = amdgpu_dpm_get_temperature(adev); > @@ -862,7 +817,7 @@ static ssize_t > amdgpu_hwmon_get_pwm1_enable(struct device *dev, > struct amdgpu_device *adev = dev_get_drvdata(dev); > u32 pwm_mode = 0; > > - if (!adev->pp_enabled && !adev->pm.funcs- > >get_fan_control_mode) > + if (!adev->powerplay.pp_funcs->get_fan_control_mode) > return -EINVAL; > > pwm_mode = amdgpu_dpm_get_fan_control_mode(adev); > @@ -879,7 +834,7 @@ static ssize_t > amdgpu_hwmon_set_pwm1_enable(struct device *dev, > int err; > int value; > > - if (!adev->pp_enabled && !adev->pm.funcs- > >set_fan_control_mode) > + if (!adev->powerplay.pp_funcs->set_fan_control_mode) > return -EINVAL; > > err = kstrtoint(buf, 10, &value); > @@ -919,9 +874,11 @@ static ssize_t amdgpu_hwmon_set_pwm1(struct > device *dev, > > value = (value * 100) / 255; > > - err = amdgpu_dpm_set_fan_speed_percent(adev, value); > - if (err) > - return err; > + if (adev->powerplay.pp_funcs->set_fan_speed_percent) { > + err = amdgpu_dpm_set_fan_speed_percent(adev, value); > + if (err) > + return err; > + } > > return count; > } > @@ -932,11 +889,13 @@ static ssize_t amdgpu_hwmon_get_pwm1(struct > device *dev, > { > struct amdgpu_device *adev = dev_get_drvdata(dev); > int err; > - u32 speed; > + u32 speed = 0; > > - err = amdgpu_dpm_get_fan_speed_percent(adev, &speed); > - if (err) > - return err; > + if (adev->powerplay.pp_funcs->get_fan_speed_percent) { > + err = amdgpu_dpm_get_fan_speed_percent(adev, > &speed); > + if (err) > + return err; > + } > > speed = (speed * 255) / 100; > > @@ -949,11 +908,13 @@ static ssize_t > amdgpu_hwmon_get_fan1_input(struct device *dev, > { > struct amdgpu_device *adev = dev_get_drvdata(dev); > int err; > - u32 speed; > + u32 speed = 0; > > - err = amdgpu_dpm_get_fan_speed_rpm(adev, &speed); > - if (err) > - return err; > + if (adev->powerplay.pp_funcs->get_fan_speed_rpm) { > + err = amdgpu_dpm_get_fan_speed_rpm(adev, &speed); > + if (err) > + return err; > + } > > return sprintf(buf, "%i\n", speed); > } > @@ -1008,21 +969,21 @@ static umode_t hwmon_attributes_visible(struct > kobject *kobj, > return 0; > > /* mask fan attributes if we have no bindings for this asic to expose > */ > - if ((!adev->pm.funcs->get_fan_speed_percent && > + if ((!adev->powerplay.pp_funcs->get_fan_speed_percent && > attr == &sensor_dev_attr_pwm1.dev_attr.attr) || /* can't query > fan */ > - (!adev->pm.funcs->get_fan_control_mode && > + (!adev->powerplay.pp_funcs->get_fan_control_mode && > attr == &sensor_dev_attr_pwm1_enable.dev_attr.attr)) /* can't > query state */ > effective_mode &= ~S_IRUGO; > > - if ((!adev->pm.funcs->set_fan_speed_percent && > + if ((!adev->powerplay.pp_funcs->set_fan_speed_percent && > attr == &sensor_dev_attr_pwm1.dev_attr.attr) || /* can't > manage fan */ > - (!adev->pm.funcs->set_fan_control_mode && > + (!adev->powerplay.pp_funcs->set_fan_control_mode && > attr == &sensor_dev_attr_pwm1_enable.dev_attr.attr)) /* can't > manage state */ > effective_mode &= ~S_IWUSR; > > /* hide max/min values if we can't both query and manage the fan */ > - if ((!adev->pm.funcs->set_fan_speed_percent && > - !adev->pm.funcs->get_fan_speed_percent) && > + if ((!adev->powerplay.pp_funcs->set_fan_speed_percent && > + !adev->powerplay.pp_funcs->get_fan_speed_percent) && > (attr == &sensor_dev_attr_pwm1_max.dev_attr.attr || > attr == &sensor_dev_attr_pwm1_min.dev_attr.attr)) > return 0; > @@ -1055,7 +1016,7 @@ void amdgpu_dpm_thermal_work_handler(struct > work_struct *work) > if (!adev->pm.dpm_enabled) > return; > > - if (adev->pm.funcs->get_temperature) { > + if (adev->powerplay.pp_funcs->get_temperature) { > int temp = amdgpu_dpm_get_temperature(adev); > > if (temp < adev->pm.dpm.thermal.min_temp) > @@ -1087,7 +1048,7 @@ static struct amdgpu_ps > *amdgpu_dpm_pick_power_state(struct amdgpu_device *adev, > true : false; > > /* check if the vblank period is too short to adjust the mclk */ > - if (single_display && adev->pm.funcs->vblank_too_short) { > + if (single_display && adev->powerplay.pp_funcs- > >vblank_too_short) { > if (amdgpu_dpm_vblank_too_short(adev)) > single_display = false; > } > @@ -1216,7 +1177,7 @@ static void > amdgpu_dpm_change_power_state_locked(struct amdgpu_device *adev) > struct amdgpu_ps *ps; > enum amd_pm_state_type dpm_state; > int ret; > - bool equal; > + bool equal = false; > > /* if dpm init failed */ > if (!adev->pm.dpm_enabled) > @@ -1236,7 +1197,7 @@ static void > amdgpu_dpm_change_power_state_locked(struct amdgpu_device *adev) > else > return; > > - if (amdgpu_dpm == 1) { > + if (amdgpu_dpm == 1 && adev->powerplay.pp_funcs- > >print_power_state) { > printk("switching from power state:\n"); > amdgpu_dpm_print_power_state(adev, adev- > >pm.dpm.current_ps); > printk("switching to power state:\n"); > @@ -1244,15 +1205,17 @@ static void > amdgpu_dpm_change_power_state_locked(struct amdgpu_device *adev) > } > /* update whether vce is active */ > ps->vce_active = adev->pm.dpm.vce_active; > - > - amdgpu_dpm_display_configuration_changed(adev); > + if (adev->powerplay.pp_funcs->display_configuration_changed) > + amdgpu_dpm_display_configuration_changed(adev); > > ret = amdgpu_dpm_pre_set_power_state(adev); > if (ret) > return; > > - if ((0 != amgdpu_dpm_check_state_equal(adev, adev- > >pm.dpm.current_ps, adev->pm.dpm.requested_ps, &equal))) > - equal = false; > + if (adev->powerplay.pp_funcs->check_state_equal) { > + if (0 != amdgpu_dpm_check_state_equal(adev, adev- > >pm.dpm.current_ps, adev->pm.dpm.requested_ps, &equal)) > + equal = false; > + } > > if (equal) > return; > @@ -1263,7 +1226,7 @@ static void > amdgpu_dpm_change_power_state_locked(struct amdgpu_device *adev) > adev->pm.dpm.current_active_crtcs = adev- > >pm.dpm.new_active_crtcs; > adev->pm.dpm.current_active_crtc_count = adev- > >pm.dpm.new_active_crtc_count; > > - if (adev->pm.funcs->force_performance_level) { > + if (adev->powerplay.pp_funcs->force_performance_level) { > if (adev->pm.dpm.thermal_active) { > enum amd_dpm_forced_level level = adev- > >pm.dpm.forced_level; > /* force low perf level for thermal */ > @@ -1279,7 +1242,7 @@ static void > amdgpu_dpm_change_power_state_locked(struct amdgpu_device *adev) > > void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable) > { > - if (adev->pp_enabled || adev->pm.funcs->powergate_uvd) { > + if (adev->powerplay.pp_funcs->powergate_uvd) { > /* enable/disable UVD */ > mutex_lock(&adev->pm.mutex); > amdgpu_dpm_powergate_uvd(adev, !enable); > @@ -1301,7 +1264,7 @@ void amdgpu_dpm_enable_uvd(struct > amdgpu_device *adev, bool enable) > > void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable) > { > - if (adev->pp_enabled || adev->pm.funcs->powergate_vce) { > + if (adev->powerplay.pp_funcs->powergate_vce) { > /* enable/disable VCE */ > mutex_lock(&adev->pm.mutex); > amdgpu_dpm_powergate_vce(adev, !enable); > @@ -1336,8 +1299,7 @@ void amdgpu_pm_print_power_states(struct > amdgpu_device *adev) > { > int i; > > - if (adev->pp_enabled) > - /* TO DO */ > + if (adev->powerplay.pp_funcs->print_power_state == NULL) > return; > > for (i = 0; i < adev->pm.dpm.num_ps; i++) > @@ -1352,10 +1314,8 @@ int amdgpu_pm_sysfs_init(struct amdgpu_device > *adev) > if (adev->pm.sysfs_initialized) > return 0; > > - if (!adev->pp_enabled) { > - if (adev->pm.funcs->get_temperature == NULL) > - return 0; > - } > + if (adev->powerplay.pp_funcs->get_temperature == NULL) > + return 0; > > adev->pm.int_hwmon_dev = > hwmon_device_register_with_groups(adev->dev, > > DRIVER_NAME, adev, > @@ -1633,8 +1593,8 @@ static int amdgpu_debugfs_pm_info(struct seq_file > *m, void *data) > return amdgpu_debugfs_pm_info_pp(m, adev); > } else { > mutex_lock(&adev->pm.mutex); > - if (adev->pm.funcs- > >debugfs_print_current_performance_level) > - adev->pm.funcs- > >debugfs_print_current_performance_level(adev, m); > + if (adev->powerplay.pp_funcs- > >debugfs_print_current_performance_level) > + adev->powerplay.pp_funcs- > >debugfs_print_current_performance_level(adev, m); > else > seq_printf(m, "Debugfs support not implemented > for this asic\n"); > mutex_unlock(&adev->pm.mutex); > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c > index b0c4db8..5cd5b8e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c > @@ -87,17 +87,20 @@ static int amdgpu_pp_early_init(void *handle) > case CHIP_OLAND: > case CHIP_HAINAN: > amd_pp->ip_funcs = &si_dpm_ip_funcs; > + amd_pp->pp_funcs = &si_dpm_funcs; > break; > #endif > #ifdef CONFIG_DRM_AMDGPU_CIK > case CHIP_BONAIRE: > case CHIP_HAWAII: > amd_pp->ip_funcs = &ci_dpm_ip_funcs; > + amd_pp->pp_funcs = &ci_dpm_funcs; > break; > case CHIP_KABINI: > case CHIP_MULLINS: > case CHIP_KAVERI: > amd_pp->ip_funcs = &kv_dpm_ip_funcs; > + amd_pp->pp_funcs = &kv_dpm_funcs; > break; > #endif > default: > diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > index 95a3717..bce6db7 100644 > --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > @@ -307,7 +307,6 @@ static int ci_get_std_voltage_value_sidd(struct > amdgpu_device *adev, > static int ci_set_overdrive_target_tdp(struct amdgpu_device *adev, > u32 target_tdp); > static int ci_update_uvd_dpm(struct amdgpu_device *adev, bool gate); > -static void ci_dpm_set_dpm_funcs(struct amdgpu_device *adev); > static void ci_dpm_set_irq_funcs(struct amdgpu_device *adev); > > static PPSMC_Result amdgpu_ci_send_msg_to_smc_with_parameter(struct > amdgpu_device *adev, > @@ -6282,7 +6281,6 @@ static int ci_dpm_early_init(void *handle) > { > struct amdgpu_device *adev = (struct amdgpu_device *)handle; > > - ci_dpm_set_dpm_funcs(adev); > ci_dpm_set_irq_funcs(adev); > > return 0; > @@ -7035,7 +7033,7 @@ static int ci_dpm_read_sensor(void *handle, int > idx, > .set_powergating_state = ci_dpm_set_powergating_state, > }; > > -static const struct amd_pm_funcs ci_dpm_funcs = { > +const struct amd_pm_funcs ci_dpm_funcs = { > .get_temperature = &ci_dpm_get_temp, > .pre_set_power_state = &ci_dpm_pre_set_power_state, > .set_power_state = &ci_dpm_set_power_state, > @@ -7067,12 +7065,6 @@ static int ci_dpm_read_sensor(void *handle, int > idx, > .read_sensor = ci_dpm_read_sensor, > }; > > -static void ci_dpm_set_dpm_funcs(struct amdgpu_device *adev) > -{ > - if (adev->pm.funcs == NULL) > - adev->pm.funcs = &ci_dpm_funcs; > -} > - > static const struct amdgpu_irq_src_funcs ci_dpm_irq_funcs = { > .set = ci_dpm_set_interrupt_state, > .process = ci_dpm_process_interrupt, > diff --git a/drivers/gpu/drm/amd/amdgpu/cik_dpm.h > b/drivers/gpu/drm/amd/amdgpu/cik_dpm.h > index b1c8e7b..c7b4349 100644 > --- a/drivers/gpu/drm/amd/amdgpu/cik_dpm.h > +++ b/drivers/gpu/drm/amd/amdgpu/cik_dpm.h > @@ -26,5 +26,6 @@ > > extern const struct amd_ip_funcs ci_dpm_ip_funcs; > extern const struct amd_ip_funcs kv_dpm_ip_funcs; > - > +extern const struct amd_pm_funcs ci_dpm_funcs; > +extern const struct amd_pm_funcs kv_dpm_funcs; > #endif > diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > index 9ea251a..db560ef 100644 > --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > @@ -42,7 +42,6 @@ > #define KV_MINIMUM_ENGINE_CLOCK 800 > #define SMC_RAM_END 0x40000 > > -static void kv_dpm_set_dpm_funcs(struct amdgpu_device *adev); > static void kv_dpm_set_irq_funcs(struct amdgpu_device *adev); > static int kv_enable_nb_dpm(struct amdgpu_device *adev, > bool enable); > @@ -2961,7 +2960,6 @@ static int kv_dpm_early_init(void *handle) > { > struct amdgpu_device *adev = (struct amdgpu_device *)handle; > > - kv_dpm_set_dpm_funcs(adev); > kv_dpm_set_irq_funcs(adev); > > return 0; > @@ -3327,7 +3325,7 @@ static int kv_dpm_read_sensor(void *handle, int > idx, > .set_powergating_state = kv_dpm_set_powergating_state, > }; > > -static const struct amd_pm_funcs kv_dpm_funcs = { > +const struct amd_pm_funcs kv_dpm_funcs = { > .get_temperature = &kv_dpm_get_temp, > .pre_set_power_state = &kv_dpm_pre_set_power_state, > .set_power_state = &kv_dpm_set_power_state, > @@ -3345,12 +3343,6 @@ static int kv_dpm_read_sensor(void *handle, int > idx, > .read_sensor = &kv_dpm_read_sensor, > }; > > -static void kv_dpm_set_dpm_funcs(struct amdgpu_device *adev) > -{ > - if (adev->pm.funcs == NULL) > - adev->pm.funcs = &kv_dpm_funcs; > -} > - > static const struct amdgpu_irq_src_funcs kv_dpm_irq_funcs = { > .set = kv_dpm_set_interrupt_state, > .process = kv_dpm_process_interrupt, > diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c > b/drivers/gpu/drm/amd/amdgpu/si_dpm.c > index 6f3ab62..7d7a414 100644 > --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c > @@ -1847,7 +1847,6 @@ static int si_calculate_sclk_params(struct > amdgpu_device *adev, > > static void si_thermal_start_smc_fan_control(struct amdgpu_device *adev); > static void si_fan_ctrl_set_default_mode(struct amdgpu_device *adev); > -static void si_dpm_set_dpm_funcs(struct amdgpu_device *adev); > static void si_dpm_set_irq_funcs(struct amdgpu_device *adev); > > static struct si_power_info *si_get_pi(struct amdgpu_device *adev) > @@ -7944,7 +7943,6 @@ static int si_dpm_early_init(void *handle) > > struct amdgpu_device *adev = (struct amdgpu_device *)handle; > > - si_dpm_set_dpm_funcs(adev); > si_dpm_set_irq_funcs(adev); > return 0; > } > @@ -8062,7 +8060,7 @@ static int si_dpm_read_sensor(void *handle, int > idx, > .set_powergating_state = si_dpm_set_powergating_state, > }; > > -static const struct amd_pm_funcs si_dpm_funcs = { > +const struct amd_pm_funcs si_dpm_funcs = { > .get_temperature = &si_dpm_get_temp, > .pre_set_power_state = &si_dpm_pre_set_power_state, > .set_power_state = &si_dpm_set_power_state, > @@ -8083,12 +8081,6 @@ static int si_dpm_read_sensor(void *handle, int > idx, > .read_sensor = &si_dpm_read_sensor, > }; > > -static void si_dpm_set_dpm_funcs(struct amdgpu_device *adev) > -{ > - if (adev->pm.funcs == NULL) > - adev->pm.funcs = &si_dpm_funcs; > -} > - > static const struct amdgpu_irq_src_funcs si_dpm_irq_funcs = { > .set = si_dpm_set_interrupt_state, > .process = si_dpm_process_interrupt, > diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.h > b/drivers/gpu/drm/amd/amdgpu/si_dpm.h > index 51ce21c..9fe343d 100644 > --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.h > +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.h > @@ -246,6 +246,7 @@ enum si_display_gap > }; > > extern const struct amd_ip_funcs si_dpm_ip_funcs; > +extern const struct amd_pm_funcs si_dpm_funcs; > > struct ni_leakage_coeffients > { > -- > 1.9.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx