diff options
| -rw-r--r-- | drivers/gpu/drm/i915/gvt/cmd_parser.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_userptr.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_breadcrumbs.c | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_uncore.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_uncore.h | 1 |
6 files changed, 23 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c index 701a3c6f1669..85d4c57870fb 100644 --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c | |||
| @@ -1628,7 +1628,7 @@ static int perform_bb_shadow(struct parser_exec_state *s) | |||
| 1628 | struct intel_shadow_bb_entry *entry_obj; | 1628 | struct intel_shadow_bb_entry *entry_obj; |
| 1629 | struct intel_vgpu *vgpu = s->vgpu; | 1629 | struct intel_vgpu *vgpu = s->vgpu; |
| 1630 | unsigned long gma = 0; | 1630 | unsigned long gma = 0; |
| 1631 | uint32_t bb_size; | 1631 | int bb_size; |
| 1632 | void *dst = NULL; | 1632 | void *dst = NULL; |
| 1633 | int ret = 0; | 1633 | int ret = 0; |
| 1634 | 1634 | ||
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 3db5851756f0..7d9b07df32fa 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
| @@ -1714,6 +1714,7 @@ static int i915_drm_resume(struct drm_device *dev) | |||
| 1714 | intel_guc_resume(dev_priv); | 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 | 1718 | ||
| 1718 | spin_lock_irq(&dev_priv->irq_lock); | 1719 | spin_lock_irq(&dev_priv->irq_lock); |
| 1719 | if (dev_priv->display.hpd_irq_setup) | 1720 | if (dev_priv->display.hpd_irq_setup) |
| @@ -2618,6 +2619,8 @@ static int intel_runtime_resume(struct device *kdev) | |||
| 2618 | ret = vlv_resume_prepare(dev_priv, true); | 2619 | ret = vlv_resume_prepare(dev_priv, true); |
| 2619 | } | 2620 | } |
| 2620 | 2621 | ||
| 2622 | intel_uncore_runtime_resume(dev_priv); | ||
| 2623 | |||
| 2621 | /* | 2624 | /* |
| 2622 | * No point of rolling back things in case of an error, as the best | 2625 | * No point of rolling back things in case of an error, as the best |
| 2623 | * we can do is to hope that things will still work (and disable RPM). | 2626 | * we can do is to hope that things will still work (and disable RPM). |
diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c index e26b23171b56..ccde12d9e5f5 100644 --- a/drivers/gpu/drm/i915/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c | |||
| @@ -172,7 +172,9 @@ i915_mmu_notifier_create(struct mm_struct *mm) | |||
| 172 | spin_lock_init(&mn->lock); | 172 | spin_lock_init(&mn->lock); |
| 173 | mn->mn.ops = &i915_gem_userptr_notifier; | 173 | mn->mn.ops = &i915_gem_userptr_notifier; |
| 174 | mn->objects = RB_ROOT_CACHED; | 174 | mn->objects = RB_ROOT_CACHED; |
| 175 | mn->wq = alloc_workqueue("i915-userptr-release", WQ_UNBOUND, 0); | 175 | mn->wq = alloc_workqueue("i915-userptr-release", |
| 176 | WQ_UNBOUND | WQ_MEM_RECLAIM, | ||
| 177 | 0); | ||
| 176 | if (mn->wq == NULL) { | 178 | if (mn->wq == NULL) { |
| 177 | kfree(mn); | 179 | kfree(mn); |
| 178 | return ERR_PTR(-ENOMEM); | 180 | return ERR_PTR(-ENOMEM); |
| @@ -827,7 +829,7 @@ int i915_gem_init_userptr(struct drm_i915_private *dev_priv) | |||
| 827 | 829 | ||
| 828 | dev_priv->mm.userptr_wq = | 830 | dev_priv->mm.userptr_wq = |
| 829 | alloc_workqueue("i915-userptr-acquire", | 831 | alloc_workqueue("i915-userptr-acquire", |
| 830 | WQ_HIGHPRI | WQ_MEM_RECLAIM, | 832 | WQ_HIGHPRI | WQ_UNBOUND, |
| 831 | 0); | 833 | 0); |
| 832 | if (!dev_priv->mm.userptr_wq) | 834 | if (!dev_priv->mm.userptr_wq) |
| 833 | return -ENOMEM; | 835 | return -ENOMEM; |
diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c index 48e1ba01ccf8..5f8b9f1f40f1 100644 --- a/drivers/gpu/drm/i915/intel_breadcrumbs.c +++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c | |||
| @@ -517,6 +517,7 @@ static void __intel_engine_remove_wait(struct intel_engine_cs *engine, | |||
| 517 | 517 | ||
| 518 | GEM_BUG_ON(RB_EMPTY_NODE(&wait->node)); | 518 | GEM_BUG_ON(RB_EMPTY_NODE(&wait->node)); |
| 519 | rb_erase(&wait->node, &b->waiters); | 519 | rb_erase(&wait->node, &b->waiters); |
| 520 | RB_CLEAR_NODE(&wait->node); | ||
| 520 | 521 | ||
| 521 | out: | 522 | out: |
| 522 | GEM_BUG_ON(b->irq_wait == wait); | 523 | GEM_BUG_ON(b->irq_wait == wait); |
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index 20e3c65c0999..8c2ce81f01c2 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c | |||
| @@ -434,6 +434,12 @@ void intel_uncore_resume_early(struct drm_i915_private *dev_priv) | |||
| 434 | i915_check_and_clear_faults(dev_priv); | 434 | i915_check_and_clear_faults(dev_priv); |
| 435 | } | 435 | } |
| 436 | 436 | ||
| 437 | void intel_uncore_runtime_resume(struct drm_i915_private *dev_priv) | ||
| 438 | { | ||
| 439 | iosf_mbi_register_pmic_bus_access_notifier( | ||
| 440 | &dev_priv->uncore.pmic_bus_access_nb); | ||
| 441 | } | ||
| 442 | |||
| 437 | void intel_uncore_sanitize(struct drm_i915_private *dev_priv) | 443 | void intel_uncore_sanitize(struct drm_i915_private *dev_priv) |
| 438 | { | 444 | { |
| 439 | i915_modparams.enable_rc6 = | 445 | i915_modparams.enable_rc6 = |
| @@ -1240,8 +1246,15 @@ static int i915_pmic_bus_access_notifier(struct notifier_block *nb, | |||
| 1240 | * bus, which will be busy after this notification, leading to: | 1246 | * bus, which will be busy after this notification, leading to: |
| 1241 | * "render: timed out waiting for forcewake ack request." | 1247 | * "render: timed out waiting for forcewake ack request." |
| 1242 | * errors. | 1248 | * errors. |
| 1249 | * | ||
| 1250 | * The notifier is unregistered during intel_runtime_suspend(), | ||
| 1251 | * so it's ok to access the HW here without holding a RPM | ||
| 1252 | * wake reference -> disable wakeref asserts for the time of | ||
| 1253 | * the access. | ||
| 1243 | */ | 1254 | */ |
| 1255 | disable_rpm_wakeref_asserts(dev_priv); | ||
| 1244 | intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); | 1256 | intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); |
| 1257 | enable_rpm_wakeref_asserts(dev_priv); | ||
| 1245 | break; | 1258 | break; |
| 1246 | case MBI_PMIC_BUS_ACCESS_END: | 1259 | case MBI_PMIC_BUS_ACCESS_END: |
| 1247 | intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); | 1260 | intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); |
diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h index 582771251b57..9ce079b5dd0d 100644 --- a/drivers/gpu/drm/i915/intel_uncore.h +++ b/drivers/gpu/drm/i915/intel_uncore.h | |||
| @@ -134,6 +134,7 @@ bool intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv | |||
| 134 | void intel_uncore_fini(struct drm_i915_private *dev_priv); | 134 | void intel_uncore_fini(struct drm_i915_private *dev_priv); |
| 135 | void intel_uncore_suspend(struct drm_i915_private *dev_priv); | 135 | void intel_uncore_suspend(struct drm_i915_private *dev_priv); |
| 136 | void intel_uncore_resume_early(struct drm_i915_private *dev_priv); | 136 | void intel_uncore_resume_early(struct drm_i915_private *dev_priv); |
| 137 | void intel_uncore_runtime_resume(struct drm_i915_private *dev_priv); | ||
| 137 | 138 | ||
| 138 | u64 intel_uncore_edram_size(struct drm_i915_private *dev_priv); | 139 | u64 intel_uncore_edram_size(struct drm_i915_private *dev_priv); |
| 139 | void assert_forcewakes_inactive(struct drm_i915_private *dev_priv); | 140 | void assert_forcewakes_inactive(struct drm_i915_private *dev_priv); |
