All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michel Thierry <michel.thierry@intel.com>
To: Ben Widawsky <benjamin.widawsky@intel.com>,
	Intel GFX <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 1/5] drm/i915: Cleanup some of the CSB handling
Date: Wed, 6 Jan 2016 15:08:38 +0000	[thread overview]
Message-ID: <568D2DF6.5000608@intel.com> (raw)
In-Reply-To: <1452018609-10142-2-git-send-email-benjamin.widawsky@intel.com>

On 1/5/2016 6:30 PM, Ben Widawsky wrote:
> I think this patch is a worthwhile cleanup even if it might look only marginally
> useful. It gets more useful in upcoming patches and for handling of future GEN
> platforms.
>
> The only non-mechanical part of this is the removal of the extra & operation on
> the ring->next_context_status_buffer. This is safe because right above this, we
> already did a modulus operation.
>
> Signed-off-by: Ben Widawsky <benjamin.widawsky@intel.com>
> ---
>   drivers/gpu/drm/i915/i915_debugfs.c |  6 +++---
>   drivers/gpu/drm/i915/intel_lrc.c    | 15 +++++++++------
>   drivers/gpu/drm/i915/intel_lrc.h    | 18 ++++++++++++++++--
>   3 files changed, 28 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 0fc38bb..3b05bd1 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -2092,13 +2092,13 @@ static int i915_execlists(struct seq_file *m, void *data)
>                  seq_printf(m, "\tStatus pointer: 0x%08X\n", status_pointer);
>
>                  read_pointer = ring->next_context_status_buffer;
> -               write_pointer = status_pointer & 0x07;
> +               write_pointer = GEN8_CSB_WRITE_PTR(status_pointer);
>                  if (read_pointer > write_pointer)
> -                       write_pointer += 6;
> +                       write_pointer += GEN8_CSB_ENTRIES;
>                  seq_printf(m, "\tRead pointer: 0x%08X, write pointer 0x%08X\n",
>                             read_pointer, write_pointer);
>
> -               for (i = 0; i < 6; i++) {
> +               for (i = 0; i < GEN8_CSB_ENTRIES; i++) {
>                          status = I915_READ(RING_CONTEXT_STATUS_BUF_LO(ring, i));
>                          ctx_id = I915_READ(RING_CONTEXT_STATUS_BUF_HI(ring, i));
>
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index 8096c6a..7fb2035 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -516,7 +516,7 @@ void intel_lrc_irq_handler(struct intel_engine_cs *ring)
>          status_pointer = I915_READ(RING_CONTEXT_STATUS_PTR(ring));
>
>          read_pointer = ring->next_context_status_buffer;
> -       write_pointer = status_pointer & GEN8_CSB_PTR_MASK;
> +       write_pointer = GEN8_CSB_WRITE_PTR(status_pointer);
>          if (read_pointer > write_pointer)
>                  write_pointer += GEN8_CSB_ENTRIES;
>
> @@ -559,10 +559,11 @@ void intel_lrc_irq_handler(struct intel_engine_cs *ring)
>          WARN(submit_contexts > 2, "More than two context complete events?\n");
>          ring->next_context_status_buffer = write_pointer % GEN8_CSB_ENTRIES;
>
> +       /* Update the read pointer to the old write pointer. Manual ringbuffer
> +        * management ftw </sarcasm> */
>          I915_WRITE(RING_CONTEXT_STATUS_PTR(ring),
> -                  _MASKED_FIELD(GEN8_CSB_PTR_MASK << 8,
> -                                ((u32)ring->next_context_status_buffer &
> -                                 GEN8_CSB_PTR_MASK) << 8));
> +                  _MASKED_FIELD(GEN8_CSB_READ_PTR_MASK,
> +                                ring->next_context_status_buffer << 8));
>   }
>
>   static int execlists_context_queue(struct drm_i915_gem_request *request)
> @@ -1506,9 +1507,11 @@ static int gen8_init_common_ring(struct intel_engine_cs *ring)
>           *      | Suspend-to-idle (freeze) | Suspend-to-RAM (mem) |
>           * BDW  | CSB regs not reset       | CSB regs reset       |
>           * CHT  | CSB regs not reset       | CSB regs not reset   |
> +        * SKL  |         ?                |         ?            |
> +        * BXT  |         ?                |         ?            |
>           */
> -       next_context_status_buffer_hw = (I915_READ(RING_CONTEXT_STATUS_PTR(ring))
> -                                                  & GEN8_CSB_PTR_MASK);
> +       next_context_status_buffer_hw =
> +               GEN8_CSB_WRITE_PTR(I915_READ(RING_CONTEXT_STATUS_PTR(ring)));
>
>          /*
>           * When the CSB registers are reset (also after power-up / gpu reset),
> diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
> index ae90f86..de41ad6 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.h
> +++ b/drivers/gpu/drm/i915/intel_lrc.h
> @@ -25,8 +25,6 @@
>   #define _INTEL_LRC_H_
>
>   #define GEN8_LR_CONTEXT_ALIGN 4096
> -#define GEN8_CSB_ENTRIES 6
> -#define GEN8_CSB_PTR_MASK 0x07
>
>   /* Execlists regs */
>   #define RING_ELSP(ring)                                _MMIO((ring)->mmio_base + 0x230)
> @@ -40,6 +38,22 @@
>   #define RING_CONTEXT_STATUS_BUF_HI(ring, i)    _MMIO((ring)->mmio_base + 0x370 + (i) * 8 + 4)
>   #define RING_CONTEXT_STATUS_PTR(ring)          _MMIO((ring)->mmio_base + 0x3a0)
>
> +/* The docs specify that the write pointer wraps around after 5h, "After status
> + * is written out to the last available status QW at offset 5h, this pointer
> + * wraps to 0."
> + *
> + * Therefore, one must infer than even though there are 3 bits available, 6 and
> + * 7 appear to be * reserved.

I always see 7 (b111) after boot/reset, but before any execlist has been 
submitted.

> + */
> +#define GEN8_CSB_ENTRIES 6
> +#define GEN8_CSB_PTR_MASK 0x7
> +#define GEN8_CSB_READ_PTR_MASK (GEN8_CSB_PTR_MASK << 8)
> +#define GEN8_CSB_WRITE_PTR_MASK (GEN8_CSB_PTR_MASK << 0)
> +#define GEN8_CSB_WRITE_PTR(csb_status) \
> +       (((csb_status) & GEN8_CSB_WRITE_PTR_MASK) >> 0)
> +#define GEN8_CSB_READ_PTR(csb_status) \
> +       (((csb_status) & GEN8_CSB_READ_PTR_MASK) >> 8)
> +
>   /* Logical Rings */
>   int intel_logical_ring_alloc_request_extras(struct drm_i915_gem_request *request);
>   int intel_logical_ring_reserve_space(struct drm_i915_gem_request *request);
> --
> 2.6.4

Reviewed-by: Michel Thierry <michel.thierry@intel.com>

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

  reply	other threads:[~2016-01-06 15:08 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-05 18:30 [PATCH 0/5] Some minor CSB/execlist stuff Ben Widawsky
2016-01-05 18:30 ` [PATCH 1/5] drm/i915: Cleanup some of the CSB handling Ben Widawsky
2016-01-06 15:08   ` Michel Thierry [this message]
2016-01-05 18:30 ` [PATCH 2/5] drm/i915: Change WARN to ERROR in CSB count Ben Widawsky
2016-01-06 15:09   ` Michel Thierry
2016-01-05 18:30 ` [PATCH 3/5] drm/i915: Extract CSB status read Ben Widawsky
2016-01-06 15:09   ` Michel Thierry
2016-01-06 15:15     ` Chris Wilson
2016-01-07 14:34   ` Daniel Vetter
2016-01-05 18:30 ` [PATCH 4/5] drm/i915: Add basic execlist info to error state Ben Widawsky
2016-01-06 15:10   ` Michel Thierry
2016-01-05 18:30 ` [PATCH 5/5] drm/i915: Use CSB helper in debugfs Ben Widawsky
2016-01-06 15:10   ` Michel Thierry
2016-01-06  8:20 ` ✗ warning: Fi.CI.BAT 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=568D2DF6.5000608@intel.com \
    --to=michel.thierry@intel.com \
    --cc=benjamin.widawsky@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.