• Home
  • Raw
  • Download

Lines Matching refs:crc

77 	core->func->crc->set_ctx(head, ctx);  in nv50_crc_program_ctx()
84 struct nv50_crc *crc = container_of(work, struct nv50_crc, flip_work); in nv50_crc_ctx_flip_work() local
85 struct nv50_head *head = container_of(crc, struct nv50_head, crc); in nv50_crc_ctx_flip_work()
88 u8 new_idx = crc->ctx_idx ^ 1; in nv50_crc_ctx_flip_work()
106 drm_crtc_index(crtc), crc->ctx_idx, new_idx); in nv50_crc_ctx_flip_work()
109 nv50_crc_program_ctx(head, &crc->ctx[new_idx]); in nv50_crc_ctx_flip_work()
112 spin_lock_irq(&crc->lock); in nv50_crc_ctx_flip_work()
113 crc->ctx_changed = true; in nv50_crc_ctx_flip_work()
114 spin_unlock_irq(&crc->lock); in nv50_crc_ctx_flip_work()
128 struct nv50_crc *crc = &head->crc; in nv50_crc_get_entries() local
131 while (crc->entry_idx < func->num_entries) { in nv50_crc_get_entries()
137 output_crc = func->get_entry(head, &crc->ctx[crc->ctx_idx], in nv50_crc_get_entries()
138 source, crc->entry_idx); in nv50_crc_get_entries()
142 drm_crtc_add_crc_entry(crtc, true, crc->frame, &output_crc); in nv50_crc_get_entries()
143 crc->frame++; in nv50_crc_get_entries()
144 crc->entry_idx++; in nv50_crc_get_entries()
151 struct nv50_crc *crc = &head->crc; in nv50_crc_handle_vblank() local
153 nv50_disp(head->base.base.dev)->core->func->crc; in nv50_crc_handle_vblank()
165 if (!spin_trylock(&crc->lock)) in nv50_crc_handle_vblank()
168 if (!crc->src) in nv50_crc_handle_vblank()
171 ctx = &crc->ctx[crc->ctx_idx]; in nv50_crc_handle_vblank()
172 if (crc->ctx_changed && func->ctx_finished(head, ctx)) { in nv50_crc_handle_vblank()
173 nv50_crc_get_entries(head, func, crc->src); in nv50_crc_handle_vblank()
175 crc->ctx_idx ^= 1; in nv50_crc_handle_vblank()
176 crc->entry_idx = 0; in nv50_crc_handle_vblank()
177 crc->ctx_changed = false; in nv50_crc_handle_vblank()
194 head->base.index, crc->frame); in nv50_crc_handle_vblank()
195 crc->frame++; in nv50_crc_handle_vblank()
201 nv50_crc_get_entries(head, func, crc->src); in nv50_crc_handle_vblank()
204 drm_vblank_work_schedule(&crc->flip_work, in nv50_crc_handle_vblank()
206 + crc->flip_threshold in nv50_crc_handle_vblank()
207 - crc->entry_idx, in nv50_crc_handle_vblank()
211 spin_unlock(&crc->lock); in nv50_crc_handle_vblank()
243 struct nv50_crc *crc = &head->crc; in nv50_crc_atomic_stop_reporting() local
245 if (!asyh->clr.crc) in nv50_crc_atomic_stop_reporting()
248 spin_lock_irq(&crc->lock); in nv50_crc_atomic_stop_reporting()
249 crc->src = NV50_CRC_SOURCE_NONE; in nv50_crc_atomic_stop_reporting()
250 spin_unlock_irq(&crc->lock); in nv50_crc_atomic_stop_reporting()
253 drm_vblank_work_cancel_sync(&crc->flip_work); in nv50_crc_atomic_stop_reporting()
275 struct nv50_crc *crc = &head->crc; in nv50_crc_atomic_init_notifier_contexts() local
278 if (!asyh->set.crc) in nv50_crc_atomic_init_notifier_contexts()
281 crc->entry_idx = 0; in nv50_crc_atomic_init_notifier_contexts()
282 crc->ctx_changed = false; in nv50_crc_atomic_init_notifier_contexts()
283 for (i = 0; i < ARRAY_SIZE(crc->ctx); i++) in nv50_crc_atomic_init_notifier_contexts()
284 nv50_crc_reset_ctx(&crc->ctx[i]); in nv50_crc_atomic_init_notifier_contexts()
291 nv50_disp(state->dev)->core->func->crc; in nv50_crc_atomic_release_notifier_contexts()
299 struct nv50_crc *crc = &head->crc; in nv50_crc_atomic_release_notifier_contexts() local
300 struct nv50_crc_notifier_ctx *ctx = &crc->ctx[crc->ctx_idx]; in nv50_crc_atomic_release_notifier_contexts()
302 if (!asyh->clr.crc) in nv50_crc_atomic_release_notifier_contexts()
305 if (crc->ctx_changed) { in nv50_crc_atomic_release_notifier_contexts()
307 ctx = &crc->ctx[crc->ctx_idx ^ 1]; in nv50_crc_atomic_release_notifier_contexts()
322 struct nv50_crc *crc = &head->crc; in nv50_crc_atomic_start_reporting() local
325 if (!asyh->set.crc) in nv50_crc_atomic_start_reporting()
330 spin_lock_irq(&crc->lock); in nv50_crc_atomic_start_reporting()
332 crc->frame = vbl_count; in nv50_crc_atomic_start_reporting()
333 crc->src = asyh->crc.src; in nv50_crc_atomic_start_reporting()
334 drm_vblank_work_schedule(&crc->flip_work, in nv50_crc_atomic_start_reporting()
335 vbl_count + crc->flip_threshold, in nv50_crc_atomic_start_reporting()
337 spin_unlock_irq(&crc->lock); in nv50_crc_atomic_start_reporting()
352 bool changed = armh->crc.src != asyh->crc.src; in nv50_crc_atomic_check_head()
354 if (!armh->crc.src && !asyh->crc.src) { in nv50_crc_atomic_check_head()
355 asyh->set.crc = false; in nv50_crc_atomic_check_head()
356 asyh->clr.crc = false; in nv50_crc_atomic_check_head()
364 if (asyh->crc.src && disp->disp->object.oclass >= GV100_DISP && in nv50_crc_atomic_check_head()
365 !(BIT(asyh->crc.wndw) & asyh->wndw.owned)) { in nv50_crc_atomic_check_head()
379 asyh->crc.wndw = ffs(asyh->wndw.owned) - 1; in nv50_crc_atomic_check_head()
383 armh->crc.wndw != asyh->crc.wndw) { in nv50_crc_atomic_check_head()
384 asyh->clr.crc = armh->crc.src && armh->state.active; in nv50_crc_atomic_check_head()
385 asyh->set.crc = asyh->crc.src && asyh->state.active; in nv50_crc_atomic_check_head()
390 if (asyh->clr.crc && asyh->set.crc) in nv50_crc_atomic_check_head()
393 asyh->set.crc = false; in nv50_crc_atomic_check_head()
394 asyh->clr.crc = false; in nv50_crc_atomic_check_head()
418 if (!asyh->clr.crc) in nv50_crc_atomic_check_outp()
465 struct nv50_crc *crc = &head->crc; in nv50_crc_atomic_set() local
466 const struct nv50_crc_func *func = nv50_disp(dev)->core->func->crc; in nv50_crc_atomic_set()
471 nv50_crc_source_type(outp, asyh->crc.src), in nv50_crc_atomic_set()
472 &crc->ctx[crc->ctx_idx], asyh->crc.wndw); in nv50_crc_atomic_set()
478 nv50_disp(head->base.base.dev)->core->func->crc; in nv50_crc_atomic_clr()
549 struct nv50_crc *crc = &head->crc; in nv50_crc_set_source() local
550 const struct nv50_crc_func *func = nv50_disp(dev)->core->func->crc; in nv50_crc_set_source()
577 for (i = 0; i < ARRAY_SIZE(head->crc.ctx); i++) { in nv50_crc_set_source()
578 ret = nv50_crc_ctx_init(head, mmu, &crc->ctx[i], in nv50_crc_set_source()
595 asyh->crc.src = source; in nv50_crc_set_source()
609 crc->flip_threshold = func->flip_threshold; in nv50_crc_set_source()
616 for (i = 0; i < ARRAY_SIZE(crc->ctx); i++) in nv50_crc_set_source()
617 nv50_crc_ctx_fini(&crc->ctx[i]); in nv50_crc_set_source()
635 struct nv50_crc *crc = &head->crc; in nv50_crc_debugfs_flip_threshold_get() local
642 seq_printf(m, "%d\n", crc->flip_threshold); in nv50_crc_debugfs_flip_threshold_get()
665 struct nv50_crc *crc = &head->crc; in nv50_crc_debugfs_flip_threshold_set() local
667 nv50_disp(crtc->dev)->core->func->crc; in nv50_crc_debugfs_flip_threshold_set()
686 if (armh->crc.src) { in nv50_crc_debugfs_flip_threshold_set()
694 crc->flip_threshold = value; in nv50_crc_debugfs_flip_threshold_set()
714 nv50_disp(crtc->dev)->core->func->crc; in nv50_head_crc_late_register()
731 struct nv50_crc *crc = &head->crc; in nv50_crc_init_head() local
733 crc->flip_threshold = func->flip_threshold; in nv50_crc_init_head()
734 spin_lock_init(&crc->lock); in nv50_crc_init_head()
735 drm_vblank_work_init(&crc->flip_work, &head->base.base, in nv50_crc_init_head()
743 const struct nv50_crc_func *func = disp->core->func->crc; in nv50_crc_init()