From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [RFC 7/8] drm/i915: Start the conversion from passing intel_irq instead of dev_priv/i915
Date: Thu, 18 Apr 2019 13:53:46 -0700 [thread overview]
Message-ID: <20190418205347.6402-8-rodrigo.vivi@intel.com> (raw)
In-Reply-To: <20190418205347.6402-1-rodrigo.vivi@intel.com>
Now that we are free from passing uncore around let's free ourselves
from passing the whole i915 reference and only passing the struct
with all information that we need for handling the interrupts.
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/i915_irq.c | 57 +++++++++++++++++----------------
1 file changed, 29 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 27cae1e7f2cc..f142fe23bf10 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -293,17 +293,17 @@ void i915_hotplug_interrupt_update(struct drm_i915_private *dev_priv,
}
static u32
-gen11_gt_engine_identity(struct drm_i915_private * const i915,
+gen11_gt_engine_identity(struct intel_irq * const irq,
const unsigned int bank, const unsigned int bit);
-static bool gen11_reset_one_iir(struct drm_i915_private * const i915,
+static bool gen11_reset_one_iir(struct intel_irq * const irq,
const unsigned int bank,
const unsigned int bit)
{
- void __iomem * const regs = i915->uncore.regs;
+ void __iomem * const regs = irq->uncore->regs;
u32 dw;
- lockdep_assert_held(&i915->irq.lock);
+ lockdep_assert_held(&irq->lock);
dw = raw_reg_read(regs, GEN11_GT_INTR_DW(bank));
if (dw & BIT(bit)) {
@@ -311,7 +311,7 @@ static bool gen11_reset_one_iir(struct drm_i915_private * const i915,
* According to the BSpec, DW_IIR bits cannot be cleared without
* first servicing the Selector & Shared IIR registers.
*/
- gen11_gt_engine_identity(i915, bank, bit);
+ gen11_gt_engine_identity(irq, bank, bit);
/*
* We locked GT INT DW by reading it. If we want to (try
@@ -516,7 +516,7 @@ void gen11_reset_rps_interrupts(struct drm_i915_private *dev_priv)
{
spin_lock_irq(&dev_priv->irq.lock);
- while (gen11_reset_one_iir(dev_priv, 0, GEN11_GTPM))
+ while (gen11_reset_one_iir(&dev_priv->irq, 0, GEN11_GTPM))
;
dev_priv->irq.pm_iir = 0;
@@ -543,7 +543,7 @@ void gen6_enable_rps_interrupts(struct drm_i915_private *dev_priv)
WARN_ON_ONCE(irq->pm_iir);
if (INTEL_GEN(dev_priv) >= 11)
- WARN_ON_ONCE(gen11_reset_one_iir(dev_priv, 0, GEN11_GTPM));
+ WARN_ON_ONCE(gen11_reset_one_iir(&dev_priv->irq, 0, GEN11_GTPM));
else
WARN_ON_ONCE(I915_READ(gen6_pm_iir(dev_priv)) & dev_priv->pm_rps_events);
@@ -1841,10 +1841,10 @@ static void i9xx_pipe_crc_irq_handler(struct drm_i915_private *dev_priv,
/* The RPS events need forcewake, so we add them to a work queue and mask their
* IMR bits until the work is done. Other interrupts can be processed without
* the work queue. */
-static void gen11_rps_irq_handler(struct drm_i915_private *i915, u32 pm_iir)
+static void gen11_rps_irq_handler(struct intel_irq *irq, u32 pm_iir)
{
+ struct drm_i915_private *i915 = uncore_to_i915(irq->uncore);
struct intel_rps *rps = &i915->gt_pm.rps;
- struct intel_irq *irq = &i915->irq;
const u32 events = i915->pm_rps_events & pm_iir;
lockdep_assert_held(&i915->irq.lock);
@@ -2977,14 +2977,14 @@ static irqreturn_t gen8_irq_handler(int irq, void *arg)
}
static u32
-gen11_gt_engine_identity(struct drm_i915_private * const i915,
+gen11_gt_engine_identity(struct intel_irq * const irq,
const unsigned int bank, const unsigned int bit)
{
- void __iomem * const regs = i915->uncore.regs;
+ void __iomem * const regs = irq->uncore->regs;
u32 timeout_ts;
u32 ident;
- lockdep_assert_held(&i915->irq.lock);
+ lockdep_assert_held(&irq->lock);
raw_reg_write(regs, GEN11_IIR_REG_SELECTOR(bank), BIT(bit));
@@ -3011,20 +3011,21 @@ gen11_gt_engine_identity(struct drm_i915_private * const i915,
}
static void
-gen11_other_irq_handler(struct drm_i915_private * const i915,
+gen11_other_irq_handler(struct intel_irq * const irq,
const u8 instance, const u16 iir)
{
if (instance == OTHER_GTPM_INSTANCE)
- return gen11_rps_irq_handler(i915, iir);
+ return gen11_rps_irq_handler(irq, iir);
WARN_ONCE(1, "unhandled other interrupt instance=0x%x, iir=0x%x\n",
instance, iir);
}
static void
-gen11_engine_irq_handler(struct drm_i915_private * const i915,
+gen11_engine_irq_handler(struct intel_irq * const irq,
const u8 class, const u8 instance, const u16 iir)
{
+ struct drm_i915_private *i915 = uncore_to_i915(irq->uncore);
struct intel_engine_cs *engine;
if (instance <= MAX_ENGINE_INSTANCE)
@@ -3040,7 +3041,7 @@ gen11_engine_irq_handler(struct drm_i915_private * const i915,
}
static void
-gen11_gt_identity_handler(struct drm_i915_private * const i915,
+gen11_gt_identity_handler(struct intel_irq * const irq,
const u32 identity)
{
const u8 class = GEN11_INTR_ENGINE_CLASS(identity);
@@ -3051,31 +3052,31 @@ gen11_gt_identity_handler(struct drm_i915_private * const i915,
return;
if (class <= COPY_ENGINE_CLASS)
- return gen11_engine_irq_handler(i915, class, instance, intr);
+ return gen11_engine_irq_handler(irq, class, instance, intr);
if (class == OTHER_CLASS)
- return gen11_other_irq_handler(i915, instance, intr);
+ return gen11_other_irq_handler(irq, instance, intr);
WARN_ONCE(1, "unknown interrupt class=0x%x, instance=0x%x, intr=0x%x\n",
class, instance, intr);
}
static void
-gen11_gt_bank_handler(struct drm_i915_private * const i915,
+gen11_gt_bank_handler(struct intel_irq * const irq,
const unsigned int bank)
{
- void __iomem * const regs = i915->uncore.regs;
+ void __iomem * const regs = irq->uncore->regs;
unsigned long intr_dw;
unsigned int bit;
- lockdep_assert_held(&i915->irq.lock);
+ lockdep_assert_held(&irq->lock);
intr_dw = raw_reg_read(regs, GEN11_GT_INTR_DW(bank));
for_each_set_bit(bit, &intr_dw, 32) {
- const u32 ident = gen11_gt_engine_identity(i915, bank, bit);
+ const u32 ident = gen11_gt_engine_identity(irq, bank, bit);
- gen11_gt_identity_handler(i915, ident);
+ gen11_gt_identity_handler(irq, ident);
}
/* Clear must be after shared has been served for engine */
@@ -3083,19 +3084,19 @@ gen11_gt_bank_handler(struct drm_i915_private * const i915,
}
static void
-gen11_gt_irq_handler(struct drm_i915_private * const i915,
+gen11_gt_irq_handler(struct intel_irq * const irq,
const u32 master_ctl)
{
unsigned int bank;
- spin_lock(&i915->irq.lock);
+ spin_lock(&irq->lock);
for (bank = 0; bank < 2; bank++) {
if (master_ctl & GEN11_GT_DW_IRQ(bank))
- gen11_gt_bank_handler(i915, bank);
+ gen11_gt_bank_handler(irq, bank);
}
- spin_unlock(&i915->irq.lock);
+ spin_unlock(&irq->lock);
}
static u32
@@ -3156,7 +3157,7 @@ static irqreturn_t gen11_irq_handler(int irq, void *arg)
}
/* Find, clear, then process each source of interrupt. */
- gen11_gt_irq_handler(i915, master_ctl);
+ gen11_gt_irq_handler(&i915->irq, master_ctl);
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
if (master_ctl & GEN11_DISPLAY_IRQ) {
--
2.20.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-04-18 20:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-18 20:53 [RFC 0/8] Start some re-org around IRQ Rodrigo Vivi
2019-04-18 20:53 ` [RFC 1/8] drm/i915: Introduce intel_irq Rodrigo Vivi
2019-04-18 20:53 ` [RFC 2/8] drm/i915: Move IRQ related stuff from intel_rps to the new intel_irq Rodrigo Vivi
2019-04-18 21:15 ` Chris Wilson
2019-04-18 22:48 ` Rodrigo Vivi
2019-04-18 20:53 ` [RFC 3/8] drm/i915: Move display_irqs_enabled to intel_irq Rodrigo Vivi
2019-04-18 20:53 ` [RFC 4/8] drm/i915: Consolidated iir, imr and ier Rodrigo Vivi
2019-04-18 20:53 ` [RFC 5/8] drm/i915: Move all irq related masks to intel_irq Rodrigo Vivi
2019-04-18 20:53 ` [RFC 6/8] drm/i915: Prefer passing intel_irq instead of intel_core Rodrigo Vivi
2019-04-18 20:53 ` Rodrigo Vivi [this message]
2019-04-18 20:53 ` [RFC 8/8] drm/i915: Migrate more gen11 irq functions towards intel_irq and uncore funcs Rodrigo Vivi
2019-04-18 21:31 ` ✗ Fi.CI.SPARSE: warning for Start some re-org around IRQ Patchwork
2019-04-18 21:50 ` ✓ Fi.CI.BAT: success " Patchwork
2019-04-19 0:25 ` ✓ Fi.CI.IGT: " Patchwork
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=20190418205347.6402-8-rodrigo.vivi@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox