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.zan...@intel.com>

> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospu...@intel.com>
> Cc: Paulo Zanoni <paulo.r.zan...@intel.com>
> Cc: Chris Wilson <ch...@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;

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to