aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_drv.h
diff options
context:
space:
mode:
authorBen Widawsky <benjamin.widawsky@intel.com>2013-10-05 00:22:51 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-10-10 06:47:08 -0400
commit0b27448141bbe9da34a2fdf965dcba6f0f1b75c5 (patch)
treeba8942444c26e17a56627819dab6583e23058a54 /drivers/gpu/drm/i915/i915_drv.h
parent18ce39943eb82e457e4c46dc86b1975d79b30aa7 (diff)
drm/i915: Create MMIO virtual functions
In preparation for having per GEN MMIO functions, create, and start using MMIO functions in our uncore data structure. This simply makes the transition easier by allowing us to just plug in the per GEN stuff later. For simplicity, I moved the intel_uncore_init() function down since those rely on static functions defined lower in the file. This is most of the churn in this patch. I made one unrelated change here by using off_t datatype for the offset of the register to write. I like the clarity that this brings to the code. If I did it as a separate patch, I am pretty certain it would get bikeshedded to oblivion. Requested-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.h')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h60
1 files changed, 29 insertions, 31 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 6a5b7ab0c3fa..957771fc60fa 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -399,6 +399,20 @@ struct drm_i915_display_funcs {
399struct intel_uncore_funcs { 399struct intel_uncore_funcs {
400 void (*force_wake_get)(struct drm_i915_private *dev_priv); 400 void (*force_wake_get)(struct drm_i915_private *dev_priv);
401 void (*force_wake_put)(struct drm_i915_private *dev_priv); 401 void (*force_wake_put)(struct drm_i915_private *dev_priv);
402
403 uint8_t (*mmio_readb)(struct drm_i915_private *dev_priv, off_t offset, bool trace);
404 uint16_t (*mmio_readw)(struct drm_i915_private *dev_priv, off_t offset, bool trace);
405 uint32_t (*mmio_readl)(struct drm_i915_private *dev_priv, off_t offset, bool trace);
406 uint64_t (*mmio_readq)(struct drm_i915_private *dev_priv, off_t offset, bool trace);
407
408 void (*mmio_writeb)(struct drm_i915_private *dev_priv, off_t offset,
409 uint8_t val, bool trace);
410 void (*mmio_writew)(struct drm_i915_private *dev_priv, off_t offset,
411 uint16_t val, bool trace);
412 void (*mmio_writel)(struct drm_i915_private *dev_priv, off_t offset,
413 uint32_t val, bool trace);
414 void (*mmio_writeq)(struct drm_i915_private *dev_priv, off_t offset,
415 uint64_t val, bool trace);
402}; 416};
403 417
404struct intel_uncore { 418struct intel_uncore {
@@ -2337,37 +2351,21 @@ void intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value,
2337int vlv_gpu_freq(int ddr_freq, int val); 2351int vlv_gpu_freq(int ddr_freq, int val);
2338int vlv_freq_opcode(int ddr_freq, int val); 2352int vlv_freq_opcode(int ddr_freq, int val);
2339 2353
2340#define __i915_read(x) \ 2354#define I915_READ8(reg) dev_priv->uncore.funcs.mmio_readb(dev_priv, (reg), true)
2341 u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg, bool trace); 2355#define I915_WRITE8(reg, val) dev_priv->uncore.funcs.mmio_writeb(dev_priv, (reg), (val), true)
2342__i915_read(8) 2356
2343__i915_read(16) 2357#define I915_READ16(reg) dev_priv->uncore.funcs.mmio_readw(dev_priv, (reg), true)
2344__i915_read(32) 2358#define I915_WRITE16(reg, val) dev_priv->uncore.funcs.mmio_writew(dev_priv, (reg), (val), true)
2345__i915_read(64) 2359#define I915_READ16_NOTRACE(reg) dev_priv->uncore.funcs.mmio_readw(dev_priv, (reg), false)
2346#undef __i915_read 2360#define I915_WRITE16_NOTRACE(reg, val) dev_priv->uncore.funcs.mmio_writew(dev_priv, (reg), (val), false)
2347 2361
2348#define __i915_write(x) \ 2362#define I915_READ(reg) dev_priv->uncore.funcs.mmio_readl(dev_priv, (reg), true)
2349 void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val, bool trace); 2363#define I915_WRITE(reg, val) dev_priv->uncore.funcs.mmio_writel(dev_priv, (reg), (val), true)
2350__i915_write(8) 2364#define I915_READ_NOTRACE(reg) dev_priv->uncore.funcs.mmio_readl(dev_priv, (reg), false)
2351__i915_write(16) 2365#define I915_WRITE_NOTRACE(reg, val) dev_priv->uncore.funcs.mmio_writel(dev_priv, (reg), (val), false)
2352__i915_write(32) 2366
2353__i915_write(64) 2367#define I915_WRITE64(reg, val) dev_priv->uncore.funcs.mmio_writeq(dev_priv, (reg), (val), true)
2354#undef __i915_write 2368#define I915_READ64(reg) dev_priv->uncore.funcs.mmio_readq(dev_priv, (reg), true)
2355
2356#define I915_READ8(reg) i915_read8(dev_priv, (reg), true)
2357#define I915_WRITE8(reg, val) i915_write8(dev_priv, (reg), (val), true)
2358
2359#define I915_READ16(reg) i915_read16(dev_priv, (reg), true)
2360#define I915_WRITE16(reg, val) i915_write16(dev_priv, (reg), (val), true)
2361#define I915_READ16_NOTRACE(reg) i915_read16(dev_priv, (reg), false)
2362#define I915_WRITE16_NOTRACE(reg, val) i915_write16(dev_priv, (reg), (val), false)
2363
2364#define I915_READ(reg) i915_read32(dev_priv, (reg), true)
2365#define I915_WRITE(reg, val) i915_write32(dev_priv, (reg), (val), true)
2366#define I915_READ_NOTRACE(reg) i915_read32(dev_priv, (reg), false)
2367#define I915_WRITE_NOTRACE(reg, val) i915_write32(dev_priv, (reg), (val), false)
2368
2369#define I915_WRITE64(reg, val) i915_write64(dev_priv, (reg), (val), true)
2370#define I915_READ64(reg) i915_read64(dev_priv, (reg), true)
2371 2369
2372#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg) 2370#define POSTING_READ(reg) (void)I915_READ_NOTRACE(reg)
2373#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg) 2371#define POSTING_READ16(reg) (void)I915_READ16_NOTRACE(reg)