From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 1/5] drm/i915: Turn __raw_i915_read8() & co. in to inline functions
Date: Thu, 22 Oct 2015 16:49:19 +0300 [thread overview]
Message-ID: <20151022134919.GR26517@intel.com> (raw)
In-Reply-To: <20151022133210.GY16848@phenom.ffwll.local>
On Thu, Oct 22, 2015 at 03:32:11PM +0200, Daniel Vetter wrote:
> On Thu, Oct 22, 2015 at 03:34:56PM +0300, ville.syrjala@linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > There's no need for __raw_i915_read8() & co. bot be macros, so make them
>
> s/bot/be
Actually s/bot/to/ :)
>
> > inline funcitons. To avoid typo mistakes generate the inline functions
>
> s/funcitons/functions/
>
> > using preprocessor templates.
> >
> > We have a few users of the raw register acces functions outside
> > intel_uncore.c, so let's also move the functions into intel_drv.h.
> >
> > While doing that switch I915_READ_FW() & co. to use the
> > __raw_i915_read() functions, and use the _FW macros everywhere
> > outside intel_uncore.c where we want to read registers without
> > grabbing forcewake and whatnot. The only exception is
> > i915_check_vgpu() which itself gets called from intel_uncore.c,
> > so using the __raw_i915_read stuff there seems appropriate.
> >
> > v2: Squash in the intel_uncore.c->i915_drv.h move
> > Convert I915_READ_FW() to use __raw_i915_read(), and use
> > I915_READ_FW() outside of intel_uncore.c (Chris)
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> > ---
> > drivers/gpu/drm/i915/i915_debugfs.c | 2 +-
> > drivers/gpu/drm/i915/i915_drv.h | 30 ++++++++++++++++++++++++++++--
> > drivers/gpu/drm/i915/i915_irq.c | 10 ++++------
> > drivers/gpu/drm/i915/i915_vgpu.c | 6 +++---
> > drivers/gpu/drm/i915/intel_uncore.c | 14 +-------------
> > 5 files changed, 37 insertions(+), 25 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > index eca94d0..89ba549 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -1523,7 +1523,7 @@ static int gen6_drpc_info(struct seq_file *m)
> > seq_printf(m, "RC information accurate: %s\n", yesno(count < 51));
> > }
> >
> > - gt_core_status = readl(dev_priv->regs + GEN6_GT_CORE_STATUS);
> > + gt_core_status = I915_READ_FW(GEN6_GT_CORE_STATUS);
> > trace_i915_reg_rw(false, GEN6_GT_CORE_STATUS, gt_core_status, 4, true);
> >
> > rpmodectl1 = I915_READ(GEN6_RP_CONTROL);
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 9a15ebe..01fdc70 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -3452,6 +3452,32 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
> > #define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
> > #define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)
> >
> > +#define __raw_read(x, s) \
> > +static inline uint##x##_t __raw_i915_read##x(struct drm_i915_private *dev_priv, \
> > + uint32_t reg) \
> > +{ \
> > + return read##s(dev_priv->regs + reg); \
> > +}
> > +
> > +#define __raw_write(x, s) \
> > +static inline void __raw_i915_write##x(struct drm_i915_private *dev_priv, \
> > + uint32_t reg, uint##x##_t val) \
> > +{ \
> > + write##s(val, dev_priv->regs + reg); \
> > +}
> > +__raw_read(8, b)
> > +__raw_read(16, w)
> > +__raw_read(32, l)
> > +__raw_read(64, q)
> > +
> > +__raw_write(8, b)
> > +__raw_write(16, w)
> > +__raw_write(32, l)
> > +__raw_write(64, q)
> > +
> > +#undef __raw_read
> > +#undef __raw_write
> > +
> > /* These are untraced mmio-accessors that are only valid to be used inside
> > * criticial sections inside IRQ handlers where forcewake is explicitly
> > * controlled.
> > @@ -3459,8 +3485,8 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
> > * Note: Should only be used between intel_uncore_forcewake_irqlock() and
> > * intel_uncore_forcewake_irqunlock().
> > */
> > -#define I915_READ_FW(reg__) readl(dev_priv->regs + (reg__))
> > -#define I915_WRITE_FW(reg__, val__) writel(val__, dev_priv->regs + (reg__))
> > +#define I915_READ_FW(reg__) __raw_i915_read32(dev_priv, (reg__))
> > +#define I915_WRITE_FW(reg__, val__) __raw_i915_write32(dev_priv, (reg__), (val__))
> > #define POSTING_READ_FW(reg__) (void)I915_READ_FW(reg__)
> >
> > /* "Broadcast RGB" property */
> > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> > index 9caf22c..a0ed58d 100644
> > --- a/drivers/gpu/drm/i915/i915_irq.c
> > +++ b/drivers/gpu/drm/i915/i915_irq.c
> > @@ -717,9 +717,7 @@ static u32 g4x_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
> > return I915_READ(PIPE_FRMCOUNT_G4X(pipe));
> > }
> >
> > -/* raw reads, only for fast reads of display block, no need for forcewake etc. */
> > -#define __raw_i915_read32(dev_priv__, reg__) readl((dev_priv__)->regs + (reg__))
> > -
> > +/* I915_READ_FW, only for fast reads of display block, no need for forcewake etc. */
> > static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
> > {
> > struct drm_device *dev = crtc->base.dev;
> > @@ -733,9 +731,9 @@ static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
> > vtotal /= 2;
> >
> > if (IS_GEN2(dev))
> > - position = __raw_i915_read32(dev_priv, PIPEDSL(pipe)) & DSL_LINEMASK_GEN2;
> > + position = I915_READ_FW(PIPEDSL(pipe)) & DSL_LINEMASK_GEN2;
> > else
> > - position = __raw_i915_read32(dev_priv, PIPEDSL(pipe)) & DSL_LINEMASK_GEN3;
> > + position = I915_READ_FW(PIPEDSL(pipe)) & DSL_LINEMASK_GEN3;
> >
> > /*
> > * On HSW, the DSL reg (0x70000) appears to return 0 if we
> > @@ -827,7 +825,7 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
> > * We can split this into vertical and horizontal
> > * scanout position.
> > */
> > - position = (__raw_i915_read32(dev_priv, PIPEFRAMEPIXEL(pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT;
> > + position = (I915_READ_FW(PIPEFRAMEPIXEL(pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT;
> >
> > /* convert to pixel counts */
> > vbl_start *= htotal;
> > diff --git a/drivers/gpu/drm/i915/i915_vgpu.c b/drivers/gpu/drm/i915/i915_vgpu.c
> > index 5eee75b..dea7429 100644
> > --- a/drivers/gpu/drm/i915/i915_vgpu.c
> > +++ b/drivers/gpu/drm/i915/i915_vgpu.c
> > @@ -69,13 +69,13 @@ void i915_check_vgpu(struct drm_device *dev)
> > if (!IS_HASWELL(dev))
> > return;
> >
> > - magic = readq(dev_priv->regs + vgtif_reg(magic));
> > + magic = __raw_i915_read64(dev_priv, vgtif_reg(magic));
> > if (magic != VGT_MAGIC)
> > return;
> >
> > version = INTEL_VGT_IF_VERSION_ENCODE(
> > - readw(dev_priv->regs + vgtif_reg(version_major)),
> > - readw(dev_priv->regs + vgtif_reg(version_minor)));
> > + __raw_i915_read16(dev_priv, vgtif_reg(version_major)),
> > + __raw_i915_read16(dev_priv, vgtif_reg(version_minor)));
> > if (version != INTEL_VGT_IF_VERSION) {
> > DRM_INFO("VGT interface version mismatch!\n");
> > return;
> > diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> > index 1663ea5..8dfeac9 100644
> > --- a/drivers/gpu/drm/i915/intel_uncore.c
> > +++ b/drivers/gpu/drm/i915/intel_uncore.c
> > @@ -29,19 +29,7 @@
> >
> > #define FORCEWAKE_ACK_TIMEOUT_MS 50
> >
> > -#define __raw_i915_read8(dev_priv__, reg__) readb((dev_priv__)->regs + (reg__))
> > -#define __raw_i915_write8(dev_priv__, reg__, val__) writeb(val__, (dev_priv__)->regs + (reg__))
> > -
> > -#define __raw_i915_read16(dev_priv__, reg__) readw((dev_priv__)->regs + (reg__))
> > -#define __raw_i915_write16(dev_priv__, reg__, val__) writew(val__, (dev_priv__)->regs + (reg__))
> > -
> > -#define __raw_i915_read32(dev_priv__, reg__) readl((dev_priv__)->regs + (reg__))
> > -#define __raw_i915_write32(dev_priv__, reg__, val__) writel(val__, (dev_priv__)->regs + (reg__))
> > -
> > -#define __raw_i915_read64(dev_priv__, reg__) readq((dev_priv__)->regs + (reg__))
> > -#define __raw_i915_write64(dev_priv__, reg__, val__) writeq(val__, (dev_priv__)->regs + (reg__))
> > -
> > -#define __raw_posting_read(dev_priv__, reg__) (void)__raw_i915_read32(dev_priv__, reg__)
> > +#define __raw_posting_read(dev_priv__, reg__) (void)__raw_i915_read32((dev_priv__), (reg__))
> >
> > static const char * const forcewake_domain_names[] = {
> > "render",
> > --
> > 2.4.9
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-10-22 13:49 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-22 12:34 [PATCH 0/5] drm/i915: Expose __raw_i915_read() & co. to the outside, and a few forcewake things ville.syrjala
2015-10-22 12:34 ` [PATCH 1/5] drm/i915: Turn __raw_i915_read8() & co. in to inline functions ville.syrjala
2015-10-22 13:32 ` Daniel Vetter
2015-10-22 13:49 ` Ville Syrjälä [this message]
2015-10-22 12:34 ` [PATCH 2/5] drm/i915: Read FORCEWAKE registers with I915_READ_FW() ville.syrjala
2015-10-22 13:37 ` Daniel Vetter
2015-10-22 13:50 ` Ville Syrjälä
2015-10-22 12:34 ` [PATCH 3/5] drm/i915: Minor style nits in intel_uncore.c ville.syrjala
2015-10-22 13:38 ` Daniel Vetter
2015-10-22 12:34 ` [PATCH 4/5] drm/i915: Respin vlv/chv reagister access to look more like SKL ville.syrjala
2015-10-22 13:42 ` Daniel Vetter
2015-10-22 12:35 ` [PATCH 5/5] drm/i915: Add NEEDS_FORCEWAKE() checks for vlv/chv ville.syrjala
2015-10-22 13:44 ` Daniel Vetter
2015-10-22 13:41 ` [PATCH 0/5] drm/i915: Expose __raw_i915_read() & co. to the outside, and a few forcewake things Chris Wilson
2015-10-26 14:46 ` Ville Syrjälä
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=20151022134919.GR26517@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=daniel@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 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.