summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2016-01-18 20:44:29 +0000
committerjhb <jhb@FreeBSD.org>2016-01-18 20:44:29 +0000
commit93e78d3449fcc4e034e0fe7f864ec2bf478c2098 (patch)
tree9e338fe5e8537504188fef72ba9a19ada2ee35a3
parente8ea29ce3a280c52021a65c3ddffc10fd54eef8b (diff)
downloadFreeBSD-src-93e78d3449fcc4e034e0fe7f864ec2bf478c2098.zip
FreeBSD-src-93e78d3449fcc4e034e0fe7f864ec2bf478c2098.tar.gz
MFC 292409:
It seems certain Intel GPUs use GPIO bitbanging over a child device instead of GMBUS access for I2C transfers. The GMBUS driver falls back to this mode when a transfer times out. However, the first transfer to timeout was sending the request back to itself resulting in an panic due to recursing on a lock. Fix it to forward the request on to the proper device. This appears to have been accidentally changed in r277487.
-rw-r--r--sys/dev/drm2/i915/intel_iic.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/dev/drm2/i915/intel_iic.c b/sys/dev/drm2/i915/intel_iic.c
index 36a5b9e..30be2efb 100644
--- a/sys/dev/drm2/i915/intel_iic.c
+++ b/sys/dev/drm2/i915/intel_iic.c
@@ -467,8 +467,7 @@ timeout:
* Try GPIO bitbanging instead.
*/
sc->force_bit_dev = true;
- error = -IICBUS_TRANSFER(idev, msgs, nmsgs);
- goto out;
+ error = -IICBUS_TRANSFER(dev_priv->bbbus[unit], msgs, nmsgs);
out:
sx_xunlock(&dev_priv->gmbus_sx);
OpenPOWER on IntegriCloud