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 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. 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