aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_drv.h
diff options
context:
space:
mode:
authorYuanhan Liu <yuanhan.liu@linux.intel.com>2010-11-08 04:09:41 -0500
committerChris Wilson <chris@chris-wilson.co.uk>2010-11-08 04:36:48 -0500
commitba4f01a30480cdcd516b782f77a6e0951b83df1c (patch)
treef8e77233ebb4912a918f1e47c411b5208b94964b /drivers/gpu/drm/i915/i915_drv.h
parent67e92af01cb6f7e9a5fd5c930c43cd6f6ef45929 (diff)
drm/i915: trace down all the register write and read
Add two tracepoints at I915_WRITE/READ for tracing down all the register write and read. Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.h')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h61
1 files changed, 53 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 621234265454..220ce53d4a9c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -32,6 +32,7 @@
32 32
33#include "i915_reg.h" 33#include "i915_reg.h"
34#include "intel_bios.h" 34#include "intel_bios.h"
35#include "i915_trace.h"
35#include "intel_ringbuffer.h" 36#include "intel_ringbuffer.h"
36#include <linux/io-mapping.h> 37#include <linux/io-mapping.h>
37#include <linux/i2c.h> 38#include <linux/i2c.h>
@@ -1173,14 +1174,58 @@ extern void intel_overlay_print_error_state(struct seq_file *m, struct intel_ove
1173 LOCK_TEST_WITH_RETURN(dev, file_priv); \ 1174 LOCK_TEST_WITH_RETURN(dev, file_priv); \
1174} while (0) 1175} while (0)
1175 1176
1176#define I915_READ(reg) readl(dev_priv->regs + (reg)) 1177static inline u32 i915_read(struct drm_i915_private *dev_priv, u32 reg, int len)
1177#define I915_WRITE(reg, val) writel(val, dev_priv->regs + (reg)) 1178{
1178#define I915_READ16(reg) readw(dev_priv->regs + (reg)) 1179 u64 val = 0;
1179#define I915_WRITE16(reg, val) writel(val, dev_priv->regs + (reg)) 1180
1180#define I915_READ8(reg) readb(dev_priv->regs + (reg)) 1181 switch (len) {
1181#define I915_WRITE8(reg, val) writeb(val, dev_priv->regs + (reg)) 1182 case 8:
1182#define I915_WRITE64(reg, val) writeq(val, dev_priv->regs + (reg)) 1183 val = readq(dev_priv->regs + reg);
1183#define I915_READ64(reg) readq(dev_priv->regs + (reg)) 1184 break;
1185 case 4:
1186 val = readl(dev_priv->regs + reg);
1187 break;
1188 case 2:
1189 val = readw(dev_priv->regs + reg);
1190 break;
1191 case 1:
1192 val = readb(dev_priv->regs + reg);
1193 break;
1194 }
1195 trace_i915_reg_rw('R', reg, val, len);
1196
1197 return val;
1198}
1199
1200static inline void
1201i915_write(struct drm_i915_private *dev_priv, u32 reg, u64 val, int len)
1202{
1203 /* Trace down the write operation before the real write */
1204 trace_i915_reg_rw('W', reg, val, len);
1205 switch (len) {
1206 case 8:
1207 writeq(val, dev_priv->regs + reg);
1208 break;
1209 case 4:
1210 writel(val, dev_priv->regs + reg);
1211 break;
1212 case 2:
1213 writew(val, dev_priv->regs + reg);
1214 break;
1215 case 1:
1216 writeb(val, dev_priv->regs + reg);
1217 break;
1218 }
1219}
1220
1221#define I915_READ(reg) i915_read(dev_priv, (reg), 4)
1222#define I915_WRITE(reg, val) i915_write(dev_priv, (reg), (val), 4)
1223#define I915_READ16(reg) i915_read(dev_priv, (reg), 2)
1224#define I915_WRITE16(reg, val) i915_write(dev_priv, (reg), (val), 2)
1225#define I915_READ8(reg) i915_read(dev_priv, (reg), 1)
1226#define I915_WRITE8(reg, val) i915_write(dev_priv, (reg), (val), 1)
1227#define I915_WRITE64(reg, val) i915_write(dev_priv, (reg), (val), 8)
1228#define I915_READ64(reg) i915_read(dev_priv, (reg), 8)
1184#define POSTING_READ(reg) (void)I915_READ(reg) 1229#define POSTING_READ(reg) (void)I915_READ(reg)
1185#define POSTING_READ16(reg) (void)I915_READ16(reg) 1230#define POSTING_READ16(reg) (void)I915_READ16(reg)
1186 1231