All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Widawsky <ben@bwidawsk.net>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 3/6] drm/i915: Use the common register access functions for NOTRACE variants
Date: Fri, 12 Jul 2013 13:34:09 -0700	[thread overview]
Message-ID: <20130712203408.GH15384@bwidawsk.net> (raw)
In-Reply-To: <1373637756-11852-3-git-send-email-chris@chris-wilson.co.uk>

On Fri, Jul 12, 2013 at 03:02:33PM +0100, Chris Wilson wrote:
> Detangle the confusion that NOTRACE variants of the register read/write
> routines were directly using the raw register access. We need for those
> routines to reuse the common code for serializing register access and
> ensuring the correct register power states. This is only possible now
> that the only routines that required raw access use their own API.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/i915_drv.h | 28 ++++++++++++++--------------
>  drivers/gpu/drm/i915/intel_gt.c |  8 ++++----
>  2 files changed, 18 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index f140b04..1ab6d4e 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2082,7 +2082,7 @@ int vlv_gpu_freq(int ddr_freq, int val);
>  int vlv_freq_opcode(int ddr_freq, int val);
>  
>  #define __i915_read(x, y) \
> -	u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg);
> +	u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg, bool trace);
>  
>  __i915_read(8, b)
>  __i915_read(16, w)
> @@ -2091,7 +2091,7 @@ __i915_read(64, q)
>  #undef __i915_read
>  
>  #define __i915_write(x, y) \
> -	void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val);
> +	void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val, bool trace);
>  
>  __i915_write(8, b)
>  __i915_write(16, w)
> @@ -2099,21 +2099,21 @@ __i915_write(32, l)
>  __i915_write(64, q)
>  #undef __i915_write
>  
> -#define I915_READ8(reg)		i915_read8(dev_priv, (reg))
> -#define I915_WRITE8(reg, val)	i915_write8(dev_priv, (reg), (val))
> +#define I915_READ8(reg)		i915_read8(dev_priv, (reg), true)
> +#define I915_WRITE8(reg, val)	i915_write8(dev_priv, (reg), (val), true)
>  
> -#define I915_READ16(reg)	i915_read16(dev_priv, (reg))
> -#define I915_WRITE16(reg, val)	i915_write16(dev_priv, (reg), (val))
> -#define I915_READ16_NOTRACE(reg)	readw(dev_priv->regs + (reg))
> -#define I915_WRITE16_NOTRACE(reg, val)	writew(val, dev_priv->regs + (reg))
> +#define I915_READ16(reg)	i915_read16(dev_priv, (reg), true)
> +#define I915_WRITE16(reg, val)	i915_write16(dev_priv, (reg), (val), true)
> +#define I915_READ16_NOTRACE(reg)	i915_read16(dev_priv, (reg), false)
> +#define I915_WRITE16_NOTRACE(reg, val)	i915_write16(dev_priv, (reg), (val), false)
>  
> -#define I915_READ(reg)		i915_read32(dev_priv, (reg))
> -#define I915_WRITE(reg, val)	i915_write32(dev_priv, (reg), (val))
> -#define I915_READ_NOTRACE(reg)		readl(dev_priv->regs + (reg))
> -#define I915_WRITE_NOTRACE(reg, val)	writel(val, dev_priv->regs + (reg))
> +#define I915_READ(reg)		i915_read32(dev_priv, (reg), true)
> +#define I915_WRITE(reg, val)	i915_write32(dev_priv, (reg), (val), true)
> +#define I915_READ_NOTRACE(reg)		i915_read32(dev_priv, (reg), false)
> +#define I915_WRITE_NOTRACE(reg, val)	i915_write32(dev_priv, (reg), (val), false)
>  
> -#define I915_WRITE64(reg, val)	i915_write64(dev_priv, (reg), (val))
> -#define I915_READ64(reg)	i915_read64(dev_priv, (reg))
> +#define I915_WRITE64(reg, val)	i915_write64(dev_priv, (reg), (val), true)
> +#define I915_READ64(reg)	i915_read64(dev_priv, (reg), true)
>  
>  #define POSTING_READ(reg)	(void)I915_READ_NOTRACE(reg)
>  #define POSTING_READ16(reg)	(void)I915_READ16_NOTRACE(reg)
> diff --git a/drivers/gpu/drm/i915/intel_gt.c b/drivers/gpu/drm/i915/intel_gt.c
> index cb3116c..d4bc7f4 100644
> --- a/drivers/gpu/drm/i915/intel_gt.c
> +++ b/drivers/gpu/drm/i915/intel_gt.c
> @@ -330,7 +330,7 @@ hsw_unclaimed_reg_check(struct drm_i915_private *dev_priv, u32 reg)
>  }
>  
>  #define __i915_read(x, y) \
> -u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
> +u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg, bool trace) { \
>  	u##x val = 0; \
>  	if (IS_GEN5(dev_priv->dev)) \
>  		ilk_dummy_write(dev_priv); \
> @@ -346,7 +346,7 @@ u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
>  	} else { \
>  		val = read##y(dev_priv->regs + reg); \
>  	} \
> -	trace_i915_reg_rw(false, reg, val, sizeof(val)); \
> +	if (trace) trace_i915_reg_rw(false, reg, val, sizeof(val)); \
>  	return val; \
>  }
>  
> @@ -357,9 +357,9 @@ __i915_read(64, q)
>  #undef __i915_read
>  
>  #define __i915_write(x, y) \
> -void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
> +void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val, bool trace) { \
>  	u32 __fifo_ret = 0; \
> -	trace_i915_reg_rw(true, reg, val, sizeof(val)); \
> +	if (trace) trace_i915_reg_rw(true, reg, val, sizeof(val)); \
>  	if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
>  		__fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
>  	} \


if (unlikely(trace))? taking a hit on the tracing case seems like what
you want... but I never know the status of such compiler flags.

Reviewed-by: Ben Widawsky <ben@bwidawsk.net>

-- 
Ben Widawsky, Intel Open Source Technology Center

  reply	other threads:[~2013-07-12 20:34 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-12 14:02 [PATCH 1/6] drm/i915: Colocate all GT access routines in the same file Chris Wilson
2013-07-12 14:02 ` [PATCH 2/6] drm/i915: Use a private interface for register access within GT Chris Wilson
2013-07-12 20:25   ` Ben Widawsky
2013-07-12 20:55     ` Chris Wilson
2013-07-12 20:57       ` Daniel Vetter
2013-07-12 14:02 ` [PATCH 3/6] drm/i915: Use the common register access functions for NOTRACE variants Chris Wilson
2013-07-12 20:34   ` Ben Widawsky [this message]
2013-07-12 20:51     ` Chris Wilson
2013-07-12 14:02 ` [PATCH 4/6] drm/i915: Serialize all register access Chris Wilson
2013-07-12 20:37   ` Ben Widawsky
2013-07-12 20:52     ` Chris Wilson
2013-07-16  3:20       ` Ben Widawsky
2013-07-12 14:02 ` [PATCH 5/6] drm/i915: Squash gen lookup through multiple indirections inside GT access Chris Wilson
2013-07-12 14:02 ` [PATCH 6/6] drm/i915: Convert the register access tracepoint to be conditional Chris Wilson
2013-07-12 14:59 [PATCH 1/6] drm/i915: Colocate all GT access routines in the same file Chris Wilson
2013-07-12 14:59 ` [PATCH 3/6] drm/i915: Use the common register access functions for NOTRACE variants Chris Wilson
2013-07-12 17:08 [PATCH 1/6] drm/i915: Colocate all GT access routines in the same file Chris Wilson
2013-07-12 17:08 ` [PATCH 3/6] drm/i915: Use the common register access functions for NOTRACE variants Chris Wilson
2013-07-16 19:02 [PATCH 1/6] drm/i915: Colocate all GT access routines in the same file Chris Wilson
2013-07-16 19:02 ` [PATCH 3/6] drm/i915: Use the common register access functions for NOTRACE variants 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=20130712203408.GH15384@bwidawsk.net \
    --to=ben@bwidawsk.net \
    --cc=chris@chris-wilson.co.uk \
    --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.