From: Chris Wilson <chris@chris-wilson.co.uk>
To: intel-gfx <intel-gfx@lists.freedesktop.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Subject: Re: [PATCH] drm/i915: collect more per ring error state
Date: Sun, 30 Oct 2011 18:39:03 +0000 [thread overview]
Message-ID: <e39f63$2g7kbb@fmsmga002.fm.intel.com> (raw)
In-Reply-To: <1318360821-1655-1-git-send-email-daniel.vetter@ffwll.ch>
On Tue, 11 Oct 2011 21:20:21 +0200, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> Based on a patch by Ben Widawsky, but with different colors
> for the bikeshed.
>
> In contrast to Ben's patch this one doesn't add the fault regs.
> Afaics they're for the optional page fault support which
> - we're not enabling
> - and which seems to be unsupported by the hw team. Recent bspec
> lacks tons of information about this that the public docs released
> half a year back still contain.
>
> Also dump ring HEAD/TAIL registers - I've recently seen a few
> error_state where just guessing these is not good enough.
>
> v2: Also dump INSTPM for every ring.
>
> v3: Fix a few really silly goof-ups spotted by Chris Wilson.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This is independent of the "hangcheck robustification" (which I feel is
false advertising ;-) and adds some mildly useful debug information.
The patch itself is fine and worthy of a reviewed-by, there is just one
nearby bug that may as well be squashed in with this cleanup...
> ---
> drivers/gpu/drm/i915/i915_debugfs.c | 16 ++++++++++------
> drivers/gpu/drm/i915/i915_drv.h | 7 +++++--
> drivers/gpu/drm/i915/i915_irq.c | 9 +++++++--
> drivers/gpu/drm/i915/i915_reg.h | 3 +++
> 4 files changed, 25 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index d618f78..5f5eb5b 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -734,17 +734,21 @@ static void i915_ring_error_state(struct seq_file *m,
> unsigned ring)
> {
> seq_printf(m, "%s command stream:\n", ring_str(ring));
> + seq_printf(m, " HEAD: 0x%08x\n", error->head[ring]);
> + seq_printf(m, " TAIL: 0x%08x\n", error->tail[ring]);
> seq_printf(m, " ACTHD: 0x%08x\n", error->acthd[ring]);
> seq_printf(m, " IPEIR: 0x%08x\n", error->ipeir[ring]);
> seq_printf(m, " IPEHR: 0x%08x\n", error->ipehr[ring]);
> seq_printf(m, " INSTDONE: 0x%08x\n", error->instdone[ring]);
> - if (ring == RCS) {
> - if (INTEL_INFO(dev)->gen >= 4) {
> - seq_printf(m, " INSTDONE1: 0x%08x\n", error->instdone1);
> - seq_printf(m, " INSTPS: 0x%08x\n", error->instps);
> - }
> - seq_printf(m, " INSTPM: 0x%08x\n", error->instpm);
> + if (ring == RCS && INTEL_INFO(dev)->gen >= 4) {
> + seq_printf(m, " INSTDONE1: 0x%08x\n", error->instdone1);
> + seq_printf(m, " BBADDR: 0x%08llx\n", error->bbaddr);
> }
> + if (INTEL_INFO(dev)->gen >= 4)
> + seq_printf(m, " INSTPS: 0x%08x\n", error->instps[ring]);
> + seq_printf(m, " INSTPM: 0x%08x\n", error->instpm[ring]);
> + if (INTEL_INFO(dev)->gen >= 6)
> + seq_printf(m, " FADDR: 0x%08x\n", error->faddr[ring]);
> seq_printf(m, " seqno: 0x%08x\n", error->seqno[ring]);
> }
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 5f3ff9d..3701369 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -149,16 +149,19 @@ struct drm_i915_error_state {
> u32 eir;
> u32 pgtbl_er;
> u32 pipestat[I915_MAX_PIPES];
> + u32 tail[I915_NUM_RINGS];
> + u32 head[I915_NUM_RINGS];
> u32 ipeir[I915_NUM_RINGS];
> u32 ipehr[I915_NUM_RINGS];
> u32 instdone[I915_NUM_RINGS];
> u32 acthd[I915_NUM_RINGS];
> u32 error; /* gen6+ */
> - u32 instpm;
> - u32 instps;
> + u32 instpm[I915_NUM_RINGS];
> + u32 instps[I915_NUM_RINGS];
> u32 instdone1;
> u32 seqno[I915_NUM_RINGS];
> u64 bbaddr;
> + u32 faddr[I915_NUM_RINGS];
> u64 fence[16];
> struct timeval time;
> struct drm_i915_error_object {
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 79aba7f..ea1721f 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -878,12 +878,15 @@ static void i915_record_ring_state(struct drm_device *dev,
> {
> struct drm_i915_private *dev_priv = dev->dev_private;
>
> + if (INTEL_INFO(dev)->gen >= 6)
> + error->faddr[ring->id] = I915_READ(RING_DMA_FADD(ring->mmio_base));
> +
> if (INTEL_INFO(dev)->gen >= 4) {
> error->ipeir[ring->id] = I915_READ(RING_IPEIR(ring->mmio_base));
> error->ipehr[ring->id] = I915_READ(RING_IPEHR(ring->mmio_base));
> error->instdone[ring->id] = I915_READ(RING_INSTDONE(ring->mmio_base));
> + error->instps[ring->id] = I915_READ(RING_INSTPS(ring->mmio_base));
> if (ring->id == RCS) {
> - error->instps = I915_READ(INSTPS);
> error->instdone1 = I915_READ(INSTDONE1);
> error->bbaddr = I915_READ64(BB_ADDR);
> }
> @@ -894,8 +897,11 @@ static void i915_record_ring_state(struct drm_device *dev,
> error->bbaddr = 0;
> }
>
> + error->instpm[ring->id] = I915_READ(RING_INSTPM(ring->mmio_base));
> error->seqno[ring->id] = dev_priv->ring->get_seqno(ring);
Whilst you are here, you may as well fix this ^.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
next prev parent reply other threads:[~2011-10-30 18:39 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-11 14:39 [PATCH 1/6] drm/i915: hangcheck robustification Daniel Vetter
2011-10-11 14:39 ` [PATCH 2/6] drm/i915: kicking rings stuck on semaphores considered harmful Daniel Vetter
2011-10-11 15:51 ` Chris Wilson
2011-10-11 20:48 ` Ben Widawsky
2011-10-11 14:39 ` [PATCH 3/6] drm/i915: don't bail out of intel_wait_ring_buffer too early Daniel Vetter
2011-10-11 15:53 ` Chris Wilson
2011-10-11 17:25 ` [PATCH] " Daniel Vetter
2011-10-18 15:24 ` Chris Wilson
2011-10-11 14:39 ` [PATCH 4/6] drm/i915: switch ring->id to be a real id Daniel Vetter
2011-10-11 15:55 ` Chris Wilson
2011-10-11 17:27 ` [PATCH] drm/i915: don't bail out of intel_wait_ring_buffer too early Daniel Vetter
2011-10-11 19:31 ` Daniel Vetter
2011-10-11 17:29 ` [PATCH] drm/i915: switch ring->id to be a real id Daniel Vetter
2011-10-18 15:27 ` Chris Wilson
2011-10-11 14:39 ` [PATCH 5/6] drm/i915: refactor ring error state capture to use arrays Daniel Vetter
2011-10-11 15:57 ` Chris Wilson
2011-10-11 14:39 ` [PATCH 6/6] drm/i915: collect more per ring error state Daniel Vetter
2011-10-11 16:01 ` Chris Wilson
2011-10-11 17:30 ` [PATCH] " Daniel Vetter
2011-10-11 19:23 ` Chris Wilson
2011-10-11 19:20 ` Daniel Vetter
2011-10-30 18:39 ` Chris Wilson [this message]
2011-10-30 18:46 ` Chris Wilson
2011-10-19 11:32 ` [PATCH 1/6] drm/i915: hangcheck robustification Chris Wilson
2011-10-19 15:02 ` Ben Widawsky
2011-10-19 15:48 ` Chris Wilson
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='e39f63$2g7kbb@fmsmga002.fm.intel.com' \
--to=chris@chris-wilson.co.uk \
--cc=daniel.vetter@ffwll.ch \
--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