From: Paulo Zanoni <paulo.r.zanoni@intel.com>
To: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 3/9] drm/i915: add uncore flags for unclaimed mmio
Date: Mon, 25 Mar 2019 17:19:46 -0700 [thread overview]
Message-ID: <3671bc968a95a853373e93b2a8a9f5a56f1f197d.camel@intel.com> (raw)
In-Reply-To: <20190325214940.23632-4-daniele.ceraolospurio@intel.com>
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;
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-03-26 0:19 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-25 21:49 [PATCH 0/9] more uncore rework Daniele Ceraolo Spurio
2019-03-25 21:49 ` [PATCH 1/9] drm/i915: rename raw reg access functions Daniele Ceraolo Spurio
2019-03-25 22:41 ` Paulo Zanoni
2019-03-25 22:57 ` Chris Wilson
2019-03-26 4:18 ` kbuild test robot
2019-03-26 4:37 ` kbuild test robot
2019-03-25 21:49 ` [PATCH 2/9] drm/i915: add HAS_FORCEWAKE flag to uncore Daniele Ceraolo Spurio
2019-03-26 0:13 ` Paulo Zanoni
2019-03-26 12:47 ` Michal Wajdeczko
2019-03-26 21:48 ` Chris Wilson
2019-03-25 21:49 ` [PATCH 3/9] drm/i915: add uncore flags for unclaimed mmio Daniele Ceraolo Spurio
2019-03-26 0:19 ` Paulo Zanoni [this message]
2019-03-25 21:49 ` [PATCH 4/9] drm/i915: take a ref to the rpm in the uncore structure Daniele Ceraolo Spurio
2019-03-25 21:49 ` [PATCH 5/9] drm/i915: switch uncore mmio funcs to use intel_uncore Daniele Ceraolo Spurio
2019-03-25 21:49 ` [PATCH 6/9] drm/i915: switch intel_uncore_forcewake_for_reg to intel_uncore Daniele Ceraolo Spurio
2019-03-26 9:20 ` kbuild test robot
2019-03-25 21:49 ` [PATCH 7/9] drm/i915: intel_wait_for_register_fw to uncore Daniele Ceraolo Spurio
2019-03-25 22:09 ` Chris Wilson
2019-03-26 15:12 ` kbuild test robot
2019-03-25 21:49 ` [PATCH 8/9] drm/i915: switch intel_wait_for_register " Daniele Ceraolo Spurio
2019-03-26 19:17 ` kbuild test robot
2019-03-25 21:49 ` [PATCH 9/9] drm/i915: take a reference to uncore in the engine and use it Daniele Ceraolo Spurio
2019-03-25 22:21 ` Chris Wilson
2019-03-26 12:01 ` ✗ Fi.CI.CHECKPATCH: warning for more uncore rework Patchwork
2019-03-26 12:06 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-03-26 12:29 ` ✓ Fi.CI.BAT: success " Patchwork
2019-03-26 16:46 ` ✓ 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=3671bc968a95a853373e93b2a8a9f5a56f1f197d.camel@intel.com \
--to=paulo.r.zanoni@intel.com \
--cc=daniele.ceraolospurio@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