[Intel-gfx] [PATCH] drm/i915: Add means to apply WA conditionally

Arun Siluvery arun.siluvery at linux.intel.com
Thu Oct 23 17:29:30 CEST 2014


We would want to apply some of the workarounds based on a condition to a
particular platform or Gen but we may not know all possible controlling
parameters in advance hence allow to define open conditions; a WA makes
it to the list only if the condition is true.

With the appropriate conditions we can combine all of the workarounds
and apply them from a single place irrespective of platform instead of
having them in separate functions.

For: VIZ-4090
Signed-off-by: Arun Siluvery <arun.siluvery at linux.intel.com>
---
 drivers/gpu/drm/i915/intel_ringbuffer.c | 35 +++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 497b836..0525a5d 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -736,6 +736,41 @@ static int wa_add(struct drm_i915_private *dev_priv,
 
 #define WA_WRITE(addr, val) WA_REG(addr, val, 0xffffffff)
 
+#define WA_SET_BIT_MASKED_IF(cond, addr, mask)		\
+	do {						\
+		if (cond) {				\
+			WA_SET_BIT_MASKED(addr, mask);	\
+		}					\
+	} while(0)
+
+#define WA_CLR_BIT_MASKED_IF(cond, addr, mask)		\
+	do {						\
+		if (cond) {				\
+			WA_CLR_BIT_MASKED(addr, mask);	\
+		}					\
+	} while(0)
+
+#define WA_SET_BIT_IF(cond, addr, mask)			\
+	do {						\
+		if (cond) {				\
+			WA_SET_BIT(addr, mask);		\
+		}					\
+	} while(0)
+
+#define WA_CLR_BIT_IF(cond, addr, mask)			\
+	do {						\
+		if (cond) {				\
+			WA_CLR_BIT(addr, mask);		\
+		}					\
+	} while(0)
+
+#define WA_WRITE_IF(cond, addr, val)			\
+	do {						\
+		if (cond) {				\
+			WA_WRITE(addr, val);		\
+		}					\
+	} while(0)
+
 static int bdw_init_workarounds(struct intel_engine_cs *ring)
 {
 	struct drm_device *dev = ring->dev;
-- 
2.1.2




More information about the Intel-gfx mailing list