aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c15
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h2
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c18
3 files changed, 16 insertions, 19 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 38e889bfd99..2ddac06d596 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -368,7 +368,7 @@ static int ironlake_do_reset(struct drm_device *dev, u8 flags)
368 * - re-init interrupt state 368 * - re-init interrupt state
369 * - re-init display 369 * - re-init display
370 */ 370 */
371int i965_reset(struct drm_device *dev, u8 flags) 371int i915_reset(struct drm_device *dev, u8 flags)
372{ 372{
373 drm_i915_private_t *dev_priv = dev->dev_private; 373 drm_i915_private_t *dev_priv = dev->dev_private;
374 /* 374 /*
@@ -401,14 +401,19 @@ int i965_reset(struct drm_device *dev, u8 flags)
401 * well as the reset bit (GR/bit 0). Setting the GR bit 401 * well as the reset bit (GR/bit 0). Setting the GR bit
402 * triggers the reset; when done, the hardware will clear it. 402 * triggers the reset; when done, the hardware will clear it.
403 */ 403 */
404 if (IS_IRONLAKE(dev)) 404 ret = -ENODEV;
405 switch (INTEL_INFO(dev)->gen) {
406 case 5:
405 ret = ironlake_do_reset(dev, flags); 407 ret = ironlake_do_reset(dev, flags);
406 else 408 break;
409 case 4:
407 ret = i965_do_reset(dev, flags); 410 ret = i965_do_reset(dev, flags);
411 break;
412 }
408 if (ret) { 413 if (ret) {
409 WARN(true, "i915: Failed to reset chip\n"); 414 DRM_ERROR("Failed to reset chip.\n");
410 mutex_unlock(&dev->struct_mutex); 415 mutex_unlock(&dev->struct_mutex);
411 return -EIO; 416 return ret;
412 } 417 }
413 418
414 /* Ok, now get things going again... */ 419 /* Ok, now get things going again... */
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index ae05008a590..b57e049a462 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -874,7 +874,7 @@ extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
874extern int i915_emit_box(struct drm_device *dev, 874extern int i915_emit_box(struct drm_device *dev,
875 struct drm_clip_rect *boxes, 875 struct drm_clip_rect *boxes,
876 int i, int DR1, int DR4); 876 int i, int DR1, int DR4);
877extern int i965_reset(struct drm_device *dev, u8 flags); 877extern int i915_reset(struct drm_device *dev, u8 flags);
878extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv); 878extern unsigned long i915_chipset_val(struct drm_i915_private *dev_priv);
879extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv); 879extern unsigned long i915_mch_val(struct drm_i915_private *dev_priv);
880extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv); 880extern unsigned long i915_gfx_val(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index a5197e13d94..b1e7655288d 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -397,19 +397,11 @@ static void i915_error_work_func(struct work_struct *work)
397 kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event); 397 kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event);
398 398
399 if (atomic_read(&dev_priv->mm.wedged)) { 399 if (atomic_read(&dev_priv->mm.wedged)) {
400 switch (INTEL_INFO(dev)->gen) { 400 DRM_DEBUG_DRIVER("resetting chip\n");
401 case 5: 401 kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event);
402 case 4: 402 if (!i915_reset(dev, GRDOM_RENDER)) {
403 DRM_DEBUG_DRIVER("resetting chip\n"); 403 atomic_set(&dev_priv->mm.wedged, 0);
404 kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event); 404 kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event);
405 if (!i965_reset(dev, GRDOM_RENDER)) {
406 atomic_set(&dev_priv->mm.wedged, 0);
407 kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_done_event);
408 }
409 break;
410 default:
411 DRM_DEBUG_DRIVER("reboot required\n");
412 break;
413 } 405 }
414 } 406 }
415} 407}