> -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx] On Behalf > Of likun Gao > Sent: Tuesday, February 26, 2019 4:15 PM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Deucher, Alexander <Alexander.Deucher@xxxxxxx>; Gao, Likun > <Likun.Gao@xxxxxxx>; Huang, Ray <Ray.Huang@xxxxxxx> > Subject: [PATCH v2] drm/amd/powerplay: add limit of pp_feature for smu > (v2) > > From: Likun Gao <Likun.Gao@xxxxxxx> > > Move pp_feature from the struct of amd_powerplay to amdgpu_device. > Add pp_feature limit for overdrive interface. > > v2: put pp_feature into struct amdgpu_pm. > > Signed-off-by: Likun Gao <Likun.Gao@xxxxxxx> > Reviewed-by: Kevin Wang <kevin1.wang@xxxxxxx> > Suggested-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 - > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h | 3 +++ > drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 6 ++++-- > drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 2 +- > drivers/gpu/drm/amd/amdgpu/kv_dpm.c | 2 +- > drivers/gpu/drm/amd/amdgpu/soc15.c | 2 +- > drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 2 +- > drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 4 ++++ > drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 3 +++ > 11 files changed, 20 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > index e4ff186..5b82579 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > @@ -704,7 +704,6 @@ enum amd_hw_ip_block_type { struct > amd_powerplay { > void *pp_handle; > const struct amd_pm_funcs *pp_funcs; > - uint32_t pp_feature; > }; > > #define AMDGPU_RESET_MAGIC_NUM 64 > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index e20dce4..ec7cb627 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -1506,7 +1506,7 @@ static int amdgpu_device_ip_early_init(struct > amdgpu_device *adev) > return -EAGAIN; > } > > - adev->powerplay.pp_feature = amdgpu_pp_feature_mask; > + adev->pm.pp_feature = amdgpu_pp_feature_mask; > > for (i = 0; i < adev->num_ip_blocks; i++) { > if ((amdgpu_ip_block_mask & (1 << i)) == 0) { diff --git > a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > index 2278489..077d710 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h > @@ -445,6 +445,9 @@ struct amdgpu_pm { > uint32_t smu_prv_buffer_size; > struct amdgpu_bo *smu_prv_buffer; > bool ac_power; > + /* powerplay feature */ > + uint32_t pp_feature; > + > }; > > #define R600_SSTU_DFLT 0 > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > index 97a60da..997932e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c > @@ -390,7 +390,7 @@ void amdgpu_gfx_compute_mqd_sw_fini(struct > amdgpu_device *adev) > > void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable) { > - if (!(adev->powerplay.pp_feature & PP_GFXOFF_MASK)) > + if (!(adev->pm.pp_feature & PP_GFXOFF_MASK)) > return; > > if (!adev->powerplay.pp_funcs || !adev->powerplay.pp_funcs- > >set_powergating_by_smu) > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > index ba9a5c9..2b9bbba 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c > @@ -2557,7 +2557,8 @@ int amdgpu_pm_sysfs_init(struct amdgpu_device > *adev) > "pp_power_profile_mode\n"); > return ret; > } > - if (is_support_sw_smu(adev) || hwmgr->od_enabled) { > + if ((is_support_sw_smu(adev) && adev->smu.od_enabled) || > + (!is_support_sw_smu(adev) && hwmgr->od_enabled)) { > ret = device_create_file(adev->dev, > &dev_attr_pp_od_clk_voltage); > if (ret) { > @@ -2633,7 +2634,8 @@ void amdgpu_pm_sysfs_fini(struct amdgpu_device > *adev) > device_remove_file(adev->dev, &dev_attr_pp_mclk_od); > device_remove_file(adev->dev, > &dev_attr_pp_power_profile_mode); > - if (hwmgr->od_enabled) > + if ((is_support_sw_smu(adev) && adev->smu.od_enabled) || > + (!is_support_sw_smu(adev) && hwmgr->od_enabled)) > device_remove_file(adev->dev, > &dev_attr_pp_od_clk_voltage); > device_remove_file(adev->dev, &dev_attr_gpu_busy_percent); diff > --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > index 86e14c7..9ae65bf 100644 > --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c > @@ -5903,7 +5903,7 @@ static int ci_dpm_init(struct amdgpu_device *adev) > pi->pcie_dpm_key_disabled = 0; > pi->thermal_sclk_dpm_enabled = 0; > > - if (adev->powerplay.pp_feature & PP_SCLK_DEEP_SLEEP_MASK) > + if (adev->pm.pp_feature & PP_SCLK_DEEP_SLEEP_MASK) > pi->caps_sclk_ds = true; > else > pi->caps_sclk_ds = false; > diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > index 0c9a2c0..f2e6b14 100644 > --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c > @@ -2824,7 +2824,7 @@ static int kv_dpm_init(struct amdgpu_device *adev) > pi->caps_tcp_ramping = true; > } > > - if (adev->powerplay.pp_feature & PP_SCLK_DEEP_SLEEP_MASK) > + if (adev->pm.pp_feature & PP_SCLK_DEEP_SLEEP_MASK) > pi->caps_sclk_ds = true; > else > pi->caps_sclk_ds = false; > diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c > b/drivers/gpu/drm/amd/amdgpu/soc15.c > index ed259ae..3e22a49 100644 > --- a/drivers/gpu/drm/amd/amdgpu/soc15.c > +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c > @@ -931,7 +931,7 @@ static int soc15_common_early_init(void *handle) > adev->pg_flags = AMD_PG_SUPPORT_SDMA | > AMD_PG_SUPPORT_VCN; > } > > - if (adev->powerplay.pp_feature & PP_GFXOFF_MASK) > + if (adev->pm.pp_feature & PP_GFXOFF_MASK) > adev->pg_flags |= AMD_PG_SUPPORT_GFX_PG | > AMD_PG_SUPPORT_CP | > AMD_PG_SUPPORT_RLC_SMU_HS; > diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c > b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c > index 3f73f7c..a66917d 100644 > --- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c > +++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c > @@ -53,7 +53,7 @@ static int amd_powerplay_create(struct amdgpu_device > *adev) > mutex_init(&hwmgr->smu_lock); > hwmgr->chip_family = adev->family; > hwmgr->chip_id = adev->asic_type; > - hwmgr->feature_mask = adev->powerplay.pp_feature; > + hwmgr->feature_mask = adev->pm.pp_feature; > hwmgr->display_config = &adev->pm.pm_display_cfg; > adev->powerplay.pp_handle = hwmgr; > adev->powerplay.pp_funcs = &pp_dpm_funcs; diff --git > a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > index 792c3e1..a6bbac9 100644 > --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > @@ -282,6 +282,9 @@ static int smu_set_funcs(struct amdgpu_device > *adev) > > switch (adev->asic_type) { > case CHIP_VEGA20: > + smu->feature_mask &= ~PP_GFXOFF_MASK; > + if (smu->feature_mask & PP_OVERDRIVE_MASK) > + smu->od_enabled = true; Do we still add feature_mask in smu_context structure? How about using adev->pm.pp_feature directly here? Thanks, Ray > smu_v11_0_set_smu_funcs(smu); > break; > default: > @@ -298,6 +301,7 @@ static int smu_early_init(void *handle) > > smu->adev = adev; > mutex_init(&smu->mutex); > + smu->feature_mask = adev->pm.pp_feature; > > return smu_set_funcs(adev); > } > diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h > b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h > index b53da1a..0aa8ec2 100644 > --- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h > +++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h > @@ -384,6 +384,7 @@ struct smu_context > uint32_t pstate_sclk; > uint32_t pstate_mclk; > > + bool od_enabled; > uint32_t power_limit; > uint32_t default_power_limit; > > @@ -399,6 +400,8 @@ struct smu_context > uint32_t workload_setting[WORKLOAD_POLICY_MAX]; > uint32_t power_profile_mode; > uint32_t default_power_profile_mode; > + > + uint32_t feature_mask; > }; > > struct pptable_funcs { > -- > 2.7.4 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx