Lines Matching full:crtc

80 intel_drrs_set_refresh_rate_pipeconf(struct intel_crtc *crtc,  in intel_drrs_set_refresh_rate_pipeconf()  argument
83 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); in intel_drrs_set_refresh_rate_pipeconf()
84 enum transcoder cpu_transcoder = crtc->drrs.cpu_transcoder; in intel_drrs_set_refresh_rate_pipeconf()
97 intel_drrs_set_refresh_rate_m_n(struct intel_crtc *crtc, in intel_drrs_set_refresh_rate_m_n() argument
100 intel_cpu_transcoder_set_m1_n1(crtc, crtc->drrs.cpu_transcoder, in intel_drrs_set_refresh_rate_m_n()
102 &crtc->drrs.m2_n2 : &crtc->drrs.m_n); in intel_drrs_set_refresh_rate_m_n()
105 bool intel_drrs_is_active(struct intel_crtc *crtc) in intel_drrs_is_active() argument
107 return crtc->drrs.cpu_transcoder != INVALID_TRANSCODER; in intel_drrs_is_active()
110 static void intel_drrs_set_state(struct intel_crtc *crtc, in intel_drrs_set_state() argument
113 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); in intel_drrs_set_state()
115 if (refresh_rate == crtc->drrs.refresh_rate) in intel_drrs_set_state()
118 if (intel_cpu_transcoder_has_m2_n2(dev_priv, crtc->drrs.cpu_transcoder)) in intel_drrs_set_state()
119 intel_drrs_set_refresh_rate_pipeconf(crtc, refresh_rate); in intel_drrs_set_state()
121 intel_drrs_set_refresh_rate_m_n(crtc, refresh_rate); in intel_drrs_set_state()
123 crtc->drrs.refresh_rate = refresh_rate; in intel_drrs_set_state()
126 static void intel_drrs_schedule_work(struct intel_crtc *crtc) in intel_drrs_schedule_work() argument
128 struct drm_i915_private *i915 = to_i915(crtc->base.dev); in intel_drrs_schedule_work()
130 mod_delayed_work(i915->unordered_wq, &crtc->drrs.work, msecs_to_jiffies(1000)); in intel_drrs_schedule_work()
135 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in intel_drrs_frontbuffer_bits() local
136 struct drm_i915_private *i915 = to_i915(crtc->base.dev); in intel_drrs_frontbuffer_bits()
139 frontbuffer_bits = INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe); in intel_drrs_frontbuffer_bits()
141 for_each_intel_crtc_in_pipe_mask(&i915->drm, crtc, in intel_drrs_frontbuffer_bits()
143 frontbuffer_bits |= INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe); in intel_drrs_frontbuffer_bits()
150 * @crtc_state: the crtc state
152 * Activates DRRS on the crtc.
156 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in intel_drrs_activate() local
167 mutex_lock(&crtc->drrs.mutex); in intel_drrs_activate()
169 crtc->drrs.cpu_transcoder = crtc_state->cpu_transcoder; in intel_drrs_activate()
170 crtc->drrs.m_n = crtc_state->dp_m_n; in intel_drrs_activate()
171 crtc->drrs.m2_n2 = crtc_state->dp_m2_n2; in intel_drrs_activate()
172 crtc->drrs.frontbuffer_bits = intel_drrs_frontbuffer_bits(crtc_state); in intel_drrs_activate()
173 crtc->drrs.busy_frontbuffer_bits = 0; in intel_drrs_activate()
175 intel_drrs_schedule_work(crtc); in intel_drrs_activate()
177 mutex_unlock(&crtc->drrs.mutex); in intel_drrs_activate()
182 * @old_crtc_state: the old crtc state
184 * Deactivates DRRS on the crtc.
188 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); in intel_drrs_deactivate() local
199 mutex_lock(&crtc->drrs.mutex); in intel_drrs_deactivate()
201 if (intel_drrs_is_active(crtc)) in intel_drrs_deactivate()
202 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_HIGH); in intel_drrs_deactivate()
204 crtc->drrs.cpu_transcoder = INVALID_TRANSCODER; in intel_drrs_deactivate()
205 crtc->drrs.frontbuffer_bits = 0; in intel_drrs_deactivate()
206 crtc->drrs.busy_frontbuffer_bits = 0; in intel_drrs_deactivate()
208 mutex_unlock(&crtc->drrs.mutex); in intel_drrs_deactivate()
210 cancel_delayed_work_sync(&crtc->drrs.work); in intel_drrs_deactivate()
215 struct intel_crtc *crtc = container_of(work, typeof(*crtc), drrs.work.work); in intel_drrs_downclock_work() local
217 mutex_lock(&crtc->drrs.mutex); in intel_drrs_downclock_work()
219 if (intel_drrs_is_active(crtc) && !crtc->drrs.busy_frontbuffer_bits) in intel_drrs_downclock_work()
220 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_LOW); in intel_drrs_downclock_work()
222 mutex_unlock(&crtc->drrs.mutex); in intel_drrs_downclock_work()
229 struct intel_crtc *crtc; in intel_drrs_frontbuffer_update() local
231 for_each_intel_crtc(&dev_priv->drm, crtc) { in intel_drrs_frontbuffer_update()
234 mutex_lock(&crtc->drrs.mutex); in intel_drrs_frontbuffer_update()
236 frontbuffer_bits = all_frontbuffer_bits & crtc->drrs.frontbuffer_bits; in intel_drrs_frontbuffer_update()
238 mutex_unlock(&crtc->drrs.mutex); in intel_drrs_frontbuffer_update()
243 crtc->drrs.busy_frontbuffer_bits |= frontbuffer_bits; in intel_drrs_frontbuffer_update()
245 crtc->drrs.busy_frontbuffer_bits &= ~frontbuffer_bits; in intel_drrs_frontbuffer_update()
248 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_HIGH); in intel_drrs_frontbuffer_update()
254 if (!crtc->drrs.busy_frontbuffer_bits) in intel_drrs_frontbuffer_update()
255 intel_drrs_schedule_work(crtc); in intel_drrs_frontbuffer_update()
257 cancel_delayed_work(&crtc->drrs.work); in intel_drrs_frontbuffer_update()
259 mutex_unlock(&crtc->drrs.mutex); in intel_drrs_frontbuffer_update()
285 * completed or flip on a crtc is completed. So DRRS should be upclocked
298 * intel_drrs_crtc_init - Init DRRS for CRTC
299 * @crtc: crtc
305 void intel_drrs_crtc_init(struct intel_crtc *crtc) in intel_drrs_crtc_init() argument
307 INIT_DELAYED_WORK(&crtc->drrs.work, intel_drrs_downclock_work); in intel_drrs_crtc_init()
308 mutex_init(&crtc->drrs.mutex); in intel_drrs_crtc_init()
309 crtc->drrs.cpu_transcoder = INVALID_TRANSCODER; in intel_drrs_crtc_init()
314 struct intel_crtc *crtc = m->private; in intel_drrs_debugfs_status_show() local
315 struct drm_i915_private *i915 = to_i915(crtc->base.dev); in intel_drrs_debugfs_status_show()
319 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex); in intel_drrs_debugfs_status_show()
323 crtc_state = to_intel_crtc_state(crtc->base.state); in intel_drrs_debugfs_status_show()
325 mutex_lock(&crtc->drrs.mutex); in intel_drrs_debugfs_status_show()
335 str_yes_no(intel_drrs_is_active(crtc))); in intel_drrs_debugfs_status_show()
338 crtc->drrs.refresh_rate == DRRS_REFRESH_RATE_LOW ? in intel_drrs_debugfs_status_show()
342 crtc->drrs.busy_frontbuffer_bits); in intel_drrs_debugfs_status_show()
344 mutex_unlock(&crtc->drrs.mutex); in intel_drrs_debugfs_status_show()
346 drm_modeset_unlock(&crtc->base.mutex); in intel_drrs_debugfs_status_show()
355 struct intel_crtc *crtc = data; in intel_drrs_debugfs_ctl_set() local
356 struct drm_i915_private *i915 = to_i915(crtc->base.dev); in intel_drrs_debugfs_ctl_set()
361 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex); in intel_drrs_debugfs_ctl_set()
365 crtc_state = to_intel_crtc_state(crtc->base.state); in intel_drrs_debugfs_ctl_set()
387 drm_modeset_unlock(&crtc->base.mutex); in intel_drrs_debugfs_ctl_set()
395 void intel_drrs_crtc_debugfs_add(struct intel_crtc *crtc) in intel_drrs_crtc_debugfs_add() argument
397 debugfs_create_file("i915_drrs_status", 0444, crtc->base.debugfs_entry, in intel_drrs_crtc_debugfs_add()
398 crtc, &intel_drrs_debugfs_status_fops); in intel_drrs_crtc_debugfs_add()
400 debugfs_create_file_unsafe("i915_drrs_ctl", 0644, crtc->base.debugfs_entry, in intel_drrs_crtc_debugfs_add()
401 crtc, &intel_drrs_debugfs_ctl_fops); in intel_drrs_crtc_debugfs_add()