On Tue, Aug 22, 2023 at 11:28:59AM -0400, Oak Zeng wrote:
> From: Nirmoy Das <[email protected]>
> 
> MTL can hang because of a HW bug while parallel reading/writing
> from/to LMEM/GTTMMADR BAR so try to reduce GGTT update
> related pci transactions with blitter command as recommended
> for Wa_22018444074.

Drive-by comment:  this isn't a valid workaround number.  22018444074 is
a per-platform record number, whereas workarounds should always be
identified by their cross-platform lineage number, which will stay
constant if the workaround winds up extending to future platforms as
well.  So in this case, the workaround should be referred to as
Wa_13010847436.


Matt

> 
> To issue blitter commands, the driver must be primed to receive
> requests. Maintain blitter-based GGTT update disablement until driver
> probing completes. Moreover, implement a temporary disablement
> of blitter prior to entering suspend, followed by re-enablement
> post-resume. This is acceptable as those transition periods are
> mostly single threaded.
> 
> v2: Disable GGTT blitter prior to runtime suspend and re-enable
> after runtime resume. (Oak)
> 
> Signed-off-by: Nirmoy Das <[email protected]>
> Signed-off-by: Oak Zeng <[email protected]>
> ---
>  drivers/gpu/drm/i915/i915_driver.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_driver.c 
> b/drivers/gpu/drm/i915/i915_driver.c
> index f8dbee7a5af7..6afe0adc8ddb 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -815,6 +815,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct 
> pci_device_id *ent)
>       i915_welcome_messages(i915);
>  
>       i915->do_release = true;
> +     intel_engine_blitter_context_set_ready(to_gt(i915), true);
>  
>       return 0;
>  
> @@ -855,6 +856,7 @@ void i915_driver_remove(struct drm_i915_private *i915)
>  {
>       intel_wakeref_t wakeref;
>  
> +     intel_engine_blitter_context_set_ready(to_gt(i915), false);
>       wakeref = intel_runtime_pm_get(&i915->runtime_pm);
>  
>       i915_driver_unregister(i915);
> @@ -1077,6 +1079,8 @@ static int i915_drm_suspend(struct drm_device *dev)
>       struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
>       pci_power_t opregion_target_state;
>  
> +     intel_engine_blitter_context_set_ready(to_gt(dev_priv), false);
> +
>       disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
>  
>       /* We do a lot of poking in a lot of registers, make sure they work
> @@ -1264,6 +1268,7 @@ static int i915_drm_resume(struct drm_device *dev)
>       intel_gvt_resume(dev_priv);
>  
>       enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
> +     intel_engine_blitter_context_set_ready(to_gt(dev_priv), true);
>  
>       return 0;
>  }
> @@ -1515,6 +1520,7 @@ static int intel_runtime_suspend(struct device *kdev)
>       if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv)))
>               return -ENODEV;
>  
> +     intel_engine_blitter_context_set_ready(to_gt(dev_priv), false);
>       drm_dbg(&dev_priv->drm, "Suspending device\n");
>  
>       disable_rpm_wakeref_asserts(rpm);
> @@ -1669,6 +1675,8 @@ static int intel_runtime_resume(struct device *kdev)
>       else
>               drm_dbg(&dev_priv->drm, "Device resumed\n");
>  
> +     intel_engine_blitter_context_set_ready(to_gt(dev_priv), true);
> +
>       return ret;
>  }
>  
> -- 
> 2.26.3
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation

Reply via email to