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