drm/i915: Disable crtcs gracefully before GPU reset on gen3/4
The GPU reset also resets the display on gen3/4. The g33 docs say we should disable all planes before flipping the reset switch. Just disable all the crtcs instead. That seems a nicer thing to do anyway. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
		
					parent
					
						
							
								7514747d27
							
						
					
				
			
			
				commit
				
					
						f98ce92fea
					
				
			
		
					 2 changed files with 12 additions and 2 deletions
				
			
		| 
						 | 
					@ -2803,6 +2803,9 @@ static void intel_update_primary_planes(struct drm_device *dev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void intel_prepare_reset(struct drm_device *dev)
 | 
					void intel_prepare_reset(struct drm_device *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						struct drm_i915_private *dev_priv = to_i915(dev);
 | 
				
			||||||
 | 
						struct intel_crtc *crtc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* no reset support for gen2 */
 | 
						/* no reset support for gen2 */
 | 
				
			||||||
	if (IS_GEN2(dev))
 | 
						if (IS_GEN2(dev))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					@ -2812,6 +2815,15 @@ void intel_prepare_reset(struct drm_device *dev)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	drm_modeset_lock_all(dev);
 | 
						drm_modeset_lock_all(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Disabling the crtcs gracefully seems nicer. Also the
 | 
				
			||||||
 | 
						 * g33 docs say we should at least disable all the planes.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						for_each_intel_crtc(dev, crtc) {
 | 
				
			||||||
 | 
							if (crtc->active)
 | 
				
			||||||
 | 
								dev_priv->display.crtc_disable(&crtc->base);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void intel_finish_reset(struct drm_device *dev)
 | 
					void intel_finish_reset(struct drm_device *dev)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1371,8 +1371,6 @@ static int g4x_reset_complete(struct drm_device *dev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int g33_do_reset(struct drm_device *dev)
 | 
					static int g33_do_reset(struct drm_device *dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* FIXME spec says to turn off all planes and wait 1 usec before reset */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	pci_write_config_byte(dev->pdev, I915_GDRST, GRDOM_RESET_ENABLE);
 | 
						pci_write_config_byte(dev->pdev, I915_GDRST, GRDOM_RESET_ENABLE);
 | 
				
			||||||
	return wait_for(g4x_reset_complete(dev), 500);
 | 
						return wait_for(g4x_reset_complete(dev), 500);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue