All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: Paulo Zanoni <przanoni@gmail.com>, intel-gfx@lists.freedesktop.org
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Subject: Re: [PATCH 7/9] drm/i915: add ILK/SNB support to ivybridge_irq_handler
Date: Fri, 19 Jul 2013 16:09:41 +0300	[thread overview]
Message-ID: <87ob9y8zmy.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <1373669790-3484-1-git-send-email-przanoni@gmail.com>

Paulo Zanoni <przanoni@gmail.com> writes:

> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
>
> And then rename it to ironlake_irq_handler. Also move
> ilk_gt_irq_handler up to avoid forward declarations.
>
> In the previous patches I did small modifications to both
> ironlake_irq_handler an ivybridge_irq_handler so they became very
> similar functions. Now it should be very easy to verify that all we
> need to add ILK/SNB support is to call ilk_gt_irq_handler, call
> ilk_display_irq_handler and avoid reading pm_iir on gen 5.
>
> v2: - Rebase due to changes on the previous patches
>     - Move pm_iir to a tighter scope (Chris)
>     - Change some Gen checks for readability
>
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>

Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>

> ---
>  drivers/gpu/drm/i915/i915_irq.c | 115 +++++++++++-----------------------------
>  1 file changed, 32 insertions(+), 83 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index ba38aa8..f54a02b 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -849,6 +849,17 @@ static void ivybridge_parity_error_irq_handler(struct drm_device *dev)
>  	queue_work(dev_priv->wq, &dev_priv->l3_parity.error_work);
>  }
>  
> +static void ilk_gt_irq_handler(struct drm_device *dev,
> +			       struct drm_i915_private *dev_priv,
> +			       u32 gt_iir)
> +{
> +	if (gt_iir &
> +	    (GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT))
> +		notify_ring(dev, &dev_priv->ring[RCS]);
> +	if (gt_iir & ILK_BSD_USER_INTERRUPT)
> +		notify_ring(dev, &dev_priv->ring[VCS]);
> +}
> +
>  static void snb_gt_irq_handler(struct drm_device *dev,
>  			       struct drm_i915_private *dev_priv,
>  			       u32 gt_iir)
> @@ -1290,11 +1301,11 @@ static void ivb_display_irq_handler(struct drm_device *dev, u32 de_iir)
>  	}
>  }
>  
> -static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
> +static irqreturn_t ironlake_irq_handler(int irq, void *arg)
>  {
>  	struct drm_device *dev = (struct drm_device *) arg;
>  	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
> -	u32 de_iir, gt_iir, de_ier, pm_iir, sde_ier = 0;
> +	u32 de_iir, gt_iir, de_ier, sde_ier = 0;
>  	irqreturn_t ret = IRQ_NONE;
>  
>  	atomic_inc(&dev_priv->irq_received);
> @@ -1334,27 +1345,34 @@ static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
>  
>  	gt_iir = I915_READ(GTIIR);
>  	if (gt_iir) {
> -		snb_gt_irq_handler(dev, dev_priv, gt_iir);
> +		if (IS_GEN5(dev))
> +			ilk_gt_irq_handler(dev, dev_priv, gt_iir);
> +		else
> +			snb_gt_irq_handler(dev, dev_priv, gt_iir);
>  		I915_WRITE(GTIIR, gt_iir);
>  		ret = IRQ_HANDLED;
>  	}
>  
>  	de_iir = I915_READ(DEIIR);
>  	if (de_iir) {
> -		ivb_display_irq_handler(dev, de_iir);
> -
> +		if (INTEL_INFO(dev)->gen >= 7)
> +			ivb_display_irq_handler(dev, de_iir);
> +		else
> +			ilk_display_irq_handler(dev, de_iir);
>  		I915_WRITE(DEIIR, de_iir);
>  		ret = IRQ_HANDLED;
>  	}
>  
> -	pm_iir = I915_READ(GEN6_PMIIR);
> -	if (pm_iir) {
> -		if (IS_HASWELL(dev))
> -			hsw_pm_irq_handler(dev_priv, pm_iir);
> -		else if (pm_iir & GEN6_PM_RPS_EVENTS)
> -			gen6_rps_irq_handler(dev_priv, pm_iir);
> -		I915_WRITE(GEN6_PMIIR, pm_iir);
> -		ret = IRQ_HANDLED;
> +	if (INTEL_INFO(dev)->gen >= 6) {
> +		u32 pm_iir = I915_READ(GEN6_PMIIR);
> +		if (pm_iir) {
> +			if (IS_HASWELL(dev))
> +				hsw_pm_irq_handler(dev_priv, pm_iir);
> +			else if (pm_iir & GEN6_PM_RPS_EVENTS)
> +				gen6_rps_irq_handler(dev_priv, pm_iir);
> +			I915_WRITE(GEN6_PMIIR, pm_iir);
> +			ret = IRQ_HANDLED;
> +		}
>  	}
>  
>  	if (IS_HASWELL(dev)) {
> @@ -1374,75 +1392,6 @@ static irqreturn_t ivybridge_irq_handler(int irq, void *arg)
>  	return ret;
>  }
>  
> -static void ilk_gt_irq_handler(struct drm_device *dev,
> -			       struct drm_i915_private *dev_priv,
> -			       u32 gt_iir)
> -{
> -	if (gt_iir &
> -	    (GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT))
> -		notify_ring(dev, &dev_priv->ring[RCS]);
> -	if (gt_iir & ILK_BSD_USER_INTERRUPT)
> -		notify_ring(dev, &dev_priv->ring[VCS]);
> -}
> -
> -static irqreturn_t ironlake_irq_handler(int irq, void *arg)
> -{
> -	struct drm_device *dev = (struct drm_device *) arg;
> -	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
> -	int ret = IRQ_NONE;
> -	u32 de_iir, gt_iir, de_ier, sde_ier;
> -
> -	atomic_inc(&dev_priv->irq_received);
> -
> -	/* disable master interrupt before clearing iir  */
> -	de_ier = I915_READ(DEIER);
> -	I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
> -	POSTING_READ(DEIER);
> -
> -	/* Disable south interrupts. We'll only write to SDEIIR once, so further
> -	 * interrupts will will be stored on its back queue, and then we'll be
> -	 * able to process them after we restore SDEIER (as soon as we restore
> -	 * it, we'll get an interrupt if SDEIIR still has something to process
> -	 * due to its back queue). */
> -	sde_ier = I915_READ(SDEIER);
> -	I915_WRITE(SDEIER, 0);
> -	POSTING_READ(SDEIER);
> -
> -	gt_iir = I915_READ(GTIIR);
> -	if (gt_iir) {
> -		if (IS_GEN5(dev))
> -			ilk_gt_irq_handler(dev, dev_priv, gt_iir);
> -		else
> -			snb_gt_irq_handler(dev, dev_priv, gt_iir);
> -		I915_WRITE(GTIIR, gt_iir);
> -		ret = IRQ_HANDLED;
> -	}
> -
> -	de_iir = I915_READ(DEIIR);
> -	if (de_iir) {
> -		ilk_display_irq_handler(dev, de_iir);
> -		I915_WRITE(DEIIR, de_iir);
> -		ret = IRQ_HANDLED;
> -	}
> -
> -	if (IS_GEN6(dev)) {
> -		u32 pm_iir = I915_READ(GEN6_PMIIR);
> -		if (pm_iir) {
> -			if (pm_iir & GEN6_PM_RPS_EVENTS)
> -				gen6_rps_irq_handler(dev_priv, pm_iir);
> -			I915_WRITE(GEN6_PMIIR, pm_iir);
> -			ret = IRQ_HANDLED;
> -		}
> -	}
> -
> -	I915_WRITE(DEIER, de_ier);
> -	POSTING_READ(DEIER);
> -	I915_WRITE(SDEIER, sde_ier);
> -	POSTING_READ(SDEIER);
> -
> -	return ret;
> -}
> -
>  /**
>   * i915_error_work_func - do process context error handling work
>   * @work: work struct
> @@ -3114,7 +3063,7 @@ void intel_irq_init(struct drm_device *dev)
>  		dev_priv->display.hpd_irq_setup = i915_hpd_irq_setup;
>  	} else if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev)) {
>  		/* Share uninstall handlers with ILK/SNB */
> -		dev->driver->irq_handler = ivybridge_irq_handler;
> +		dev->driver->irq_handler = ironlake_irq_handler;
>  		dev->driver->irq_preinstall = ironlake_irq_preinstall;
>  		dev->driver->irq_postinstall = ivybridge_irq_postinstall;
>  		dev->driver->irq_uninstall = ironlake_irq_uninstall;
> -- 
> 1.8.1.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2013-07-19 13:09 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-12 19:35 [PATCH 00/10] Unify ILK/SNB/IVB/HSW IRQ vfuncs Paulo Zanoni
2013-07-12 19:35 ` [PATCH 01/10] drm/i915: kill ivybridge_irq_preinstall Paulo Zanoni
2013-07-19 12:02   ` Mika Kuoppala
2013-07-12 19:35 ` [PATCH 02/10] drm/i915: extract ilk_display_irq_handler Paulo Zanoni
2013-07-19 12:14   ` Mika Kuoppala
2013-07-19 14:24     ` Paulo Zanoni
2013-07-19 16:04       ` Daniel Vetter
2013-07-12 19:35 ` [PATCH 03/10] drm/i915: extract ivb_display_irq_handler Paulo Zanoni
2013-07-19 12:15   ` Mika Kuoppala
2013-07-12 19:35 ` [PATCH 04/10] drm/i915: don't read or write GEN6_PMIIR on Gen 5 Paulo Zanoni
2013-07-12 19:46   ` Chris Wilson
2013-07-12 22:52     ` [PATCH 4/9] " Paulo Zanoni
2013-07-19 12:18       ` Mika Kuoppala
2013-07-12 19:35 ` [PATCH 05/10] drm/i915: reorganize ironlake_irq_handler Paulo Zanoni
2013-07-12 19:48   ` Chris Wilson
2013-07-12 22:54     ` [PATCH 5/9] " Paulo Zanoni
2013-07-19 12:35       ` Mika Kuoppala
2013-07-12 19:35 ` [PATCH 06/10] drm/i915: POSTING_READ(DEIER) on ivybridge_irq_handler Paulo Zanoni
2013-07-19 12:54   ` Mika Kuoppala
2013-07-12 19:35 ` [PATCH 07/10] drm/i915: add ILK/SNB support to ivybridge_irq_handler Paulo Zanoni
2013-07-12 22:56   ` [PATCH 7/9] " Paulo Zanoni
2013-07-19 13:09     ` Mika Kuoppala [this message]
2013-07-12 19:35 ` [PATCH 08/10] drm/i915: kill ivybridge_enable_vblank Paulo Zanoni
2013-07-12 19:50   ` Chris Wilson
2013-07-12 23:00     ` [PATCH 8/9] drm/i915: kill Ivybridge vblank irq vfuncs Paulo Zanoni
2013-07-19 13:30       ` Mika Kuoppala
2013-07-12 19:35 ` [PATCH 09/10] drm/i915: kill ivybridge_disable_vblank Paulo Zanoni
2013-07-12 19:35 ` [PATCH 10/10] drm/i915: kill ivybridge_irq_postinstall Paulo Zanoni
2013-07-12 19:52   ` Chris Wilson
2013-07-12 23:01     ` [PATCH 9/9] " Paulo Zanoni
2013-07-19 13:44       ` Mika Kuoppala
2013-07-19 16:11         ` Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ob9y8zmy.fsf@gaia.fi.intel.com \
    --to=mika.kuoppala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=paulo.r.zanoni@intel.com \
    --cc=przanoni@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.