On Mon, Jun 4, 2018 at 4:48 AM, Rex Zhu <Rex.Zhu at amd.com> wrote: > 1. move ac_power to struct pm from dpm, so can be shared with powerplay > 2. remove power_source in powerplay, use adev->pm.ac_power instand. > 3. update ac_power before dispatch power task. > > Signed-off-by: Rex Zhu <Rex.Zhu at amd.com> Reviewed-by: Alex Deucher <alexander.deucher at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 21 +++++++------ > drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 12 ++++---- > drivers/gpu/drm/amd/amdgpu/kv_dpm.c | 2 +- > drivers/gpu/drm/amd/amdgpu/si_dpm.c | 4 +-- > drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c | 1 - > drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 6 ++-- > drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 5 +-- > drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 2 -- > .../gpu/drm/amd/powerplay/inc/pp_power_source.h | 36 ---------------------- > 10 files changed, 27 insertions(+), 64 deletions(-) > delete mode 100644 drivers/gpu/drm/amd/powerplay/inc/pp_power_source.h > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > index dd6203a..9acfbee 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > @@ -402,7 +402,6 @@ struct amdgpu_dpm { > u32 tdp_adjustment; > u16 load_line_slope; > bool power_control; > - bool ac_power; > /* special states active */ > bool thermal_active; > bool uvd_active; > @@ -439,6 +438,7 @@ struct amdgpu_pm { > struct amd_pp_display_configuration pm_display_cfg;/* set by dc */ > uint32_t smu_prv_buffer_size; > struct amdgpu_bo *smu_prv_buffer; > + bool ac_power; > }; > > #define R600_SSTU_DFLT 0 > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > index b455da4..1c49103 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > @@ -68,11 +68,11 @@ void amdgpu_pm_acpi_event_handler(struct amdgpu_device *adev) > if (adev->pm.dpm_enabled) { > mutex_lock(&adev->pm.mutex); > if (power_supply_is_system_supplied() > 0) > - adev->pm.dpm.ac_power = true; > + adev->pm.ac_power = true; > else > - adev->pm.dpm.ac_power = false; > + adev->pm.ac_power = false; > if (adev->powerplay.pp_funcs->enable_bapm) > - amdgpu_dpm_enable_bapm(adev, adev->pm.dpm.ac_power); > + amdgpu_dpm_enable_bapm(adev, adev->pm.ac_power); > mutex_unlock(&adev->pm.mutex); > } > } > @@ -1878,6 +1878,14 @@ void amdgpu_pm_compute_clocks(struct amdgpu_device *adev) > amdgpu_fence_wait_empty(ring); > } > > + mutex_lock(&adev->pm.mutex); > + /* update battery/ac status */ > + if (power_supply_is_system_supplied() > 0) > + adev->pm.ac_power = true; > + else > + adev->pm.ac_power = false; > + mutex_unlock(&adev->pm.mutex); > + > if (adev->powerplay.pp_funcs->dispatch_tasks) { > if (!amdgpu_device_has_dc_support(adev)) { > mutex_lock(&adev->pm.mutex); > @@ -1898,14 +1906,7 @@ void amdgpu_pm_compute_clocks(struct amdgpu_device *adev) > } else { > mutex_lock(&adev->pm.mutex); > amdgpu_dpm_get_active_displays(adev); > - /* update battery/ac status */ > - if (power_supply_is_system_supplied() > 0) > - adev->pm.dpm.ac_power = true; > - else > - adev->pm.dpm.ac_power = false; > - > amdgpu_dpm_change_power_state_locked(adev); > - > mutex_unlock(&adev->pm.mutex); > } > } > diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > index a266dcf..b6248c0 100644 > --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > @@ -951,12 +951,12 @@ static void ci_apply_state_adjust_rules(struct amdgpu_device *adev, > else > pi->battery_state = false; > > - if (adev->pm.dpm.ac_power) > + if (adev->pm.ac_power) > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac; > else > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_dc; > > - if (adev->pm.dpm.ac_power == false) { > + if (adev->pm.ac_power == false) { > for (i = 0; i < ps->performance_level_count; i++) { > if (ps->performance_levels[i].mclk > max_limits->mclk) > ps->performance_levels[i].mclk = max_limits->mclk; > @@ -4078,7 +4078,7 @@ static int ci_enable_uvd_dpm(struct amdgpu_device *adev, bool enable) > const struct amdgpu_clock_and_voltage_limits *max_limits; > int i; > > - if (adev->pm.dpm.ac_power) > + if (adev->pm.ac_power) > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac; > else > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_dc; > @@ -4127,7 +4127,7 @@ static int ci_enable_vce_dpm(struct amdgpu_device *adev, bool enable) > const struct amdgpu_clock_and_voltage_limits *max_limits; > int i; > > - if (adev->pm.dpm.ac_power) > + if (adev->pm.ac_power) > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac; > else > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_dc; > @@ -4160,7 +4160,7 @@ static int ci_enable_samu_dpm(struct amdgpu_device *adev, bool enable) > const struct amdgpu_clock_and_voltage_limits *max_limits; > int i; > > - if (adev->pm.dpm.ac_power) > + if (adev->pm.ac_power) > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac; > else > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_dc; > @@ -4191,7 +4191,7 @@ static int ci_enable_acp_dpm(struct amdgpu_device *adev, bool enable) > const struct amdgpu_clock_and_voltage_limits *max_limits; > int i; > > - if (adev->pm.dpm.ac_power) > + if (adev->pm.ac_power) > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac; > else > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_dc; > diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > index 17f7f07..d79e6f5 100644 > --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > @@ -1921,7 +1921,7 @@ static int kv_dpm_set_power_state(void *handle) > int ret; > > if (pi->bapm_enable) { > - ret = amdgpu_kv_smc_bapm_enable(adev, adev->pm.dpm.ac_power); > + ret = amdgpu_kv_smc_bapm_enable(adev, adev->pm.ac_power); > if (ret) { > DRM_ERROR("amdgpu_kv_smc_bapm_enable failed\n"); > return ret; > diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c b/drivers/gpu/drm/amd/amdgpu/si_dpm.c > index b12d7c9..9567dd0 100644 > --- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c > @@ -3480,7 +3480,7 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev, > disable_sclk_switching = true; > } > > - if (adev->pm.dpm.ac_power) > + if (adev->pm.ac_power) > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_ac; > else > max_limits = &adev->pm.dpm.dyn_state.max_clock_voltage_on_dc; > @@ -3489,7 +3489,7 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev, > if (ps->performance_levels[i].vddc > ps->performance_levels[i+1].vddc) > ps->performance_levels[i].vddc = ps->performance_levels[i+1].vddc; > } > - if (adev->pm.dpm.ac_power == false) { > + if (adev->pm.ac_power == false) { > for (i = 0; i < ps->performance_level_count; i++) { > if (ps->performance_levels[i].mclk > max_limits->mclk) > ps->performance_levels[i].mclk = max_limits->mclk; > diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c > index 7662a3f..27fd9c5 100644 > --- a/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c > +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c > @@ -81,7 +81,6 @@ int hwmgr_early_init(struct pp_hwmgr *hwmgr) > return -EINVAL; > > hwmgr->usec_timeout = AMD_MAX_USEC_TIMEOUT; > - hwmgr->power_source = PP_PowerSource_AC; > hwmgr->pp_table_version = PP_TABLE_V1; > hwmgr->dpm_level = AMD_DPM_FORCED_LEVEL_AUTO; > hwmgr->request_dpm_level = AMD_DPM_FORCED_LEVEL_AUTO; > diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c > index 428e8cf..d3649ce 100644 > --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c > +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c > @@ -2821,7 +2821,7 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, > struct pp_power_state *request_ps, > const struct pp_power_state *current_ps) > { > - > + struct amdgpu_device *adev = hwmgr->adev; > struct smu7_power_state *smu7_ps = > cast_phw_smu7_power_state(&request_ps->hardware); > uint32_t sclk; > @@ -2844,12 +2844,12 @@ static int smu7_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, > "VI should always have 2 performance levels", > ); > > - max_limits = (PP_PowerSource_AC == hwmgr->power_source) ? > + max_limits = adev->pm.ac_power ? > &(hwmgr->dyn_state.max_clock_voltage_on_ac) : > &(hwmgr->dyn_state.max_clock_voltage_on_dc); > > /* Cap clock DPM tables at DC MAX if it is in DC. */ > - if (PP_PowerSource_DC == hwmgr->power_source) { > + if (!adev->pm.ac_power) { > for (i = 0; i < smu7_ps->performance_level_count; i++) { > if (smu7_ps->performance_levels[i].memory_clock > max_limits->mclk) > smu7_ps->performance_levels[i].memory_clock = max_limits->mclk; > diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c > index dd52d7e..932ea8c 100644 > --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c > +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c > @@ -3056,6 +3056,7 @@ static int vega10_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, > struct pp_power_state *request_ps, > const struct pp_power_state *current_ps) > { > + struct amdgpu_device *adev = hwmgr->adev; > struct vega10_power_state *vega10_ps = > cast_phw_vega10_power_state(&request_ps->hardware); > uint32_t sclk; > @@ -3081,12 +3082,12 @@ static int vega10_apply_state_adjust_rules(struct pp_hwmgr *hwmgr, > if (vega10_ps->performance_level_count != 2) > pr_info("VI should always have 2 performance levels"); > > - max_limits = (PP_PowerSource_AC == hwmgr->power_source) ? > + max_limits = adev->pm.ac_power ? > &(hwmgr->dyn_state.max_clock_voltage_on_ac) : > &(hwmgr->dyn_state.max_clock_voltage_on_dc); > > /* Cap clock DPM tables at DC MAX if it is in DC. */ > - if (PP_PowerSource_DC == hwmgr->power_source) { > + if (!adev->pm.ac_power) { > for (i = 0; i < vega10_ps->performance_level_count; i++) { > if (vega10_ps->performance_levels[i].mem_clock > > max_limits->mclk) > diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h > index ddf67c8..ad0dc36 100644 > --- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h > +++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h > @@ -26,7 +26,6 @@ > #include <linux/seq_file.h> > #include "amd_powerplay.h" > #include "hardwaremanager.h" > -#include "pp_power_source.h" > #include "hwmgr_ppt.h" > #include "ppatomctrl.h" > #include "hwmgr_ppt.h" > @@ -750,7 +749,6 @@ struct pp_hwmgr { > const struct pp_table_func *pptable_func; > > struct pp_power_state *ps; > - enum pp_power_source power_source; > uint32_t num_ps; > struct pp_thermal_controller_info thermal_controller; > bool fan_ctrl_is_in_default_mode; > diff --git a/drivers/gpu/drm/amd/powerplay/inc/pp_power_source.h b/drivers/gpu/drm/amd/powerplay/inc/pp_power_source.h > deleted file mode 100644 > index b43315c..0000000 > --- a/drivers/gpu/drm/amd/powerplay/inc/pp_power_source.h > +++ /dev/null > @@ -1,36 +0,0 @@ > -/* > - * Copyright 2015 Advanced Micro Devices, Inc. > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice shall be included in > - * all copies or substantial portions of the Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR > - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > - * OTHER DEALINGS IN THE SOFTWARE. > - * > - */ > - > -#ifndef PP_POWERSOURCE_H > -#define PP_POWERSOURCE_H > - > -enum pp_power_source { > - PP_PowerSource_AC = 0, > - PP_PowerSource_DC, > - PP_PowerSource_LimitedPower, > - PP_PowerSource_LimitedPower_2, > - PP_PowerSource_Max > -}; > - > - > -#endif > -- > 1.9.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx