struct drm_i915_private *dev_priv = dev->dev_private;
int pipedsl_reg = (pipe == 0 ? PIPEADSL : PIPEBDSL);
unsigned long timeout = jiffies + msecs_to_jiffies(100);
- u32 last_line;
+ u32 last_line, line;
/* Wait for the display line to settle */
+ line = I915_READ(pipedsl_reg) & DSL_LINEMASK;
do {
- last_line = I915_READ(pipedsl_reg) & DSL_LINEMASK;
- mdelay(5);
- } while (((I915_READ(pipedsl_reg) & DSL_LINEMASK) != last_line) &&
- time_after(timeout, jiffies));
+ last_line = line;
+ MSLEEP(5);
+ line = I915_READ(pipedsl_reg) & DSL_LINEMASK;
+ } while (line != last_line && time_after(timeout, jiffies));
- if (time_after(jiffies, timeout))
+ if (line != last_line)
DRM_DEBUG_KMS("vblank wait timed out\n");
}
#define wait_for(COND, MS) _wait_for(COND, MS, 1)
#define wait_for_atomic(COND, MS) _wait_for(COND, MS, 0)
+#define MSLEEP(x) do { \
+ if (in_dbg_master()) \
+ mdelay(x); \
+ else \
+ msleep(x); \
+} while(0)
+
#define KHz(x) (1000*x)
#define MHz(x) KHz(1000*x)