[PATCH] drm/amdpu/vce_v3: skip suspend and resume if powergated
S, Shirish
sshankar at amd.com
Fri Aug 10 07:15:01 UTC 2018
On 8/10/2018 12:02 PM, Zhu, Rex wrote:
>
> I am Ok with the check when call vce_v3_0_hw_fini.
>
>
> But we may still need to call amdpug_vce_suspend/resume.
>
Done in V2. Have moved the check such that both are executed.
Regards,
Shirish S
>
>
> and not sure whether need to do ring test when resume back.
>
>
> Best Regards
>
> Rex
>
> ------------------------------------------------------------------------
> *From:* S, Shirish
> *Sent:* Friday, August 10, 2018 2:15 PM
> *To:* Deucher, Alexander; Zhu, Rex; Liu, Leo
> *Cc:* amd-gfx at lists.freedesktop.org; S, Shirish
> *Subject:* [PATCH] drm/amdpu/vce_v3: skip suspend and resume if
> powergated
> This patch adds a mechanism by which the VCE 3.0 block
> shall check if it was enabled or in use before suspending,
> if it was powergated while entering suspend then there
> is no need to repeat it in vce_3_0_suspend().
> Similarly, if the block was powergated while entering suspend
> itself then there is no need to resume it.
>
> By this we not only make the suspend and resume sequence
> more efficient, but also optimize the overall amdgpu suspend
> and resume time by reducing the ring intialize and tests
> for unused IP blocks.
>
> Signed-off-by: Shirish S <shirish.s at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++
> drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | 21 +++++++++++++++++++++
> 2 files changed, 23 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 07924d4..aa85063 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1035,6 +1035,8 @@ struct amdgpu_device {
>
> /* vce */
> struct amdgpu_vce vce;
> + bool is_vce_pg;
> + bool is_vce_disabled;
>
> /* vcn */
> struct amdgpu_vcn vcn;
> diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
> b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
> index cc6ce6c..822cfd6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
> @@ -326,6 +326,7 @@ static int vce_v3_0_start(struct amdgpu_device *adev)
> WREG32(mmGRBM_GFX_INDEX, mmGRBM_GFX_INDEX_DEFAULT);
> mutex_unlock(&adev->grbm_idx_mutex);
>
> + adev->is_vce_pg = false;
> return 0;
> }
>
> @@ -355,6 +356,7 @@ static int vce_v3_0_stop(struct amdgpu_device *adev)
> WREG32(mmGRBM_GFX_INDEX, mmGRBM_GFX_INDEX_DEFAULT);
> mutex_unlock(&adev->grbm_idx_mutex);
>
> + adev->is_vce_pg = true;
> return 0;
> }
>
> @@ -506,6 +508,17 @@ static int vce_v3_0_suspend(void *handle)
> int r;
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> + /* Proceed with suspend sequence only if VCE is started
> + * Mark the block as being disabled if its stopped.
> + */
> + if (adev->is_vce_pg) {
> + DRM_DEBUG("VCE is already powergated, not suspending\n");
> + adev->is_vce_disabled = true;
> + return 0;
> + }
> +
> + adev->is_vce_disabled = false;
> +
> r = vce_v3_0_hw_fini(adev);
> if (r)
> return r;
> @@ -518,6 +531,14 @@ static int vce_v3_0_resume(void *handle)
> int r;
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> + /* Proceed with resume sequence if VCE was enabled
> + * while suspending.
> + */
> + if (adev->is_vce_disabled) {
> + DRM_DEBUG("VCE is powergated, not resuming the block\n");
> + return 0;
> + }
> +
> r = amdgpu_vce_resume(adev);
> if (r)
> return r;
> --
> 2.7.4
>
--
Regards,
Shirish S
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20180810/b49e4c3a/attachment-0001.html>
More information about the amd-gfx
mailing list