aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_drv.c')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c52
1 files changed, 31 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 2cf10d17acfb..5170a8ea83d4 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -372,9 +372,8 @@ static int i915_getparam(struct drm_device *dev, void *data,
372 value |= I915_SCHEDULER_CAP_ENABLED; 372 value |= I915_SCHEDULER_CAP_ENABLED;
373 value |= I915_SCHEDULER_CAP_PRIORITY; 373 value |= I915_SCHEDULER_CAP_PRIORITY;
374 374
375 if (INTEL_INFO(dev_priv)->has_logical_ring_preemption && 375 if (HAS_LOGICAL_RING_PREEMPTION(dev_priv) &&
376 i915_modparams.enable_execlists && 376 i915_modparams.enable_execlists)
377 !i915_modparams.enable_guc_submission)
378 value |= I915_SCHEDULER_CAP_PREEMPTION; 377 value |= I915_SCHEDULER_CAP_PREEMPTION;
379 } 378 }
380 break; 379 break;
@@ -407,6 +406,9 @@ static int i915_getparam(struct drm_device *dev, void *data,
407 */ 406 */
408 value = 1; 407 value = 1;
409 break; 408 break;
409 case I915_PARAM_HAS_CONTEXT_ISOLATION:
410 value = intel_engines_has_context_isolation(dev_priv);
411 break;
410 case I915_PARAM_SLICE_MASK: 412 case I915_PARAM_SLICE_MASK:
411 value = INTEL_INFO(dev_priv)->sseu.slice_mask; 413 value = INTEL_INFO(dev_priv)->sseu.slice_mask;
412 if (!value) 414 if (!value)
@@ -417,6 +419,9 @@ static int i915_getparam(struct drm_device *dev, void *data,
417 if (!value) 419 if (!value)
418 return -ENODEV; 420 return -ENODEV;
419 break; 421 break;
422 case I915_PARAM_CS_TIMESTAMP_FREQUENCY:
423 value = 1000 * INTEL_INFO(dev_priv)->cs_timestamp_frequency_khz;
424 break;
420 default: 425 default:
421 DRM_DEBUG("Unknown parameter %d\n", param->param); 426 DRM_DEBUG("Unknown parameter %d\n", param->param);
422 return -EINVAL; 427 return -EINVAL;
@@ -677,7 +682,7 @@ static int i915_load_modeset_init(struct drm_device *dev)
677 if (ret) 682 if (ret)
678 goto cleanup_uc; 683 goto cleanup_uc;
679 684
680 intel_modeset_gem_init(dev); 685 intel_setup_overlay(dev_priv);
681 686
682 if (INTEL_INFO(dev_priv)->num_pipes == 0) 687 if (INTEL_INFO(dev_priv)->num_pipes == 0)
683 return 0; 688 return 0;
@@ -838,6 +843,11 @@ static void i915_workqueues_cleanup(struct drm_i915_private *dev_priv)
838 * We don't keep the workarounds for pre-production hardware, so we expect our 843 * We don't keep the workarounds for pre-production hardware, so we expect our
839 * driver to fail on these machines in one way or another. A little warning on 844 * driver to fail on these machines in one way or another. A little warning on
840 * dmesg may help both the user and the bug triagers. 845 * dmesg may help both the user and the bug triagers.
846 *
847 * Our policy for removing pre-production workarounds is to keep the
848 * current gen workarounds as a guide to the bring-up of the next gen
849 * (workarounds have a habit of persisting!). Anything older than that
850 * should be removed along with the complications they introduce.
841 */ 851 */
842static void intel_detect_preproduction_hw(struct drm_i915_private *dev_priv) 852static void intel_detect_preproduction_hw(struct drm_i915_private *dev_priv)
843{ 853{
@@ -892,7 +902,6 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,
892 mutex_init(&dev_priv->backlight_lock); 902 mutex_init(&dev_priv->backlight_lock);
893 spin_lock_init(&dev_priv->uncore.lock); 903 spin_lock_init(&dev_priv->uncore.lock);
894 904
895 spin_lock_init(&dev_priv->mm.object_stat_lock);
896 mutex_init(&dev_priv->sb_lock); 905 mutex_init(&dev_priv->sb_lock);
897 mutex_init(&dev_priv->modeset_restore_lock); 906 mutex_init(&dev_priv->modeset_restore_lock);
898 mutex_init(&dev_priv->av_mutex); 907 mutex_init(&dev_priv->av_mutex);
@@ -1682,8 +1691,6 @@ static int i915_drm_resume(struct drm_device *dev)
1682 1691
1683 intel_csr_ucode_resume(dev_priv); 1692 intel_csr_ucode_resume(dev_priv);
1684 1693
1685 i915_gem_resume(dev_priv);
1686
1687 i915_restore_state(dev_priv); 1694 i915_restore_state(dev_priv);
1688 intel_pps_unlock_regs_wa(dev_priv); 1695 intel_pps_unlock_regs_wa(dev_priv);
1689 intel_opregion_setup(dev_priv); 1696 intel_opregion_setup(dev_priv);
@@ -1704,14 +1711,7 @@ static int i915_drm_resume(struct drm_device *dev)
1704 1711
1705 drm_mode_config_reset(dev); 1712 drm_mode_config_reset(dev);
1706 1713
1707 mutex_lock(&dev->struct_mutex); 1714 i915_gem_resume(dev_priv);
1708 if (i915_gem_init_hw(dev_priv)) {
1709 DRM_ERROR("failed to re-initialize GPU, declaring wedged!\n");
1710 i915_gem_set_wedged(dev_priv);
1711 }
1712 mutex_unlock(&dev->struct_mutex);
1713
1714 intel_guc_resume(dev_priv);
1715 1715
1716 intel_modeset_init_hw(dev); 1716 intel_modeset_init_hw(dev);
1717 intel_init_clock_gating(dev_priv); 1717 intel_init_clock_gating(dev_priv);
@@ -1745,8 +1745,6 @@ static int i915_drm_resume(struct drm_device *dev)
1745 1745
1746 intel_opregion_notify_adapter(dev_priv, PCI_D0); 1746 intel_opregion_notify_adapter(dev_priv, PCI_D0);
1747 1747
1748 intel_autoenable_gt_powersave(dev_priv);
1749
1750 enable_rpm_wakeref_asserts(dev_priv); 1748 enable_rpm_wakeref_asserts(dev_priv);
1751 1749
1752 return 0; 1750 return 0;
@@ -1952,6 +1950,12 @@ error:
1952 goto finish; 1950 goto finish;
1953} 1951}
1954 1952
1953static inline int intel_gt_reset_engine(struct drm_i915_private *dev_priv,
1954 struct intel_engine_cs *engine)
1955{
1956 return intel_gpu_reset(dev_priv, intel_engine_flag(engine));
1957}
1958
1955/** 1959/**
1956 * i915_reset_engine - reset GPU engine to recover from a hang 1960 * i915_reset_engine - reset GPU engine to recover from a hang
1957 * @engine: engine to reset 1961 * @engine: engine to reset
@@ -1986,10 +1990,14 @@ int i915_reset_engine(struct intel_engine_cs *engine, unsigned int flags)
1986 goto out; 1990 goto out;
1987 } 1991 }
1988 1992
1989 ret = intel_gpu_reset(engine->i915, intel_engine_flag(engine)); 1993 if (!engine->i915->guc.execbuf_client)
1994 ret = intel_gt_reset_engine(engine->i915, engine);
1995 else
1996 ret = intel_guc_reset_engine(&engine->i915->guc, engine);
1990 if (ret) { 1997 if (ret) {
1991 /* If we fail here, we expect to fallback to a global reset */ 1998 /* If we fail here, we expect to fallback to a global reset */
1992 DRM_DEBUG_DRIVER("Failed to reset %s, ret=%d\n", 1999 DRM_DEBUG_DRIVER("%sFailed to reset %s, ret=%d\n",
2000 engine->i915->guc.execbuf_client ? "GuC " : "",
1993 engine->name, ret); 2001 engine->name, ret);
1994 goto out; 2002 goto out;
1995 } 2003 }
@@ -2524,6 +2532,8 @@ static int intel_runtime_suspend(struct device *kdev)
2524 2532
2525 intel_runtime_pm_disable_interrupts(dev_priv); 2533 intel_runtime_pm_disable_interrupts(dev_priv);
2526 2534
2535 intel_uncore_suspend(dev_priv);
2536
2527 ret = 0; 2537 ret = 0;
2528 if (IS_GEN9_LP(dev_priv)) { 2538 if (IS_GEN9_LP(dev_priv)) {
2529 bxt_display_core_uninit(dev_priv); 2539 bxt_display_core_uninit(dev_priv);
@@ -2536,6 +2546,8 @@ static int intel_runtime_suspend(struct device *kdev)
2536 2546
2537 if (ret) { 2547 if (ret) {
2538 DRM_ERROR("Runtime suspend failed, disabling it (%d)\n", ret); 2548 DRM_ERROR("Runtime suspend failed, disabling it (%d)\n", ret);
2549 intel_uncore_runtime_resume(dev_priv);
2550
2539 intel_runtime_pm_enable_interrupts(dev_priv); 2551 intel_runtime_pm_enable_interrupts(dev_priv);
2540 2552
2541 enable_rpm_wakeref_asserts(dev_priv); 2553 enable_rpm_wakeref_asserts(dev_priv);
@@ -2543,8 +2555,6 @@ static int intel_runtime_suspend(struct device *kdev)
2543 return ret; 2555 return ret;
2544 } 2556 }
2545 2557
2546 intel_uncore_suspend(dev_priv);
2547
2548 enable_rpm_wakeref_asserts(dev_priv); 2558 enable_rpm_wakeref_asserts(dev_priv);
2549 WARN_ON_ONCE(atomic_read(&dev_priv->runtime_pm.wakeref_count)); 2559 WARN_ON_ONCE(atomic_read(&dev_priv->runtime_pm.wakeref_count));
2550 2560