Lines Matching refs:crtc

76 intel_drrs_set_refresh_rate_pipeconf(struct intel_crtc *crtc,
79 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
80 enum transcoder cpu_transcoder = crtc->drrs.cpu_transcoder;
93 intel_drrs_set_refresh_rate_m_n(struct intel_crtc *crtc,
96 intel_cpu_transcoder_set_m1_n1(crtc, crtc->drrs.cpu_transcoder,
98 &crtc->drrs.m2_n2 : &crtc->drrs.m_n);
101 bool intel_drrs_is_active(struct intel_crtc *crtc)
103 return crtc->drrs.cpu_transcoder != INVALID_TRANSCODER;
106 static void intel_drrs_set_state(struct intel_crtc *crtc,
109 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
111 if (refresh_rate == crtc->drrs.refresh_rate)
114 if (intel_cpu_transcoder_has_m2_n2(dev_priv, crtc->drrs.cpu_transcoder))
115 intel_drrs_set_refresh_rate_pipeconf(crtc, refresh_rate);
117 intel_drrs_set_refresh_rate_m_n(crtc, refresh_rate);
119 crtc->drrs.refresh_rate = refresh_rate;
122 static void intel_drrs_schedule_work(struct intel_crtc *crtc)
124 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
126 mod_delayed_work(i915->unordered_wq, &crtc->drrs.work, msecs_to_jiffies(1000));
131 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
132 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
135 frontbuffer_bits = INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe);
137 for_each_intel_crtc_in_pipe_mask(&i915->drm, crtc,
139 frontbuffer_bits |= INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe);
146 * @crtc_state: the crtc state
148 * Activates DRRS on the crtc.
152 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
163 mutex_lock(&crtc->drrs.mutex);
165 crtc->drrs.cpu_transcoder = crtc_state->cpu_transcoder;
166 crtc->drrs.m_n = crtc_state->dp_m_n;
167 crtc->drrs.m2_n2 = crtc_state->dp_m2_n2;
168 crtc->drrs.frontbuffer_bits = intel_drrs_frontbuffer_bits(crtc_state);
169 crtc->drrs.busy_frontbuffer_bits = 0;
171 intel_drrs_schedule_work(crtc);
173 mutex_unlock(&crtc->drrs.mutex);
178 * @old_crtc_state: the old crtc state
180 * Deactivates DRRS on the crtc.
184 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
195 mutex_lock(&crtc->drrs.mutex);
197 if (intel_drrs_is_active(crtc))
198 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_HIGH);
200 crtc->drrs.cpu_transcoder = INVALID_TRANSCODER;
201 crtc->drrs.frontbuffer_bits = 0;
202 crtc->drrs.busy_frontbuffer_bits = 0;
204 mutex_unlock(&crtc->drrs.mutex);
206 cancel_delayed_work_sync(&crtc->drrs.work);
211 struct intel_crtc *crtc = container_of(work, typeof(*crtc), drrs.work.work);
213 mutex_lock(&crtc->drrs.mutex);
215 if (intel_drrs_is_active(crtc) && !crtc->drrs.busy_frontbuffer_bits)
216 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_LOW);
218 mutex_unlock(&crtc->drrs.mutex);
225 struct intel_crtc *crtc;
227 for_each_intel_crtc(&dev_priv->drm, crtc) {
230 mutex_lock(&crtc->drrs.mutex);
232 frontbuffer_bits = all_frontbuffer_bits & crtc->drrs.frontbuffer_bits;
234 mutex_unlock(&crtc->drrs.mutex);
239 crtc->drrs.busy_frontbuffer_bits |= frontbuffer_bits;
241 crtc->drrs.busy_frontbuffer_bits &= ~frontbuffer_bits;
244 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_HIGH);
250 if (!crtc->drrs.busy_frontbuffer_bits)
251 intel_drrs_schedule_work(crtc);
253 cancel_delayed_work(&crtc->drrs.work);
255 mutex_unlock(&crtc->drrs.mutex);
281 * completed or flip on a crtc is completed. So DRRS should be upclocked
295 * @crtc: crtc
301 void intel_drrs_crtc_init(struct intel_crtc *crtc)
303 INIT_DELAYED_WORK(&crtc->drrs.work, intel_drrs_downclock_work);
304 mutex_init(&crtc->drrs.mutex);
305 crtc->drrs.cpu_transcoder = INVALID_TRANSCODER;
310 struct intel_crtc *crtc = m->private;
311 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
315 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
319 crtc_state = to_intel_crtc_state(crtc->base.state);
321 mutex_lock(&crtc->drrs.mutex);
331 str_yes_no(intel_drrs_is_active(crtc)));
334 crtc->drrs.refresh_rate == DRRS_REFRESH_RATE_LOW ?
338 crtc->drrs.busy_frontbuffer_bits);
340 mutex_unlock(&crtc->drrs.mutex);
342 drm_modeset_unlock(&crtc->base.mutex);
351 struct intel_crtc *crtc = data;
352 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
357 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
361 crtc_state = to_intel_crtc_state(crtc->base.state);
383 drm_modeset_unlock(&crtc->base.mutex);
391 void intel_drrs_crtc_debugfs_add(struct intel_crtc *crtc)
393 debugfs_create_file("i915_drrs_status", 0444, crtc->base.debugfs_entry,
394 crtc, &intel_drrs_debugfs_status_fops);
396 debugfs_create_file_unsafe("i915_drrs_ctl", 0644, crtc->base.debugfs_entry,
397 crtc, &intel_drrs_debugfs_ctl_fops);