drm/i915: Turn __raw_i915_read8() & co. in to inline functions
There's no need for __raw_i915_read8() & co. to be macros, so make them inline functions. To avoid typo mistakes generate the inline 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> Link: http://patchwork.freedesktop.org/patch/msgid/1445517300-28173-2-git-send-email-ville.syrjala@linux.intel.com Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
9c8e1bdb95
commit
75aa3f6307
|
@ -1524,7 +1524,7 @@ static int gen6_drpc_info(struct seq_file *m)
|
||||||
seq_printf(m, "RC information accurate: %s\n", yesno(count < 51));
|
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);
|
trace_i915_reg_rw(false, GEN6_GT_CORE_STATUS, gt_core_status, 4, true);
|
||||||
|
|
||||||
rpmodectl1 = I915_READ(GEN6_RP_CONTROL);
|
rpmodectl1 = I915_READ(GEN6_RP_CONTROL);
|
||||||
|
|
|
@ -3453,6 +3453,32 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
|
||||||
#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
|
#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
|
||||||
#define POSTING_READ16(reg) (void)I915_READ16_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
|
/* These are untraced mmio-accessors that are only valid to be used inside
|
||||||
* criticial sections inside IRQ handlers where forcewake is explicitly
|
* criticial sections inside IRQ handlers where forcewake is explicitly
|
||||||
* controlled.
|
* controlled.
|
||||||
|
@ -3460,8 +3486,8 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val);
|
||||||
* Note: Should only be used between intel_uncore_forcewake_irqlock() and
|
* Note: Should only be used between intel_uncore_forcewake_irqlock() and
|
||||||
* intel_uncore_forcewake_irqunlock().
|
* intel_uncore_forcewake_irqunlock().
|
||||||
*/
|
*/
|
||||||
#define I915_READ_FW(reg__) readl(dev_priv->regs + (reg__))
|
#define I915_READ_FW(reg__) __raw_i915_read32(dev_priv, (reg__))
|
||||||
#define I915_WRITE_FW(reg__, val__) writel(val__, dev_priv->regs + (reg__))
|
#define I915_WRITE_FW(reg__, val__) __raw_i915_write32(dev_priv, (reg__), (val__))
|
||||||
#define POSTING_READ_FW(reg__) (void)I915_READ_FW(reg__)
|
#define POSTING_READ_FW(reg__) (void)I915_READ_FW(reg__)
|
||||||
|
|
||||||
/* "Broadcast RGB" property */
|
/* "Broadcast RGB" property */
|
||||||
|
|
|
@ -717,9 +717,7 @@ static u32 g4x_get_vblank_counter(struct drm_device *dev, int pipe)
|
||||||
return I915_READ(PIPE_FRMCOUNT_G4X(pipe));
|
return I915_READ(PIPE_FRMCOUNT_G4X(pipe));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* raw reads, only for fast reads of display block, no need for forcewake etc. */
|
/* I915_READ_FW, only for fast reads of display block, no need for forcewake etc. */
|
||||||
#define __raw_i915_read32(dev_priv__, reg__) readl((dev_priv__)->regs + (reg__))
|
|
||||||
|
|
||||||
static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
|
static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = crtc->base.dev;
|
struct drm_device *dev = crtc->base.dev;
|
||||||
|
@ -733,9 +731,9 @@ static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
|
||||||
vtotal /= 2;
|
vtotal /= 2;
|
||||||
|
|
||||||
if (IS_GEN2(dev))
|
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
|
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
|
* 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, int pipe,
|
||||||
* We can split this into vertical and horizontal
|
* We can split this into vertical and horizontal
|
||||||
* scanout position.
|
* 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 */
|
/* convert to pixel counts */
|
||||||
vbl_start *= htotal;
|
vbl_start *= htotal;
|
||||||
|
|
|
@ -69,13 +69,13 @@ void i915_check_vgpu(struct drm_device *dev)
|
||||||
if (!IS_HASWELL(dev))
|
if (!IS_HASWELL(dev))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
magic = readq(dev_priv->regs + vgtif_reg(magic));
|
magic = __raw_i915_read64(dev_priv, vgtif_reg(magic));
|
||||||
if (magic != VGT_MAGIC)
|
if (magic != VGT_MAGIC)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
version = INTEL_VGT_IF_VERSION_ENCODE(
|
version = INTEL_VGT_IF_VERSION_ENCODE(
|
||||||
readw(dev_priv->regs + vgtif_reg(version_major)),
|
__raw_i915_read16(dev_priv, vgtif_reg(version_major)),
|
||||||
readw(dev_priv->regs + vgtif_reg(version_minor)));
|
__raw_i915_read16(dev_priv, vgtif_reg(version_minor)));
|
||||||
if (version != INTEL_VGT_IF_VERSION) {
|
if (version != INTEL_VGT_IF_VERSION) {
|
||||||
DRM_INFO("VGT interface version mismatch!\n");
|
DRM_INFO("VGT interface version mismatch!\n");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -29,19 +29,7 @@
|
||||||
|
|
||||||
#define FORCEWAKE_ACK_TIMEOUT_MS 50
|
#define FORCEWAKE_ACK_TIMEOUT_MS 50
|
||||||
|
|
||||||
#define __raw_i915_read8(dev_priv__, reg__) readb((dev_priv__)->regs + (reg__))
|
#define __raw_posting_read(dev_priv__, reg__) (void)__raw_i915_read32((dev_priv__), (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__)
|
|
||||||
|
|
||||||
static const char * const forcewake_domain_names[] = {
|
static const char * const forcewake_domain_names[] = {
|
||||||
"render",
|
"render",
|
||||||
|
|
Loading…
Reference in New Issue