[PATCH] drm/amdgpu: Maintain suspend-resume call consistency in gpu recovery

Harry Wentland harry.wentland at amd.com
Thu Feb 1 20:34:54 UTC 2018



On 2018-02-01 03:02 PM, Alex Deucher wrote:
> On Thu, Feb 1, 2018 at 2:44 PM,  <mikita.lipski at amd.com> wrote:
>> From: Mikita Lipski <mikita.lipski at amd.com>
>>
>> Call dm_suspend function instead of drm_kms suspend function in
>> order to cache current state
>>
>> Call DM_resume first to restore dc hardware, then amdgpu_dm_display_resume
>> to restore dal's cached state.
> 
> We already call the IP block suspend and resume functions in
> amdgpu_device_ip_suspend() which is called by amdgpu_device_reset(),
> at least when we do a hard reset.  They will end up getting called

I missed that. I think we just need to drop the existing DC and drm_atomic_helper_* calls in amdgpu_device_gpu_recover and call amdgpu_dm_display_resume after amdgpu_device_ip_resume_phase2 in amdgpu_device_reset.

I really don't like the way we call amdgpu_dm_display_resume separately from the .resume hook now. We initially implemented it because in amdgpu_device_resume we need cursor pinning to happen before really resuming DC. Not sure if we can move the cursor pinning to before amdgpu_device_ip_resume in that function. If we can we can just move amdgpu_dm_display_resume into the proper .resume hook, and clean up both resume and gpu_recover code.

> twice in that case with this change.  Perhaps a better solution would
> be to only call the drm_atomic_helper_* functions when we have a hard
> reset rather than a soft one.

amdgpu_dm_display_resume will already call the drm_atomic_helper_ functions. We should really call them in gpu_recover, unless we need to re-apply the state on a soft reset, but then we probably want to block this call from a hard reset.

Harry

> 
> Alex
> 
> 
>>
>> Signed-off-by: Mikita Lipski <mikita.lipski at amd.com>
>> ---
>>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 10 ++++------
>>  1 file changed, 4 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> index 850453e..b55c929 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -2616,7 +2616,6 @@ static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
>>  int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>                               struct amdgpu_job *job, bool force)
>>  {
>> -       struct drm_atomic_state *state = NULL;
>>         uint64_t reset_flags = 0;
>>         int i, r, resched;
>>
>> @@ -2640,9 +2639,9 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>         /* block TTM */
>>         resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);
>>         /* store modesetting */
>> -       if (amdgpu_device_has_dc_support(adev))
>> -               state = drm_atomic_helper_suspend(adev->ddev);
>> -
>> +       if (amdgpu_device_has_dc_support(adev)){
>> +               adev->ip_blocks[5].version->funcs->suspend(adev);
>> +       }
>>         /* block scheduler */
>>         for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
>>                 struct amdgpu_ring *ring = adev->rings[i];
>> @@ -2727,8 +2726,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>         }
>>
>>         if (amdgpu_device_has_dc_support(adev)) {
>> -               if (drm_atomic_helper_resume(adev->ddev, state))
>> -                       dev_info(adev->dev, "drm resume failed:%d\n", r);
>> +               adev->ip_blocks[5].version->funcs->resume(adev);
>>                 amdgpu_dm_display_resume(adev);
>>         } else {
>>                 drm_helper_resume_force_mode(adev->ddev);
>> --
>> 2.7.4
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> _______________________________________________
> 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