[PATCH 4/8] drm/i915: Add support to identify the SCDC Interrupt from IIR

Shankar, Uma uma.shankar at intel.com
Sun Mar 6 23:54:15 UTC 2022



> -----Original Message-----
> From: Shankar, Uma
> Sent: Monday, March 7, 2022 5:16 AM
> To: 'Ankit Nautiyal' <ankit.k.nautiyal at intel.com>; intel-gfx-
> trybot at lists.freedesktop.org
> Subject: RE: [PATCH 4/8] drm/i915: Add support to identify the SCDC Interrupt from
> IIR
> 
> 
> 
> > -----Original Message-----
> > From: Intel-gfx-trybot
> > <intel-gfx-trybot-bounces at lists.freedesktop.org> On Behalf Of Ankit
> > Nautiyal
> > Sent: Friday, March 4, 2022 12:22 PM
> > To: intel-gfx-trybot at lists.freedesktop.org
> > Subject: [PATCH 4/8] drm/i915: Add support to identify the SCDC
> > Interrupt from IIR
> >
> > This patch identifies the SCDC Interrupt and schedules the bottomhalf
> > by adding scdc work function in the system work queue.
> >
> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_hdmi.c | 28 ++++++++++++++++++++
> > drivers/gpu/drm/i915/display/intel_hdmi.h |  1 +
> >  drivers/gpu/drm/i915/i915_irq.c           | 32 +++++++++++++++++++++++
> >  3 files changed, 61 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c
> > b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > index 1aa5bdc7b0dc..bbbc2b63aa62 100644
> > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > @@ -3213,3 +3213,31 @@ intel_hdmi_dsc_get_bpp(int src_fractional_bpp,
> > int slice_width, int num_slices,
> >
> >  	return 0;
> >  }
> > +
> > +enum scdc_pin intel_hdmi_get_scdc_pin(struct intel_encoder *encoder) {
> > +	switch (encoder->hpd_pin) {
> > +	case HPD_PORT_A:
> > +		return SCDC_PORT_A;
> > +	case HPD_PORT_B:
> > +		return SCDC_PORT_B;
> > +	case HPD_PORT_C:
> > +		return SCDC_PORT_C;
> > +	case HPD_PORT_TC1:
> > +		return SCDC_PORT_TC1;
> > +	case HPD_PORT_TC2:
> > +		return SCDC_PORT_TC2;
> > +	case HPD_PORT_TC3:
> > +		return SCDC_PORT_TC3;
> > +	case HPD_PORT_TC4:
> > +		return SCDC_PORT_TC4;
> > +	case HPD_PORT_TC5:
> > +		return SCDC_PORT_TC5;
> > +	case HPD_PORT_TC6:
> > +		return SCDC_PORT_TC6;
> > +	default:
> > +		break;
> > +	}
> > +
> > +	return SCDC_PORT_NONE;
> 
> Is this defined, I feel you have been using SCDC_NUM_PINS here in your github
> branch.
> May be define Einval case there. You may have handled this already, just confirm and
> get this updated in the series.

Ignore the comments here, by mistake picked trybot version.

> > +}
> > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h
> > b/drivers/gpu/drm/i915/display/intel_hdmi.h
> > index 93f65a917c36..49da11b30632 100644
> > --- a/drivers/gpu/drm/i915/display/intel_hdmi.h
> > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h
> > @@ -54,5 +54,6 @@ int intel_hdmi_dsc_get_num_slices(const struct
> > intel_crtc_state *crtc_state,
> >  				  int src_max_slices, int src_max_slice_width,
> >  				  int hdmi_max_slices, int hdmi_throughput);  int
> > intel_hdmi_dsc_get_slice_height(int vactive);
> > +enum scdc_pin intel_hdmi_get_scdc_pin(struct intel_encoder *encoder);
> >
> >  #endif /* __INTEL_HDMI_H__ */
> > diff --git a/drivers/gpu/drm/i915/i915_irq.c
> > b/drivers/gpu/drm/i915/i915_irq.c index
> > 4dc2542146cd..dad32edab874 100644
> > --- a/drivers/gpu/drm/i915/i915_irq.c
> > +++ b/drivers/gpu/drm/i915/i915_irq.c
> > @@ -40,6 +40,7 @@
> >  #include "display/intel_display_types.h"
> >  #include "display/intel_fifo_underrun.h"
> >  #include "display/intel_hotplug.h"
> > +#include "display/intel_hdmi.h"
> >  #include "display/intel_lpe_audio.h"
> >  #include "display/intel_psr.h"
> >
> > @@ -1993,6 +1994,34 @@ static void cpt_irq_handler(struct
> > drm_i915_private *dev_priv, u32 pch_iir)
> >  		cpt_serr_int_handler(dev_priv);
> >  }
> >
> > +static void scdc_irq_handler(struct drm_i915_private *dev_priv, u32
> > +pch_iir) {
> > +	struct intel_encoder *encoder;
> > +	enum scdc_pin pin;
> > +	bool scdc_interrupt = false;
> > +
> > +	/*
> > +	 * Identify the port on which scdc interrupt received
> > +	 * #TODO Check if spin lock be used here before this loop to avoid
> > +	 * race condition for event_bits?
> > +	 */
> > +	for_each_intel_encoder(&dev_priv->drm, encoder) {
> > +		if (encoder->type != INTEL_OUTPUT_HDMI)
> > +			continue;
> 
> Leave a line gap
> 
> > +		pin = intel_hdmi_get_scdc_pin(encoder);
> > +		if (pin == SCDC_PORT_NONE)
> > +			continue;
> 
> Same here
> 
> > +		if (pch_iir & dev_priv->scdc_rr.scdc[pin] ||
> > +		    pch_iir & dev_priv->scdc_rr.scdc[pin]) {
> 
> This got repeated, you missed TC here.
> 
> > +			dev_priv->scdc_rr.event_bits |= pin;
> > +			scdc_interrupt = true;
> > +			break;
> > +		}
> > +	}
> 
> Leave a line gap
> 
> > +	if (scdc_interrupt)
> > +		queue_work(system_wq, &dev_priv->scdc_rr.scdc_rr_work); }
> > +
> >  static void icp_irq_handler(struct drm_i915_private *dev_priv, u32 pch_iir)  {
> >  	u32 ddi_hotplug_trigger = pch_iir & SDE_DDI_HOTPLUG_MASK_ICP; @@ -
> > 2028,6 +2057,9 @@ static void icp_irq_handler(struct drm_i915_private
> > *dev_priv,
> > u32 pch_iir)
> >
> >  	if (pch_iir & SDE_GMBUS_ICP)
> >  		gmbus_irq_handler(dev_priv);
> > +
> > +	if (pch_iir & SDE_DDI_SCDC_MASK_ICP || pch_iir &
> > SDE_TC_SCDC_MASK_ICP)
> > +		scdc_irq_handler(dev_priv, pch_iir);
> >  }
> >
> >  static void spt_irq_handler(struct drm_i915_private *dev_priv, u32
> > pch_iir)
> > --
> > 2.25.1



More information about the Intel-gfx-trybot mailing list