On Thu, Feb 6, 2020 at 3:19 AM Evan Quan <evan.quan@xxxxxxx> wrote: > > SMU FW will handle the features disablement for baco reset > on Arcturus. > > Change-Id: Ifd87a09de2fca0c67c041afbd5e711973769119a > Signed-off-by: Evan Quan <evan.quan@xxxxxxx> > --- > drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 53 +++++++++++++++++----- > 1 file changed, 42 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > index 9d1075823681..efd10e6fa9ef 100644 > --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c > @@ -1467,24 +1467,39 @@ void smu_late_fini(void *handle) > smu_send_smc_msg(smu, SMU_MSG_PrepareMp1ForShutdown); > } > > -static int smu_suspend(void *handle) > +static int smu_disabled_dpms(struct smu_context *smu) > { > - int ret; > - struct amdgpu_device *adev = (struct amdgpu_device *)handle; > - struct smu_context *smu = &adev->smu; > - bool baco_feature_is_enabled = false; > + struct amdgpu_device *adev = smu->adev; > + uint32_t smu_version; > + int ret = 0; > > - if (!smu->pm_enabled) > - return 0; > + ret = smu_get_smc_version(smu, NULL, &smu_version); > + if (ret) { > + pr_err("Failed to get smu version.\n"); > + return ret; > + } > > - if(!smu->is_apu) > - baco_feature_is_enabled = smu_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT); > + /* > + * For baco reset on Arcturus, this operation > + * (disable all smu feature) will be handled by SMU FW. > + */ > + if (adev->in_gpu_reset && > + (amdgpu_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) && > + (adev->asic_type == CHIP_ARCTURUS && smu_version > 0x360e00)) > + return 0; Do we need the in_gpu_reset check here? Is there ever a case where would ever want to execute the rest of this? What if we enable BACO for power savings on arcturus? > > + /* Disable all enabled SMU features */ > ret = smu_system_features_control(smu, false); > - if (ret) > + if (ret) { > + pr_err("Failed to disable smu features.\n"); > return ret; > + } > > - if (baco_feature_is_enabled) { > + /* For baco reset, need to leave BACO feature enabled */ > + if (adev->in_gpu_reset && > + (amdgpu_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) && > + !smu->is_apu && > + smu_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT)) { This change will break BACO for power savings on navi1x. I think we can drop this hunk. > ret = smu_feature_set_enabled(smu, SMU_FEATURE_BACO_BIT, true); > if (ret) { > pr_warn("set BACO feature enabled failed, return %d\n", ret); > @@ -1492,6 +1507,22 @@ static int smu_suspend(void *handle) > } > } > > + return ret; > +} > + > +static int smu_suspend(void *handle) > +{ > + struct amdgpu_device *adev = (struct amdgpu_device *)handle; > + struct smu_context *smu = &adev->smu; > + int ret; > + > + if (!smu->pm_enabled) > + return 0; > + > + ret = smu_disabled_dpms(smu); > + if (ret) > + return ret; > + > smu->watermarks_bitmap &= ~(WATERMARKS_LOADED); > > if (adev->asic_type >= CHIP_NAVI10 && > -- > 2.25.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