|
@@ -248,7 +248,14 @@ static int fence_update(struct drm_i915_fence_reg *fence,
|
|
|
list_move(&fence->link, &fence->i915->mm.fence_list);
|
|
|
}
|
|
|
|
|
|
- fence_write(fence, vma);
|
|
|
+ /* We only need to update the register itself if the device is awake.
|
|
|
+ * If the device is currently powered down, we will defer the write
|
|
|
+ * to the runtime resume, see i915_gem_restore_fences().
|
|
|
+ */
|
|
|
+ if (intel_runtime_pm_get_if_in_use(fence->i915)) {
|
|
|
+ fence_write(fence, vma);
|
|
|
+ intel_runtime_pm_put(fence->i915);
|
|
|
+ }
|
|
|
|
|
|
if (vma) {
|
|
|
if (fence->vma != vma) {
|
|
@@ -278,8 +285,6 @@ i915_vma_put_fence(struct i915_vma *vma)
|
|
|
{
|
|
|
struct drm_i915_fence_reg *fence = vma->fence;
|
|
|
|
|
|
- assert_rpm_wakelock_held(vma->vm->i915);
|
|
|
-
|
|
|
if (!fence)
|
|
|
return 0;
|
|
|
|