[PATCH 16/21] drm/amdgpu: enable JPEG2.0 dpm

Leo Liu leo.liu at amd.com
Thu Nov 14 16:14:31 UTC 2019


On 2019-11-14 11:03 a.m., Alex Deucher wrote:
> On Tue, Nov 12, 2019 at 1:04 PM Leo Liu <leo.liu at amd.com> wrote:
>> By using its own enabling function
>>
>> Signed-off-by: Leo Liu <leo.liu at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c |  8 ++++++++
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_pm.h |  1 +
>>   drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c | 10 +++++++++-
>>   3 files changed, 18 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>> index f205f56e3358..b7150171e8d7 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
>> @@ -2718,6 +2718,14 @@ void amdgpu_pm_print_power_states(struct amdgpu_device *adev)
>>
>>   }
>>
>> +void amdgpu_dpm_enable_jpeg(struct amdgpu_device *adev, bool enable)
>> +{
> I would add an "if (is_support_sw_smu(adev))" check here in case this
> ever gets called on older asics.

Thanks Alex for the reviews.

I got "is_support_sw_smu()" in place in the beginning, and later has it 
removed.

because from "is_support_sw_smu",

"if (adev->asic_type == CHIP_VEGA20)
         return (amdgpu_dpm == 2) ? true : false;
else if (adev->asic_type >= CHIP_ARCTURUS)
         return true;
else
         return false;"

JPEG2.0 and above, fits >=CHIP_ARCTURUS, so always return true.

But I will add it back as you suggested, since it has no harm, also in 
case when condition changed.

Thanks again.

Leo


> Other than that, the series (with
> the v2 patches) is:
> Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
>
>> +       int ret = smu_dpm_set_power_gate(&adev->smu, AMD_IP_BLOCK_TYPE_JPEG, enable);
>> +       if (ret)
>> +               DRM_ERROR("[SW SMU]: dpm enable jpeg failed, state = %s, ret = %d. \n",
>> +                         enable ? "true" : "false", ret);
>> +}
>> +
>>   int amdgpu_pm_virt_sysfs_init(struct amdgpu_device *adev)
>>   {
>>          int ret = 0;
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.h
>> index ef31448ee8d8..3da1da277805 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.h
>> @@ -41,5 +41,6 @@ void amdgpu_pm_compute_clocks(struct amdgpu_device *adev);
>>   void amdgpu_dpm_thermal_work_handler(struct work_struct *work);
>>   void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable);
>>   void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable);
>> +void amdgpu_dpm_enable_jpeg(struct amdgpu_device *adev, bool enable);
>>
>>   #endif
>> diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
>> index 3869730b2331..a78292d84854 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c
>> @@ -333,6 +333,9 @@ static int jpeg_v2_0_start(struct amdgpu_device *adev)
>>          struct amdgpu_ring *ring = &adev->jpeg.inst->ring_dec;
>>          int r;
>>
>> +       if (adev->pm.dpm_enabled)
>> +               amdgpu_dpm_enable_jpeg(adev, true);
>> +
>>          /* disable power gating */
>>          r = jpeg_v2_0_disable_power_gating(adev);
>>          if (r)
>> @@ -388,8 +391,13 @@ static int jpeg_v2_0_stop(struct amdgpu_device *adev)
>>
>>          /* enable power gating */
>>          r = jpeg_v2_0_enable_power_gating(adev);
>> +       if (r)
>> +               return r;
>>
>> -       return r;
>> +       if (adev->pm.dpm_enabled)
>> +               amdgpu_dpm_enable_jpeg(adev, false);
>> +
>> +       return 0;
>>   }
>>
>>   /**
>> --
>> 2.17.1
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list