[Intel-gfx] [PATCH v3 3/5] drm/i915/mtl: make IRQ reset and postinstall multi-gt aware
Matt Roper
matthew.d.roper at intel.com
Tue Mar 7 00:24:31 UTC 2023
On Mon, Mar 06, 2023 at 04:14:49PM -0800, Sripada, Radhakrishna wrote:
> +Daniele,
>
> Hi Matt,
>
> > -----Original Message-----
> > From: Roper, Matthew D <matthew.d.roper at intel.com>
> > Sent: Monday, March 6, 2023 2:55 PM
> > To: Sripada, Radhakrishna <radhakrishna.sripada at intel.com>
> > Cc: intel-gfx at lists.freedesktop.org; De Marchi, Lucas
> > <lucas.demarchi at intel.com>; Zanoni, Paulo R <paulo.r.zanoni at intel.com>
> > Subject: Re: [Intel-gfx] [PATCH v3 3/5] drm/i915/mtl: make IRQ reset and
> > postinstall multi-gt aware
> >
> > On Wed, Mar 01, 2023 at 12:10:51PM -0800, Radhakrishna Sripada wrote:
> > > Irq reset and post install are to be made multi-gt aware for the
> > > interrupts to work for the media tile on Meteorlake. Iterate through
> > > all the gts to process irq reset for each gt.
> >
> > I think I mentioned on the previous version, but this isn't right. MTL
> > does not have separate interrupt registers for each GT the way
> > multi-tile platforms like PVC do. The GT interrupt registers you're
> > handling here are in the sgunit so there's only a single copy of them;
> > iterating over them multiple times in a row doesn't accomplish anything.
> >
> > The media engine bits are still on the same registers as the primary GT
> > and the GSC and media GuC are new additional bits that need to be
> > handled. The necessary handling for the GSC and media GuC should have
> > already landed in a187f13d51fa ("drm/i915/guc: handle interrupts from
> > media GuC") and c07ee636901d ("drm/i915/mtl: add GSC CS interrupt
> > support"), but if there's another bit that was missed somewhere (or if
> > we were doing something like looking at the wrong intel_gt's engine mask
> > somewhere), that would need to be addressed directly rather than just
> > looping over the same IRQ registers multiple times.
>
> This patch is needed to handle media interrupts. Without this patch we observed
> GuC not loading/communication errors on media gt.
>
> My understanding is that Sgunit is embedded into the SAMedia block and hence need
> To be iterated over separately.
No, the sgunit is not replicated. You can confirm by just going to the
various IRQ register pages in the bspec...there's only a single register
offset rather than (offset) and (offset+0x380000) like there are for GT
GSI registers. The i915 code also only adds the GSI offset to register
operations in the 0x0 - 0x40000 range.
Matt
>
> Daniele,
> Can you confirm if that is accurate.
>
> Thanks,
> RK
> >
> >
> > Matt
> >
> > >
> > > Based on original version by Paulo and Tvrtko
> > >
> > > Cc: Paulo Zanoni <paulo.r.zanoni at intel.com>
> > > Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> > > Reviewed-by: Lucas De Marchi <lucas.demarchi at intel.com>
> > > Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada at intel.com>
> > > ---
> > > drivers/gpu/drm/i915/i915_irq.c | 30 ++++++++++++++++++------------
> > > 1 file changed, 18 insertions(+), 12 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> > > index 417c981e4968..9377f59c1ac2 100644
> > > --- a/drivers/gpu/drm/i915/i915_irq.c
> > > +++ b/drivers/gpu/drm/i915/i915_irq.c
> > > @@ -2759,16 +2759,19 @@ static void gen11_irq_reset(struct
> > drm_i915_private *dev_priv)
> > >
> > > static void dg1_irq_reset(struct drm_i915_private *dev_priv)
> > > {
> > > - struct intel_gt *gt = to_gt(dev_priv);
> > > - struct intel_uncore *uncore = gt->uncore;
> > > + struct intel_gt *gt;
> > > + unsigned int i;
> > >
> > > dg1_master_intr_disable(dev_priv->uncore.regs);
> > >
> > > - gen11_gt_irq_reset(gt);
> > > - gen11_display_irq_reset(dev_priv);
> > > + for_each_gt(gt, dev_priv, i) {
> > > + gen11_gt_irq_reset(gt);
> > >
> > > - GEN3_IRQ_RESET(uncore, GEN11_GU_MISC_);
> > > - GEN3_IRQ_RESET(uncore, GEN8_PCU_);
> > > + GEN3_IRQ_RESET(gt->uncore, GEN11_GU_MISC_);
> > > + GEN3_IRQ_RESET(gt->uncore, GEN8_PCU_);
> > > + }
> > > +
> > > + gen11_display_irq_reset(dev_priv);
> > > }
> > >
> > > void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv,
> > > @@ -3422,13 +3425,16 @@ static void gen11_irq_postinstall(struct
> > drm_i915_private *dev_priv)
> > >
> > > static void dg1_irq_postinstall(struct drm_i915_private *dev_priv)
> > > {
> > > - struct intel_gt *gt = to_gt(dev_priv);
> > > - struct intel_uncore *uncore = gt->uncore;
> > > u32 gu_misc_masked = GEN11_GU_MISC_GSE;
> > > + struct intel_gt *gt;
> > > + unsigned int i;
> > >
> > > - gen11_gt_irq_postinstall(gt);
> > > + for_each_gt(gt, dev_priv, i) {
> > > + gen11_gt_irq_postinstall(gt);
> > >
> > > - GEN3_IRQ_INIT(uncore, GEN11_GU_MISC_, ~gu_misc_masked,
> > gu_misc_masked);
> > > + GEN3_IRQ_INIT(gt->uncore, GEN11_GU_MISC_,
> > ~gu_misc_masked,
> > > + gu_misc_masked);
> > > + }
> > >
> > > if (HAS_DISPLAY(dev_priv)) {
> > > icp_irq_postinstall(dev_priv);
> > > @@ -3437,8 +3443,8 @@ static void dg1_irq_postinstall(struct
> > drm_i915_private *dev_priv)
> > > GEN11_DISPLAY_IRQ_ENABLE);
> > > }
> > >
> > > - dg1_master_intr_enable(uncore->regs);
> > > - intel_uncore_posting_read(uncore, DG1_MSTR_TILE_INTR);
> > > + dg1_master_intr_enable(to_gt(dev_priv)->uncore->regs);
> > > + intel_uncore_posting_read(to_gt(dev_priv)->uncore,
> > DG1_MSTR_TILE_INTR);
> > > }
> > >
> > > static void cherryview_irq_postinstall(struct drm_i915_private *dev_priv)
> > > --
> > > 2.34.1
> > >
> >
> > --
> > Matt Roper
> > Graphics Software Engineer
> > Linux GPU Platform Enablement
> > Intel Corporation
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-gfx
mailing list