diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 2ac71483cf12..21257faa3f8f 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -2312,6 +2312,7 @@ static int i915_rps_boost_info(struct seq_file *m, void *data) rcu_read_unlock(); } seq_printf(m, "Semaphore boosts: %d\n", dev_priv->rps.semaphores.rps_boosts); + seq_printf(m, "MMIO flip boosts: %d\n", dev_priv->rps.mmioflips.rps_boosts); seq_printf(m, "Kernel boosts: %d\n", dev_priv->rps.boosts); mutex_unlock(&dev_priv->rps.hw_lock); diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 2c44ca752e36..64d632941e06 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1087,6 +1087,7 @@ struct intel_gen6_power_mgmt { unsigned boosts; struct drm_i915_file_private semaphores; + struct drm_i915_file_private mmioflips; /* manual wa residency calculations */ struct intel_rps_ei up_ei, down_ei; diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 53ae5978491d..048565572764 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -10788,7 +10788,8 @@ static void intel_mmio_flip_work_func(struct work_struct *work) if (mmio_flip->req) WARN_ON(__i915_wait_request(mmio_flip->req, mmio_flip->crtc->reset_counter, - false, NULL, NULL)); + false, NULL, + &mmio_flip->i915->rps.mmioflips)); intel_do_mmio_flip(mmio_flip->crtc); @@ -10809,6 +10810,7 @@ static int intel_queue_mmio_flip(struct drm_device *dev, if (mmio_flip == NULL) return -ENOMEM; + mmio_flip->i915 = to_i915(dev); mmio_flip->req = i915_gem_request_reference(obj->last_write_req); mmio_flip->crtc = to_intel_crtc(crtc); diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index c3c42ead4b46..5afe1fe2bd6e 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -460,6 +460,7 @@ struct intel_pipe_wm { struct intel_mmio_flip { struct work_struct work; + struct drm_i915_private *i915; struct drm_i915_gem_request *req; struct intel_crtc *crtc; }; diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index da7120ddb485..48e86255b7c8 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -6885,6 +6885,7 @@ void intel_pm_setup(struct drm_device *dev) intel_gen6_powersave_work); INIT_LIST_HEAD(&dev_priv->rps.clients); INIT_LIST_HEAD(&dev_priv->rps.semaphores.rps_boost); + INIT_LIST_HEAD(&dev_priv->rps.mmioflips.rps_boost); dev_priv->pm.suspended = false; }