On Mon, Dec 30, 2019 at 5:41 AM Evan Quan <evan.quan@xxxxxxx> wrote: > > This is why those feature mask members designed for. And this > can reduce the SMU workload. > > Change-Id: I2c6e12e945508f7b2fd79bc172efa68bc6150d05 > Signed-off-by: Evan Quan <evan.quan@xxxxxxx> Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 2 +- > drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 61 +++++++++++++--------- > 2 files changed, 36 insertions(+), 27 deletions(-) > > diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > index 4b686f0af538..290976f5f6c2 100644 > --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > @@ -1313,7 +1313,7 @@ static int smu_hw_init(void *handle) > > static int smu_stop_dpms(struct smu_context *smu) > { > - return smu_send_smc_msg(smu, SMU_MSG_DisableAllSmuFeatures); > + return smu_system_features_control(smu, false); > } > > static int smu_hw_fini(void *handle) > diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c > index 962e97860fe8..e804f9854027 100644 > --- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c > +++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c > @@ -855,27 +855,33 @@ int smu_v11_0_get_enabled_mask(struct smu_context *smu, > uint32_t *feature_mask, uint32_t num) > { > uint32_t feature_mask_high = 0, feature_mask_low = 0; > + struct smu_feature *feature = &smu->smu_feature; > int ret = 0; > > if (!feature_mask || num < 2) > return -EINVAL; > > - ret = smu_send_smc_msg(smu, SMU_MSG_GetEnabledSmuFeaturesHigh); > - if (ret) > - return ret; > - ret = smu_read_smc_arg(smu, &feature_mask_high); > - if (ret) > - return ret; > + if (bitmap_empty(feature->enabled, feature->feature_num)) { > + ret = smu_send_smc_msg(smu, SMU_MSG_GetEnabledSmuFeaturesHigh); > + if (ret) > + return ret; > + ret = smu_read_smc_arg(smu, &feature_mask_high); > + if (ret) > + return ret; > > - ret = smu_send_smc_msg(smu, SMU_MSG_GetEnabledSmuFeaturesLow); > - if (ret) > - return ret; > - ret = smu_read_smc_arg(smu, &feature_mask_low); > - if (ret) > - return ret; > + ret = smu_send_smc_msg(smu, SMU_MSG_GetEnabledSmuFeaturesLow); > + if (ret) > + return ret; > + ret = smu_read_smc_arg(smu, &feature_mask_low); > + if (ret) > + return ret; > > - feature_mask[0] = feature_mask_low; > - feature_mask[1] = feature_mask_high; > + feature_mask[0] = feature_mask_low; > + feature_mask[1] = feature_mask_high; > + } else { > + bitmap_copy((unsigned long *)feature_mask, feature->enabled, > + feature->feature_num); > + } > > return ret; > } > @@ -887,21 +893,24 @@ int smu_v11_0_system_features_control(struct smu_context *smu, > uint32_t feature_mask[2]; > int ret = 0; > > - if (smu->pm_enabled) { > - ret = smu_send_smc_msg(smu, (en ? SMU_MSG_EnableAllSmuFeatures : > - SMU_MSG_DisableAllSmuFeatures)); > - if (ret) > - return ret; > - } > - > - ret = smu_feature_get_enabled_mask(smu, feature_mask, 2); > + ret = smu_send_smc_msg(smu, (en ? SMU_MSG_EnableAllSmuFeatures : > + SMU_MSG_DisableAllSmuFeatures)); > if (ret) > return ret; > > - bitmap_copy(feature->enabled, (unsigned long *)&feature_mask, > - feature->feature_num); > - bitmap_copy(feature->supported, (unsigned long *)&feature_mask, > - feature->feature_num); > + if (en) { > + ret = smu_feature_get_enabled_mask(smu, feature_mask, 2); > + if (ret) > + return ret; > + > + bitmap_copy(feature->enabled, (unsigned long *)&feature_mask, > + feature->feature_num); > + bitmap_copy(feature->supported, (unsigned long *)&feature_mask, > + feature->feature_num); > + } else { > + bitmap_zero(feature->enabled, feature->feature_num); > + bitmap_zero(feature->supported, feature->feature_num); > + } > > return ret; > } > -- > 2.24.0 > > _______________________________________________ > 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