Message ID | 20190325214940.23632-4-daniele.ceraolospurio@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | more uncore rework | expand |
Em seg, 2019-03-25 às 14:49 -0700, Daniele Ceraolo Spurio escreveu: > Save the HW capabilities to avoid having to jump back to dev_priv > every time. > Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> > Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> > --- > drivers/gpu/drm/i915/i915_drv.c | 4 +- > drivers/gpu/drm/i915/intel_display.c | 2 +- > drivers/gpu/drm/i915/intel_hangcheck.c | 2 +- > drivers/gpu/drm/i915/intel_uncore.c | 57 ++++++++++--------- > drivers/gpu/drm/i915/intel_uncore.h | 7 ++- > drivers/gpu/drm/i915/selftests/intel_uncore.c | 15 ++--- > 6 files changed, 47 insertions(+), 40 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index 5465b99b4392..85e80701a4c6 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -2854,7 +2854,7 @@ static int intel_runtime_suspend(struct device *kdev) > enable_rpm_wakeref_asserts(dev_priv); > intel_runtime_pm_cleanup(dev_priv); > > - if (intel_uncore_arm_unclaimed_mmio_detection(dev_priv)) > + if (intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore)) > DRM_ERROR("Unclaimed access detected prior to suspending\n"); > > dev_priv->runtime_pm.suspended = true; > @@ -2908,7 +2908,7 @@ static int intel_runtime_resume(struct device *kdev) > > intel_opregion_notify_adapter(dev_priv, PCI_D0); > dev_priv->runtime_pm.suspended = false; > - if (intel_uncore_unclaimed_mmio(dev_priv)) > + if (intel_uncore_unclaimed_mmio(&dev_priv->uncore)) > DRM_DEBUG_DRIVER("Unclaimed access during suspend, bios?\n"); > > if (INTEL_GEN(dev_priv) >= 11) { > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 008560ef4db0..9a9b78c120b1 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -13533,7 +13533,7 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) > * so enable debugging for the next modeset - and hope we catch > * the culprit. > */ > - intel_uncore_arm_unclaimed_mmio_detection(dev_priv); > + intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore); > intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET, wakeref); > } > > diff --git a/drivers/gpu/drm/i915/intel_hangcheck.c b/drivers/gpu/drm/i915/intel_hangcheck.c > index 57ed49dc19c4..125662c64934 100644 > --- a/drivers/gpu/drm/i915/intel_hangcheck.c > +++ b/drivers/gpu/drm/i915/intel_hangcheck.c > @@ -270,7 +270,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work) > * periodically arm the mmio checker to see if we are triggering > * any invalid access. > */ > - intel_uncore_arm_unclaimed_mmio_detection(dev_priv); > + intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore); > > for_each_engine(engine, dev_priv, id) { > struct hangcheck hc; > diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c > index 0259a61a745f..1a327828f220 100644 > --- a/drivers/gpu/drm/i915/intel_uncore.c > +++ b/drivers/gpu/drm/i915/intel_uncore.c > @@ -509,18 +509,17 @@ gen6_check_for_fifo_debug(struct intel_uncore *uncore) > } > > static bool > -check_for_unclaimed_mmio(struct drm_i915_private *dev_priv) > +check_for_unclaimed_mmio(struct intel_uncore *uncore) > { > - struct intel_uncore *uncore = &dev_priv->uncore; > bool ret = false; > > - if (HAS_FPGA_DBG_UNCLAIMED(dev_priv)) > + if (uncore->flags & UNCORE_HAS_FPGA_DBG_UNCLAIMED) > ret |= fpga_check_for_unclaimed_mmio(uncore); > > - if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) > + if (uncore->flags & UNCORE_HAS_DBG_UNCLAIMED) > ret |= vlv_check_for_unclaimed_mmio(uncore); > > - if (IS_GEN_RANGE(dev_priv, 6, 7)) > + if (uncore->flags & UNCORE_HAS_FIFO) > ret |= gen6_check_for_fifo_debug(uncore); > > return ret; > @@ -529,14 +528,12 @@ check_for_unclaimed_mmio(struct drm_i915_private *dev_priv) > static void __intel_uncore_early_sanitize(struct intel_uncore *uncore, > unsigned int restore_forcewake) > { > - struct drm_i915_private *i915 = uncore_to_i915(uncore); > - > /* clear out unclaimed reg detection bit */ > - if (check_for_unclaimed_mmio(i915)) > + if (check_for_unclaimed_mmio(uncore)) > DRM_DEBUG("unclaimed mmio detected on uncore init, clearing\n"); > > /* WaDisableShadowRegForCpd:chv */ > - if (IS_CHERRYVIEW(i915)) { > + if (IS_CHERRYVIEW(uncore_to_i915(uncore))) { > __raw_uncore_write32(uncore, GTFIFOCTL, > __raw_uncore_read32(uncore, GTFIFOCTL) | > GT_FIFO_CTL_BLOCK_ALL_POLICY_STALL | > @@ -549,7 +546,7 @@ static void __intel_uncore_early_sanitize(struct intel_uncore *uncore, > spin_lock_irq(&uncore->lock); > uncore->funcs.force_wake_get(uncore, restore_forcewake); > > - if (IS_GEN_RANGE(i915, 6, 7)) > + if (uncore->flags & UNCORE_HAS_FIFO) > uncore->fifo_count = fifo_free_entries(uncore); > spin_unlock_irq(&uncore->lock); > } > @@ -668,12 +665,10 @@ void intel_uncore_forcewake_user_get(struct intel_uncore *uncore) > */ > void intel_uncore_forcewake_user_put(struct intel_uncore *uncore) > { > - struct drm_i915_private *i915 = uncore_to_i915(uncore); > - > spin_lock_irq(&uncore->lock); > if (!--uncore->user_forcewake.count) { > - if (intel_uncore_unclaimed_mmio(i915)) > - dev_info(i915->drm.dev, > + if (intel_uncore_unclaimed_mmio(uncore)) > + dev_info(uncore_to_i915(uncore)->drm.dev, > "Invalid mmio detected during user access\n"); > > uncore->unclaimed_mmio_check = > @@ -1072,12 +1067,12 @@ ilk_dummy_write(struct intel_uncore *uncore) > } > > static void > -__unclaimed_reg_debug(struct drm_i915_private *dev_priv, > +__unclaimed_reg_debug(struct intel_uncore *uncore, > const i915_reg_t reg, > const bool read, > const bool before) > { > - if (WARN(check_for_unclaimed_mmio(dev_priv) && !before, > + if (WARN(check_for_unclaimed_mmio(uncore) && !before, > "Unclaimed %s register 0x%x\n", > read ? "read from" : "write to", > i915_mmio_reg_offset(reg))) > @@ -1086,7 +1081,7 @@ __unclaimed_reg_debug(struct drm_i915_private *dev_priv, > } > > static inline void > -unclaimed_reg_debug(struct drm_i915_private *dev_priv, > +unclaimed_reg_debug(struct intel_uncore *uncore, > const i915_reg_t reg, > const bool read, > const bool before) > @@ -1094,7 +1089,7 @@ unclaimed_reg_debug(struct drm_i915_private *dev_priv, > if (likely(!i915_modparams.mmio_debug)) > return; > > - __unclaimed_reg_debug(dev_priv, reg, read, before); > + __unclaimed_reg_debug(uncore, reg, read, before); > } > > #define GEN2_READ_HEADER(x) \ > @@ -1145,10 +1140,10 @@ __gen2_read(64) > u##x val = 0; \ > assert_rpm_wakelock_held(dev_priv); \ > spin_lock_irqsave(&uncore->lock, irqflags); \ > - unclaimed_reg_debug(dev_priv, reg, true, true) > + unclaimed_reg_debug(uncore, reg, true, true) > > #define GEN6_READ_FOOTER \ > - unclaimed_reg_debug(dev_priv, reg, true, false); \ > + unclaimed_reg_debug(uncore, reg, true, false); \ > spin_unlock_irqrestore(&uncore->lock, irqflags); \ > trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \ > return val > @@ -1259,10 +1254,10 @@ __gen2_write(32) > trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \ > assert_rpm_wakelock_held(dev_priv); \ > spin_lock_irqsave(&uncore->lock, irqflags); \ > - unclaimed_reg_debug(dev_priv, reg, false, true) > + unclaimed_reg_debug(uncore, reg, false, true) > > #define GEN6_WRITE_FOOTER \ > - unclaimed_reg_debug(dev_priv, reg, false, false); \ > + unclaimed_reg_debug(uncore, reg, false, false); \ > spin_unlock_irqrestore(&uncore->lock, irqflags) > > #define __gen6_write(x) \ > @@ -1638,6 +1633,15 @@ int intel_uncore_init(struct intel_uncore *uncore) > ASSIGN_READ_MMIO_VFUNCS(uncore, gen11_fwtable); > } > > + if (HAS_FPGA_DBG_UNCLAIMED(i915)) > + uncore->flags |= UNCORE_HAS_FPGA_DBG_UNCLAIMED; > + > + if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) > + uncore->flags |= UNCORE_HAS_DBG_UNCLAIMED; > + > + if (IS_GEN_RANGE(i915, 6, 7)) > + uncore->flags |= UNCORE_HAS_FIFO; > + > iosf_mbi_register_pmic_bus_access_notifier(&uncore->pmic_bus_access_nb); > > return 0; > @@ -1869,15 +1873,14 @@ int __intel_wait_for_register(struct drm_i915_private *dev_priv, > return ret; > } > > -bool intel_uncore_unclaimed_mmio(struct drm_i915_private *dev_priv) > +bool intel_uncore_unclaimed_mmio(struct intel_uncore *uncore) > { > - return check_for_unclaimed_mmio(dev_priv); > + return check_for_unclaimed_mmio(uncore); > } > > bool > -intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv) > +intel_uncore_arm_unclaimed_mmio_detection(struct intel_uncore *uncore) > { > - struct intel_uncore *uncore = &dev_priv->uncore; > bool ret = false; > > spin_lock_irq(&uncore->lock); > @@ -1885,7 +1888,7 @@ intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv) > if (unlikely(uncore->unclaimed_mmio_check <= 0)) > goto out; > > - if (unlikely(intel_uncore_unclaimed_mmio(dev_priv))) { > + if (unlikely(intel_uncore_unclaimed_mmio(uncore))) { > if (!i915_modparams.mmio_debug) { > DRM_DEBUG("Unclaimed register detected, " > "enabling oneshot unclaimed register reporting. " > diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h > index 4947542c6ea7..9a2c4f3b87f2 100644 > --- a/drivers/gpu/drm/i915/intel_uncore.h > +++ b/drivers/gpu/drm/i915/intel_uncore.h > @@ -130,6 +130,9 @@ struct intel_uncore { > > u32 flags; > #define UNCORE_HAS_FORCEWAKE BIT(0) > +#define UNCORE_HAS_FPGA_DBG_UNCLAIMED BIT(1) > +#define UNCORE_HAS_DBG_UNCLAIMED BIT(2) > +#define UNCORE_HAS_FIFO BIT(3) > }; > > /* Iterate over initialised fw domains */ > @@ -149,8 +152,8 @@ forcewake_domain_to_uncore(const struct intel_uncore_forcewake_domain *d) > void intel_uncore_sanitize(struct drm_i915_private *dev_priv); > int intel_uncore_init(struct intel_uncore *uncore); > void intel_uncore_prune(struct intel_uncore *uncore); > -bool intel_uncore_unclaimed_mmio(struct drm_i915_private *dev_priv); > -bool intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv); > +bool intel_uncore_unclaimed_mmio(struct intel_uncore *uncore); > +bool intel_uncore_arm_unclaimed_mmio_detection(struct intel_uncore *uncore); > void intel_uncore_fini(struct intel_uncore *uncore); > void intel_uncore_suspend(struct intel_uncore *uncore); > void intel_uncore_resume_early(struct intel_uncore *uncore); > diff --git a/drivers/gpu/drm/i915/selftests/intel_uncore.c b/drivers/gpu/drm/i915/selftests/intel_uncore.c > index c69a1bad8933..799aeedac91b 100644 > --- a/drivers/gpu/drm/i915/selftests/intel_uncore.c > +++ b/drivers/gpu/drm/i915/selftests/intel_uncore.c > @@ -244,6 +244,7 @@ static int live_forcewake_domains(void *arg) > { > #define FW_RANGE 0x40000 > struct drm_i915_private *dev_priv = arg; > + struct intel_uncore *uncore = &dev_priv->uncore; > unsigned long *valid; > u32 offset; > int err; > @@ -263,31 +264,31 @@ static int live_forcewake_domains(void *arg) > if (!valid) > return -ENOMEM; > > - intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL); > + intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL); > > - check_for_unclaimed_mmio(dev_priv); > + check_for_unclaimed_mmio(uncore); > for (offset = 0; offset < FW_RANGE; offset += 4) { > i915_reg_t reg = { offset }; > > (void)I915_READ_FW(reg); > - if (!check_for_unclaimed_mmio(dev_priv)) > + if (!check_for_unclaimed_mmio(uncore)) > set_bit(offset, valid); > } > > - intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL); > + intel_uncore_forcewake_put(uncore, FORCEWAKE_ALL); > > err = 0; > for_each_set_bit(offset, valid, FW_RANGE) { > i915_reg_t reg = { offset }; > > iosf_mbi_punit_acquire(); > - intel_uncore_forcewake_reset(&dev_priv->uncore); > + intel_uncore_forcewake_reset(uncore); > iosf_mbi_punit_release(); > > - check_for_unclaimed_mmio(dev_priv); > + check_for_unclaimed_mmio(uncore); > > (void)I915_READ(reg); > - if (check_for_unclaimed_mmio(dev_priv)) { > + if (check_for_unclaimed_mmio(uncore)) { > pr_err("Unclaimed mmio read to register 0x%04x\n", > offset); > err = -EINVAL;
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 5465b99b4392..85e80701a4c6 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -2854,7 +2854,7 @@ static int intel_runtime_suspend(struct device *kdev) enable_rpm_wakeref_asserts(dev_priv); intel_runtime_pm_cleanup(dev_priv); - if (intel_uncore_arm_unclaimed_mmio_detection(dev_priv)) + if (intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore)) DRM_ERROR("Unclaimed access detected prior to suspending\n"); dev_priv->runtime_pm.suspended = true; @@ -2908,7 +2908,7 @@ static int intel_runtime_resume(struct device *kdev) intel_opregion_notify_adapter(dev_priv, PCI_D0); dev_priv->runtime_pm.suspended = false; - if (intel_uncore_unclaimed_mmio(dev_priv)) + if (intel_uncore_unclaimed_mmio(&dev_priv->uncore)) DRM_DEBUG_DRIVER("Unclaimed access during suspend, bios?\n"); if (INTEL_GEN(dev_priv) >= 11) { diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 008560ef4db0..9a9b78c120b1 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -13533,7 +13533,7 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) * so enable debugging for the next modeset - and hope we catch * the culprit. */ - intel_uncore_arm_unclaimed_mmio_detection(dev_priv); + intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore); intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET, wakeref); } diff --git a/drivers/gpu/drm/i915/intel_hangcheck.c b/drivers/gpu/drm/i915/intel_hangcheck.c index 57ed49dc19c4..125662c64934 100644 --- a/drivers/gpu/drm/i915/intel_hangcheck.c +++ b/drivers/gpu/drm/i915/intel_hangcheck.c @@ -270,7 +270,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work) * periodically arm the mmio checker to see if we are triggering * any invalid access. */ - intel_uncore_arm_unclaimed_mmio_detection(dev_priv); + intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore); for_each_engine(engine, dev_priv, id) { struct hangcheck hc; diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index 0259a61a745f..1a327828f220 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c @@ -509,18 +509,17 @@ gen6_check_for_fifo_debug(struct intel_uncore *uncore) } static bool -check_for_unclaimed_mmio(struct drm_i915_private *dev_priv) +check_for_unclaimed_mmio(struct intel_uncore *uncore) { - struct intel_uncore *uncore = &dev_priv->uncore; bool ret = false; - if (HAS_FPGA_DBG_UNCLAIMED(dev_priv)) + if (uncore->flags & UNCORE_HAS_FPGA_DBG_UNCLAIMED) ret |= fpga_check_for_unclaimed_mmio(uncore); - if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) + if (uncore->flags & UNCORE_HAS_DBG_UNCLAIMED) ret |= vlv_check_for_unclaimed_mmio(uncore); - if (IS_GEN_RANGE(dev_priv, 6, 7)) + if (uncore->flags & UNCORE_HAS_FIFO) ret |= gen6_check_for_fifo_debug(uncore); return ret; @@ -529,14 +528,12 @@ check_for_unclaimed_mmio(struct drm_i915_private *dev_priv) static void __intel_uncore_early_sanitize(struct intel_uncore *uncore, unsigned int restore_forcewake) { - struct drm_i915_private *i915 = uncore_to_i915(uncore); - /* clear out unclaimed reg detection bit */ - if (check_for_unclaimed_mmio(i915)) + if (check_for_unclaimed_mmio(uncore)) DRM_DEBUG("unclaimed mmio detected on uncore init, clearing\n"); /* WaDisableShadowRegForCpd:chv */ - if (IS_CHERRYVIEW(i915)) { + if (IS_CHERRYVIEW(uncore_to_i915(uncore))) { __raw_uncore_write32(uncore, GTFIFOCTL, __raw_uncore_read32(uncore, GTFIFOCTL) | GT_FIFO_CTL_BLOCK_ALL_POLICY_STALL | @@ -549,7 +546,7 @@ static void __intel_uncore_early_sanitize(struct intel_uncore *uncore, spin_lock_irq(&uncore->lock); uncore->funcs.force_wake_get(uncore, restore_forcewake); - if (IS_GEN_RANGE(i915, 6, 7)) + if (uncore->flags & UNCORE_HAS_FIFO) uncore->fifo_count = fifo_free_entries(uncore); spin_unlock_irq(&uncore->lock); } @@ -668,12 +665,10 @@ void intel_uncore_forcewake_user_get(struct intel_uncore *uncore) */ void intel_uncore_forcewake_user_put(struct intel_uncore *uncore) { - struct drm_i915_private *i915 = uncore_to_i915(uncore); - spin_lock_irq(&uncore->lock); if (!--uncore->user_forcewake.count) { - if (intel_uncore_unclaimed_mmio(i915)) - dev_info(i915->drm.dev, + if (intel_uncore_unclaimed_mmio(uncore)) + dev_info(uncore_to_i915(uncore)->drm.dev, "Invalid mmio detected during user access\n"); uncore->unclaimed_mmio_check = @@ -1072,12 +1067,12 @@ ilk_dummy_write(struct intel_uncore *uncore) } static void -__unclaimed_reg_debug(struct drm_i915_private *dev_priv, +__unclaimed_reg_debug(struct intel_uncore *uncore, const i915_reg_t reg, const bool read, const bool before) { - if (WARN(check_for_unclaimed_mmio(dev_priv) && !before, + if (WARN(check_for_unclaimed_mmio(uncore) && !before, "Unclaimed %s register 0x%x\n", read ? "read from" : "write to", i915_mmio_reg_offset(reg))) @@ -1086,7 +1081,7 @@ __unclaimed_reg_debug(struct drm_i915_private *dev_priv, } static inline void -unclaimed_reg_debug(struct drm_i915_private *dev_priv, +unclaimed_reg_debug(struct intel_uncore *uncore, const i915_reg_t reg, const bool read, const bool before) @@ -1094,7 +1089,7 @@ unclaimed_reg_debug(struct drm_i915_private *dev_priv, if (likely(!i915_modparams.mmio_debug)) return; - __unclaimed_reg_debug(dev_priv, reg, read, before); + __unclaimed_reg_debug(uncore, reg, read, before); } #define GEN2_READ_HEADER(x) \ @@ -1145,10 +1140,10 @@ __gen2_read(64) u##x val = 0; \ assert_rpm_wakelock_held(dev_priv); \ spin_lock_irqsave(&uncore->lock, irqflags); \ - unclaimed_reg_debug(dev_priv, reg, true, true) + unclaimed_reg_debug(uncore, reg, true, true) #define GEN6_READ_FOOTER \ - unclaimed_reg_debug(dev_priv, reg, true, false); \ + unclaimed_reg_debug(uncore, reg, true, false); \ spin_unlock_irqrestore(&uncore->lock, irqflags); \ trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \ return val @@ -1259,10 +1254,10 @@ __gen2_write(32) trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \ assert_rpm_wakelock_held(dev_priv); \ spin_lock_irqsave(&uncore->lock, irqflags); \ - unclaimed_reg_debug(dev_priv, reg, false, true) + unclaimed_reg_debug(uncore, reg, false, true) #define GEN6_WRITE_FOOTER \ - unclaimed_reg_debug(dev_priv, reg, false, false); \ + unclaimed_reg_debug(uncore, reg, false, false); \ spin_unlock_irqrestore(&uncore->lock, irqflags) #define __gen6_write(x) \ @@ -1638,6 +1633,15 @@ int intel_uncore_init(struct intel_uncore *uncore) ASSIGN_READ_MMIO_VFUNCS(uncore, gen11_fwtable); } + if (HAS_FPGA_DBG_UNCLAIMED(i915)) + uncore->flags |= UNCORE_HAS_FPGA_DBG_UNCLAIMED; + + if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) + uncore->flags |= UNCORE_HAS_DBG_UNCLAIMED; + + if (IS_GEN_RANGE(i915, 6, 7)) + uncore->flags |= UNCORE_HAS_FIFO; + iosf_mbi_register_pmic_bus_access_notifier(&uncore->pmic_bus_access_nb); return 0; @@ -1869,15 +1873,14 @@ int __intel_wait_for_register(struct drm_i915_private *dev_priv, return ret; } -bool intel_uncore_unclaimed_mmio(struct drm_i915_private *dev_priv) +bool intel_uncore_unclaimed_mmio(struct intel_uncore *uncore) { - return check_for_unclaimed_mmio(dev_priv); + return check_for_unclaimed_mmio(uncore); } bool -intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv) +intel_uncore_arm_unclaimed_mmio_detection(struct intel_uncore *uncore) { - struct intel_uncore *uncore = &dev_priv->uncore; bool ret = false; spin_lock_irq(&uncore->lock); @@ -1885,7 +1888,7 @@ intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv) if (unlikely(uncore->unclaimed_mmio_check <= 0)) goto out; - if (unlikely(intel_uncore_unclaimed_mmio(dev_priv))) { + if (unlikely(intel_uncore_unclaimed_mmio(uncore))) { if (!i915_modparams.mmio_debug) { DRM_DEBUG("Unclaimed register detected, " "enabling oneshot unclaimed register reporting. " diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h index 4947542c6ea7..9a2c4f3b87f2 100644 --- a/drivers/gpu/drm/i915/intel_uncore.h +++ b/drivers/gpu/drm/i915/intel_uncore.h @@ -130,6 +130,9 @@ struct intel_uncore { u32 flags; #define UNCORE_HAS_FORCEWAKE BIT(0) +#define UNCORE_HAS_FPGA_DBG_UNCLAIMED BIT(1) +#define UNCORE_HAS_DBG_UNCLAIMED BIT(2) +#define UNCORE_HAS_FIFO BIT(3) }; /* Iterate over initialised fw domains */ @@ -149,8 +152,8 @@ forcewake_domain_to_uncore(const struct intel_uncore_forcewake_domain *d) void intel_uncore_sanitize(struct drm_i915_private *dev_priv); int intel_uncore_init(struct intel_uncore *uncore); void intel_uncore_prune(struct intel_uncore *uncore); -bool intel_uncore_unclaimed_mmio(struct drm_i915_private *dev_priv); -bool intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv); +bool intel_uncore_unclaimed_mmio(struct intel_uncore *uncore); +bool intel_uncore_arm_unclaimed_mmio_detection(struct intel_uncore *uncore); void intel_uncore_fini(struct intel_uncore *uncore); void intel_uncore_suspend(struct intel_uncore *uncore); void intel_uncore_resume_early(struct intel_uncore *uncore); diff --git a/drivers/gpu/drm/i915/selftests/intel_uncore.c b/drivers/gpu/drm/i915/selftests/intel_uncore.c index c69a1bad8933..799aeedac91b 100644 --- a/drivers/gpu/drm/i915/selftests/intel_uncore.c +++ b/drivers/gpu/drm/i915/selftests/intel_uncore.c @@ -244,6 +244,7 @@ static int live_forcewake_domains(void *arg) { #define FW_RANGE 0x40000 struct drm_i915_private *dev_priv = arg; + struct intel_uncore *uncore = &dev_priv->uncore; unsigned long *valid; u32 offset; int err; @@ -263,31 +264,31 @@ static int live_forcewake_domains(void *arg) if (!valid) return -ENOMEM; - intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL); + intel_uncore_forcewake_get(uncore, FORCEWAKE_ALL); - check_for_unclaimed_mmio(dev_priv); + check_for_unclaimed_mmio(uncore); for (offset = 0; offset < FW_RANGE; offset += 4) { i915_reg_t reg = { offset }; (void)I915_READ_FW(reg); - if (!check_for_unclaimed_mmio(dev_priv)) + if (!check_for_unclaimed_mmio(uncore)) set_bit(offset, valid); } - intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL); + intel_uncore_forcewake_put(uncore, FORCEWAKE_ALL); err = 0; for_each_set_bit(offset, valid, FW_RANGE) { i915_reg_t reg = { offset }; iosf_mbi_punit_acquire(); - intel_uncore_forcewake_reset(&dev_priv->uncore); + intel_uncore_forcewake_reset(uncore); iosf_mbi_punit_release(); - check_for_unclaimed_mmio(dev_priv); + check_for_unclaimed_mmio(uncore); (void)I915_READ(reg); - if (check_for_unclaimed_mmio(dev_priv)) { + if (check_for_unclaimed_mmio(uncore)) { pr_err("Unclaimed mmio read to register 0x%04x\n", offset); err = -EINVAL;
Save the HW capabilities to avoid having to jump back to dev_priv every time. Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/i915_drv.c | 4 +- drivers/gpu/drm/i915/intel_display.c | 2 +- drivers/gpu/drm/i915/intel_hangcheck.c | 2 +- drivers/gpu/drm/i915/intel_uncore.c | 57 ++++++++++--------- drivers/gpu/drm/i915/intel_uncore.h | 7 ++- drivers/gpu/drm/i915/selftests/intel_uncore.c | 15 ++--- 6 files changed, 47 insertions(+), 40 deletions(-)