Module Name: src
Committed By: riastradh
Date: Thu Jul 17 17:52:39 UTC 2014
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915: intel_dp.c
Log Message:
intel_dp_aux_wait_done can run while cold.
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.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_dp.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c:1.6 Thu Jul 17 17:17:24 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_dp.c Thu Jul 17 17:52:39 2014
@@ -367,9 +367,8 @@ intel_dp_aux_wait_done(struct intel_dp *
bool done;
#define C (((status = I915_READ_NOTRACE(ch_ctl)) & DP_AUX_CH_CTL_SEND_BUSY) == 0)
- if (has_aux_irq)
#ifdef __NetBSD__
- {
+ if (has_aux_irq && !cold) {
int ret;
spin_lock(&dev_priv->gmbus_wait_lock);
DRM_SPIN_TIMED_WAIT_UNTIL(ret, &dev_priv->gmbus_wait_queue,
@@ -377,13 +376,16 @@ intel_dp_aux_wait_done(struct intel_dp *
C);
done = ret; /* XXX ugh */
spin_unlock(&dev_priv->gmbus_wait_lock);
- }
+ } else {
+ done = wait_for_atomic(C, 10) == 0;
+ }
#else
+ if (has_aux_irq)
done = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
msecs_to_jiffies_timeout(10));
-#endif
else
done = wait_for_atomic(C, 10) == 0;
+#endif
if (!done)
DRM_ERROR("dp aux hw did not signal timeout (has irq: %i)!\n",
has_aux_irq);