From: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> Signed-off-by: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> --- drivers/gpu/drm/i915/i915_drv.c | 40 ++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index c8af68227020..b7d40a9c00bf 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -68,6 +68,7 @@ #include "gt/intel_gt.h" #include "gt/intel_gt_pm.h" #include "gt/intel_rc6.h" +#include "gt/intel_gt_requests.h" #include "i915_debugfs.h" #include "i915_drv.h" @@ -1088,10 +1089,36 @@ static bool suspend_to_idle(struct drm_i915_private *dev_priv) return false; } +static int i915_gem_suspend_ppgtt_mappings(struct drm_i915_private *i915); + +static int intel_dmem_evict_buffers(struct drm_device *dev, bool in_suspend, + bool perma_pin); + static int i915_drm_prepare(struct drm_device *dev) { struct drm_i915_private *i915 = to_i915(dev); + if (HAS_LMEM(i915)) { + struct intel_gt *gt= &i915->gt; + long timeout = I915_GEM_IDLE_TIMEOUT; + int ret; + + if (intel_gt_wait_for_idle(gt, timeout) == -ETIME) { + intel_gt_set_wedged(gt); + intel_gt_retire_requests(gt); + } + + ret = intel_dmem_evict_buffers(dev, true, false); + if (ret) + return ret; + + i915_teardown_blt_windows(i915); + + ret = i915_gem_suspend_ppgtt_mappings(i915); + if (ret) + return ret; + } + /* * NB intel_display_suspend() may issue new requests after we've * ostensibly marked the GPU as ready-to-sleep here. We need to @@ -1274,7 +1301,6 @@ static int i915_drm_suspend(struct drm_device *dev) struct drm_i915_private *dev_priv = to_i915(dev); struct pci_dev *pdev = dev_priv->drm.pdev; pci_power_t opregion_target_state; - int ret = 0; disable_rpm_wakeref_asserts(&dev_priv->runtime_pm); @@ -1290,18 +1316,6 @@ static int i915_drm_suspend(struct drm_device *dev) intel_dp_mst_suspend(dev_priv); - if (HAS_LMEM(dev_priv)) { - ret = intel_dmem_evict_buffers(dev, true, false); - if (ret) - return ret; - - i915_teardown_blt_windows(dev_priv); - - ret = i915_gem_suspend_ppgtt_mappings(dev_priv); - if (ret) - return ret; - } - intel_runtime_pm_disable_interrupts(dev_priv); intel_hpd_cancel_work(dev_priv); -- 2.26.2 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel