Lines Matching full:crtc

79 intel_drrs_set_refresh_rate_pipeconf(struct intel_crtc *crtc,
82 struct intel_display *display = to_intel_display(crtc);
83 enum transcoder cpu_transcoder = crtc->drrs.cpu_transcoder;
96 intel_drrs_set_refresh_rate_m_n(struct intel_crtc *crtc,
99 intel_cpu_transcoder_set_m1_n1(crtc, crtc->drrs.cpu_transcoder,
101 &crtc->drrs.m2_n2 : &crtc->drrs.m_n);
104 bool intel_drrs_is_active(struct intel_crtc *crtc)
106 return crtc->drrs.cpu_transcoder != INVALID_TRANSCODER;
109 static void intel_drrs_set_state(struct intel_crtc *crtc,
112 struct intel_display *display = to_intel_display(crtc);
114 if (refresh_rate == crtc->drrs.refresh_rate)
117 if (intel_cpu_transcoder_has_m2_n2(display, crtc->drrs.cpu_transcoder))
118 intel_drrs_set_refresh_rate_pipeconf(crtc, refresh_rate);
120 intel_drrs_set_refresh_rate_m_n(crtc, refresh_rate);
122 crtc->drrs.refresh_rate = refresh_rate;
125 static void intel_drrs_schedule_work(struct intel_crtc *crtc)
127 struct intel_display *display = to_intel_display(crtc);
129 mod_delayed_work(display->wq.unordered, &crtc->drrs.work, msecs_to_jiffies(1000));
135 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
138 frontbuffer_bits = INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe);
140 for_each_intel_crtc_in_pipe_mask(display->drm, crtc,
142 frontbuffer_bits |= INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe);
149 * @crtc_state: the crtc state
151 * Activates DRRS on the crtc.
155 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
166 mutex_lock(&crtc->drrs.mutex);
168 crtc->drrs.cpu_transcoder = crtc_state->cpu_transcoder;
169 crtc->drrs.m_n = crtc_state->dp_m_n;
170 crtc->drrs.m2_n2 = crtc_state->dp_m2_n2;
171 crtc->drrs.frontbuffer_bits = intel_drrs_frontbuffer_bits(crtc_state);
172 crtc->drrs.busy_frontbuffer_bits = 0;
174 intel_drrs_schedule_work(crtc);
176 mutex_unlock(&crtc->drrs.mutex);
181 * @old_crtc_state: the old crtc state
183 * Deactivates DRRS on the crtc.
187 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
198 mutex_lock(&crtc->drrs.mutex);
200 if (intel_drrs_is_active(crtc))
201 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_HIGH);
203 crtc->drrs.cpu_transcoder = INVALID_TRANSCODER;
204 crtc->drrs.frontbuffer_bits = 0;
205 crtc->drrs.busy_frontbuffer_bits = 0;
207 mutex_unlock(&crtc->drrs.mutex);
209 cancel_delayed_work_sync(&crtc->drrs.work);
214 struct intel_crtc *crtc = container_of(work, typeof(*crtc), drrs.work.work);
216 mutex_lock(&crtc->drrs.mutex);
218 if (intel_drrs_is_active(crtc) && !crtc->drrs.busy_frontbuffer_bits)
219 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_LOW);
221 mutex_unlock(&crtc->drrs.mutex);
228 struct intel_crtc *crtc;
230 for_each_intel_crtc(display->drm, crtc) {
233 mutex_lock(&crtc->drrs.mutex);
235 frontbuffer_bits = all_frontbuffer_bits & crtc->drrs.frontbuffer_bits;
237 mutex_unlock(&crtc->drrs.mutex);
242 crtc->drrs.busy_frontbuffer_bits |= frontbuffer_bits;
244 crtc->drrs.busy_frontbuffer_bits &= ~frontbuffer_bits;
247 intel_drrs_set_state(crtc, DRRS_REFRESH_RATE_HIGH);
253 if (!crtc->drrs.busy_frontbuffer_bits)
254 intel_drrs_schedule_work(crtc);
256 cancel_delayed_work(&crtc->drrs.work);
258 mutex_unlock(&crtc->drrs.mutex);
284 * completed or flip on a crtc is completed. So DRRS should be upclocked
297 * intel_drrs_crtc_init - Init DRRS for CRTC
298 * @crtc: crtc
304 void intel_drrs_crtc_init(struct intel_crtc *crtc)
306 INIT_DELAYED_WORK(&crtc->drrs.work, intel_drrs_downclock_work);
307 mutex_init(&crtc->drrs.mutex);
308 crtc->drrs.cpu_transcoder = INVALID_TRANSCODER;
313 struct intel_crtc *crtc = m->private;
314 struct intel_display *display = to_intel_display(crtc);
318 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
322 crtc_state = to_intel_crtc_state(crtc->base.state);
324 mutex_lock(&crtc->drrs.mutex);
334 str_yes_no(intel_drrs_is_active(crtc)));
337 crtc->drrs.refresh_rate == DRRS_REFRESH_RATE_LOW ?
341 crtc->drrs.busy_frontbuffer_bits);
343 mutex_unlock(&crtc->drrs.mutex);
345 drm_modeset_unlock(&crtc->base.mutex);
354 struct intel_crtc *crtc = data;
355 struct intel_display *display = to_intel_display(crtc);
360 ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
364 crtc_state = to_intel_crtc_state(crtc->base.state);
385 drm_modeset_unlock(&crtc->base.mutex);
393 void intel_drrs_crtc_debugfs_add(struct intel_crtc *crtc)
395 debugfs_create_file("i915_drrs_status", 0444, crtc->base.debugfs_entry,
396 crtc, &intel_drrs_debugfs_status_fops);
398 debugfs_create_file_unsafe("i915_drrs_ctl", 0644, crtc->base.debugfs_entry,
399 crtc, &intel_drrs_debugfs_ctl_fops);