|
@@ -1403,6 +1403,9 @@ static void i915_stop_engines(struct drm_i915_private *dev_priv,
|
|
struct intel_engine_cs *engine;
|
|
struct intel_engine_cs *engine;
|
|
enum intel_engine_id id;
|
|
enum intel_engine_id id;
|
|
|
|
|
|
|
|
+ if (INTEL_GEN(dev_priv) < 3)
|
|
|
|
+ return;
|
|
|
|
+
|
|
for_each_engine_masked(engine, dev_priv, engine_mask, id)
|
|
for_each_engine_masked(engine, dev_priv, engine_mask, id)
|
|
gen3_stop_engine(engine);
|
|
gen3_stop_engine(engine);
|
|
}
|
|
}
|
|
@@ -1742,16 +1745,12 @@ static reset_func intel_get_gpu_reset(struct drm_i915_private *dev_priv)
|
|
|
|
|
|
int intel_gpu_reset(struct drm_i915_private *dev_priv, unsigned engine_mask)
|
|
int intel_gpu_reset(struct drm_i915_private *dev_priv, unsigned engine_mask)
|
|
{
|
|
{
|
|
- reset_func reset;
|
|
|
|
|
|
+ reset_func reset = intel_get_gpu_reset(dev_priv);
|
|
int retry;
|
|
int retry;
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
might_sleep();
|
|
might_sleep();
|
|
|
|
|
|
- reset = intel_get_gpu_reset(dev_priv);
|
|
|
|
- if (reset == NULL)
|
|
|
|
- return -ENODEV;
|
|
|
|
-
|
|
|
|
/* If the power well sleeps during the reset, the reset
|
|
/* If the power well sleeps during the reset, the reset
|
|
* request may be dropped and never completes (causing -EIO).
|
|
* request may be dropped and never completes (causing -EIO).
|
|
*/
|
|
*/
|
|
@@ -1771,7 +1770,9 @@ int intel_gpu_reset(struct drm_i915_private *dev_priv, unsigned engine_mask)
|
|
*/
|
|
*/
|
|
i915_stop_engines(dev_priv, engine_mask);
|
|
i915_stop_engines(dev_priv, engine_mask);
|
|
|
|
|
|
- ret = reset(dev_priv, engine_mask);
|
|
|
|
|
|
+ ret = -ENODEV;
|
|
|
|
+ if (reset)
|
|
|
|
+ ret = reset(dev_priv, engine_mask);
|
|
if (ret != -ETIMEDOUT)
|
|
if (ret != -ETIMEDOUT)
|
|
break;
|
|
break;
|
|
|
|
|