From ce95d2f9228a2b4ff144a011ff315b0256277481 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Mon, 21 Oct 2013 16:22:51 +0000 Subject: [PATCH] Reset function on SandyBridge holds the gt_lock for the whole duration already. Also, according to the specs, GDRST register is not in the power well, so the forcewake for reset status read is excessive for this reason. Use plain register read for waiting of the reset completion notification, to avoid gt_lock recursion. Linux upstream did the similar change, but their code was already restructured. Reported by: ray Sponsored by: The FreeBSD Foundation MFC after: 1 week --- sys/dev/drm2/i915/i915_drv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/drm2/i915/i915_drv.c b/sys/dev/drm2/i915/i915_drv.c index c90d1d1ece0..a6bbb7d7c84 100644 --- a/sys/dev/drm2/i915/i915_drv.c +++ b/sys/dev/drm2/i915/i915_drv.c @@ -685,7 +685,7 @@ gen6_do_reset(struct drm_device *dev, u8 flags) /* Spin waiting for the device to ack the reset request */ ret = _intel_wait_for(dev, - (I915_READ(GEN6_GDRST) & GEN6_GRDOM_FULL) == 0, + (I915_READ_NOTRACE(GEN6_GDRST) & GEN6_GRDOM_FULL) == 0, 500, 1, "915rst"); /* If reset with a user forcewake, try to restore, otherwise turn it off */