Commit 1813ae17 authored by Sujaritha Sundaresan's avatar Sujaritha Sundaresan Committed by Chris Wilson

drm/i915/guc: Calling guc_disable_communication in all suspend paths

This aim of this patch is to call guc_disable_communication in all
suspend paths. The reason to introduce this is to resolve a bug that
occurred due to suspend late not being called in the hibernate devices
path.

Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: default avatarSujaritha Sundaresan <sujaritha.sundaresan@intel.com>
Reviewed-by: default avatarDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190220013927.9488-3-sujaritha.sundaresan@intel.com
parent e0ad3c64
...@@ -673,7 +673,7 @@ static void reset_prepare(struct drm_i915_private *i915) ...@@ -673,7 +673,7 @@ static void reset_prepare(struct drm_i915_private *i915)
for_each_engine(engine, i915, id) for_each_engine(engine, i915, id)
reset_prepare_engine(engine); reset_prepare_engine(engine);
intel_uc_sanitize(i915); intel_uc_reset_prepare(i915);
revoke_mmaps(i915); revoke_mmaps(i915);
} }
......
...@@ -332,8 +332,6 @@ void intel_uc_sanitize(struct drm_i915_private *i915) ...@@ -332,8 +332,6 @@ void intel_uc_sanitize(struct drm_i915_private *i915)
GEM_BUG_ON(!HAS_GUC(i915)); GEM_BUG_ON(!HAS_GUC(i915));
guc_disable_communication(guc);
intel_huc_sanitize(huc); intel_huc_sanitize(huc);
intel_guc_sanitize(guc); intel_guc_sanitize(guc);
...@@ -451,6 +449,23 @@ void intel_uc_fini_hw(struct drm_i915_private *i915) ...@@ -451,6 +449,23 @@ void intel_uc_fini_hw(struct drm_i915_private *i915)
guc_disable_communication(guc); guc_disable_communication(guc);
} }
/**
* intel_uc_reset_prepare - Prepare for reset
* @i915: device private
*
* Preparing for full gpu reset.
*/
void intel_uc_reset_prepare(struct drm_i915_private *i915)
{
struct intel_guc *guc = &i915->guc;
if (!USES_GUC(i915))
return;
guc_disable_communication(guc);
intel_uc_sanitize(i915);
}
int intel_uc_suspend(struct drm_i915_private *i915) int intel_uc_suspend(struct drm_i915_private *i915)
{ {
struct intel_guc *guc = &i915->guc; struct intel_guc *guc = &i915->guc;
...@@ -468,7 +483,7 @@ int intel_uc_suspend(struct drm_i915_private *i915) ...@@ -468,7 +483,7 @@ int intel_uc_suspend(struct drm_i915_private *i915)
return err; return err;
} }
gen9_disable_guc_interrupts(i915); guc_disable_communication(guc);
return 0; return 0;
} }
...@@ -484,7 +499,7 @@ int intel_uc_resume(struct drm_i915_private *i915) ...@@ -484,7 +499,7 @@ int intel_uc_resume(struct drm_i915_private *i915)
if (guc->fw.load_status != INTEL_UC_FIRMWARE_SUCCESS) if (guc->fw.load_status != INTEL_UC_FIRMWARE_SUCCESS)
return 0; return 0;
gen9_enable_guc_interrupts(i915); guc_enable_communication(guc);
err = intel_guc_resume(guc); err = intel_guc_resume(guc);
if (err) { if (err) {
......
...@@ -38,6 +38,7 @@ int intel_uc_init_hw(struct drm_i915_private *dev_priv); ...@@ -38,6 +38,7 @@ int intel_uc_init_hw(struct drm_i915_private *dev_priv);
void intel_uc_fini_hw(struct drm_i915_private *dev_priv); void intel_uc_fini_hw(struct drm_i915_private *dev_priv);
int intel_uc_init(struct drm_i915_private *dev_priv); int intel_uc_init(struct drm_i915_private *dev_priv);
void intel_uc_fini(struct drm_i915_private *dev_priv); void intel_uc_fini(struct drm_i915_private *dev_priv);
void intel_uc_reset_prepare(struct drm_i915_private *i915);
int intel_uc_suspend(struct drm_i915_private *dev_priv); int intel_uc_suspend(struct drm_i915_private *dev_priv);
int intel_uc_resume(struct drm_i915_private *dev_priv); int intel_uc_resume(struct drm_i915_private *dev_priv);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment