Skip to content

Commit 0576178

Browse files
committed
Merge tag 'drm-intel-next-fixes-2017-11-23' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
drm/i915 fixes for v4.15 * tag 'drm-intel-next-fixes-2017-11-23' of git://anongit.freedesktop.org/drm/drm-intel: drm/i915: Fix init_clock_gating for resume drm/i915: Mark the userptr invalidate workqueue as WQ_MEM_RECLAIM drm/i915: Clear breadcrumb node when cancelling signaling drm/i915/gvt: ensure -ve return value is handled correctly drm/i915: Re-register PMIC bus access notifier on runtime resume drm/i915: Fix false-positive assert_rpm_wakelock_held in i915_pmic_bus_access_notifier v2
2 parents 0b21871 + 3572f04 commit 0576178

File tree

6 files changed

+23
-3
lines changed

6 files changed

+23
-3
lines changed

drivers/gpu/drm/i915/gvt/cmd_parser.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1628,7 +1628,7 @@ static int perform_bb_shadow(struct parser_exec_state *s)
16281628
struct intel_shadow_bb_entry *entry_obj;
16291629
struct intel_vgpu *vgpu = s->vgpu;
16301630
unsigned long gma = 0;
1631-
uint32_t bb_size;
1631+
int bb_size;
16321632
void *dst = NULL;
16331633
int ret = 0;
16341634

drivers/gpu/drm/i915/i915_drv.c

+3
Original file line numberDiff line numberDiff line change
@@ -1714,6 +1714,7 @@ static int i915_drm_resume(struct drm_device *dev)
17141714
intel_guc_resume(dev_priv);
17151715

17161716
intel_modeset_init_hw(dev);
1717+
intel_init_clock_gating(dev_priv);
17171718

17181719
spin_lock_irq(&dev_priv->irq_lock);
17191720
if (dev_priv->display.hpd_irq_setup)
@@ -2618,6 +2619,8 @@ static int intel_runtime_resume(struct device *kdev)
26182619
ret = vlv_resume_prepare(dev_priv, true);
26192620
}
26202621

2622+
intel_uncore_runtime_resume(dev_priv);
2623+
26212624
/*
26222625
* No point of rolling back things in case of an error, as the best
26232626
* we can do is to hope that things will still work (and disable RPM).

drivers/gpu/drm/i915/i915_gem_userptr.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,9 @@ i915_mmu_notifier_create(struct mm_struct *mm)
172172
spin_lock_init(&mn->lock);
173173
mn->mn.ops = &i915_gem_userptr_notifier;
174174
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);
176178
if (mn->wq == NULL) {
177179
kfree(mn);
178180
return ERR_PTR(-ENOMEM);
@@ -827,7 +829,7 @@ int i915_gem_init_userptr(struct drm_i915_private *dev_priv)
827829

828830
dev_priv->mm.userptr_wq =
829831
alloc_workqueue("i915-userptr-acquire",
830-
WQ_HIGHPRI | WQ_MEM_RECLAIM,
832+
WQ_HIGHPRI | WQ_UNBOUND,
831833
0);
832834
if (!dev_priv->mm.userptr_wq)
833835
return -ENOMEM;

drivers/gpu/drm/i915/intel_breadcrumbs.c

+1
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@ static void __intel_engine_remove_wait(struct intel_engine_cs *engine,
517517

518518
GEM_BUG_ON(RB_EMPTY_NODE(&wait->node));
519519
rb_erase(&wait->node, &b->waiters);
520+
RB_CLEAR_NODE(&wait->node);
520521

521522
out:
522523
GEM_BUG_ON(b->irq_wait == wait);

drivers/gpu/drm/i915/intel_uncore.c

+13
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,12 @@ void intel_uncore_resume_early(struct drm_i915_private *dev_priv)
434434
i915_check_and_clear_faults(dev_priv);
435435
}
436436

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+
437443
void intel_uncore_sanitize(struct drm_i915_private *dev_priv)
438444
{
439445
i915_modparams.enable_rc6 =
@@ -1240,8 +1246,15 @@ static int i915_pmic_bus_access_notifier(struct notifier_block *nb,
12401246
* bus, which will be busy after this notification, leading to:
12411247
* "render: timed out waiting for forcewake ack request."
12421248
* 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.
12431254
*/
1255+
disable_rpm_wakeref_asserts(dev_priv);
12441256
intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
1257+
enable_rpm_wakeref_asserts(dev_priv);
12451258
break;
12461259
case MBI_PMIC_BUS_ACCESS_END:
12471260
intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);

drivers/gpu/drm/i915/intel_uncore.h

+1
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ bool intel_uncore_arm_unclaimed_mmio_detection(struct drm_i915_private *dev_priv
134134
void intel_uncore_fini(struct drm_i915_private *dev_priv);
135135
void intel_uncore_suspend(struct drm_i915_private *dev_priv);
136136
void intel_uncore_resume_early(struct drm_i915_private *dev_priv);
137+
void intel_uncore_runtime_resume(struct drm_i915_private *dev_priv);
137138

138139
u64 intel_uncore_edram_size(struct drm_i915_private *dev_priv);
139140
void assert_forcewakes_inactive(struct drm_i915_private *dev_priv);

0 commit comments

Comments
 (0)