Module Name: src
Committed By: riastradh
Date: Sat Feb 28 14:10:00 UTC 2015
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: intel_i2c.c
Log Message:
Match Linux's wait for gmbus a little more precisely.
Don't just wait up to 50 ms for a gmbus interrupt -- poll every tick
for >=50 ms.
To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c:1.9 src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c:1.10
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c:1.9 Sat Feb 28 05:37:10 2015
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_i2c.c Sat Feb 28 14:10:00 2015
@@ -264,9 +264,7 @@ gmbus_wait_hw_status(struct drm_i915_pri
u32 gmbus2_status,
u32 gmbus4_irq_en)
{
-#ifndef __NetBSD__
int i;
-#endif
int reg_offset = dev_priv->gpio_mmio_base;
u32 gmbus2 = 0;
#ifndef __NetBSD__
@@ -289,21 +287,25 @@ gmbus_wait_hw_status(struct drm_i915_pri
#ifdef __NetBSD__
spin_lock(&dev_priv->gmbus_wait_lock);
if (cold) {
- unsigned timo = 50;
-
+ i = 50;
while (gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset),
!ISSET(gmbus2, (GMBUS_SATOER | gmbus2_status))) {
- if (timo-- == 0)
+ if (i-- == 0)
break;
DELAY(1000);
}
} else {
- int ret;
- DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret,
- &dev_priv->gmbus_wait_queue, &dev_priv->gmbus_wait_lock,
- mstohz(50),
- (gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset),
- ISSET(gmbus2, (GMBUS_SATOER | gmbus2_status))));
+ for (i = 0; i < mstohz(50); i++) {
+ int ret;
+
+ DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret,
+ &dev_priv->gmbus_wait_queue,
+ &dev_priv->gmbus_wait_lock,
+ 1,
+ (gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset),
+ ISSET(gmbus2,
+ (GMBUS_SATOER | gmbus2_status))));
+ }
}
spin_unlock(&dev_priv->gmbus_wait_lock);
#else