Thanks, Oak > -----Original Message----- > From: Roper, Matthew D <matthew.d.roper@xxxxxxxxx> > Sent: August 24, 2023 11:54 AM > To: Zeng, Oak <oak.zeng@xxxxxxxxx> > Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; Shyti, Andi <andi.shyti@xxxxxxxxx>; > chris.p.wilson@xxxxxxxxxxxxxxx; Das, Nirmoy <nirmoy.das@xxxxxxxxx> > Subject: Re: [PATCH 3/3] drm/i915: Enable GGTT blitting in MTL > > On Tue, Aug 22, 2023 at 11:28:59AM -0400, Oak Zeng wrote: > > From: Nirmoy Das <nirmoy.das@xxxxxxxxx> > > > > 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. Spoke with Matt offline. Will keep lineage number 13010847436. Also put a soc HSD number 14019519902 Thanks Matt for explanation! Oak > > > 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 <nirmoy.das@xxxxxxxxx> > > Signed-off-by: Oak Zeng <oak.zeng@xxxxxxxxx> > > --- > > 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