Lines Matching refs:asyw
112 nv50_wndw_wait_armed(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) in nv50_wndw_wait_armed() argument
115 if (asyw->set.ntfy) { in nv50_wndw_wait_armed()
117 asyw->ntfy.offset, in nv50_wndw_wait_armed()
125 struct nv50_wndw_atom *asyw) in nv50_wndw_flush_clr() argument
128 .mask = asyw->clr.mask & ~(flush ? 0 : asyw->set.mask), in nv50_wndw_flush_clr()
141 struct nv50_wndw_atom *asyw) in nv50_wndw_flush_set() argument
144 asyw->image.mode = NV507C_SET_PRESENT_CONTROL_BEGIN_MODE_NON_TEARING; in nv50_wndw_flush_set()
145 asyw->image.interval = 1; in nv50_wndw_flush_set()
148 if (asyw->set.sema ) wndw->func->sema_set (wndw, asyw); in nv50_wndw_flush_set()
149 if (asyw->set.ntfy ) wndw->func->ntfy_set (wndw, asyw); in nv50_wndw_flush_set()
150 if (asyw->set.image) wndw->func->image_set(wndw, asyw); in nv50_wndw_flush_set()
152 if (asyw->set.xlut ) { in nv50_wndw_flush_set()
153 if (asyw->ilut) { in nv50_wndw_flush_set()
154 asyw->xlut.i.offset = in nv50_wndw_flush_set()
155 nv50_lut_load(&wndw->ilut, asyw->xlut.i.buffer, in nv50_wndw_flush_set()
156 asyw->ilut, asyw->xlut.i.load); in nv50_wndw_flush_set()
158 wndw->func->xlut_set(wndw, asyw); in nv50_wndw_flush_set()
161 if (asyw->set.csc ) wndw->func->csc_set (wndw, asyw); in nv50_wndw_flush_set()
162 if (asyw->set.scale) wndw->func->scale_set(wndw, asyw); in nv50_wndw_flush_set()
163 if (asyw->set.blend) wndw->func->blend_set(wndw, asyw); in nv50_wndw_flush_set()
164 if (asyw->set.point) { in nv50_wndw_flush_set()
165 if (asyw->set.point = false, asyw->set.mask) in nv50_wndw_flush_set()
169 wndw->immd->point(wndw, asyw); in nv50_wndw_flush_set()
177 nv50_wndw_ntfy_enable(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw) in nv50_wndw_ntfy_enable() argument
181 asyw->ntfy.handle = wndw->wndw.sync.handle; in nv50_wndw_ntfy_enable()
182 asyw->ntfy.offset = wndw->ntfy; in nv50_wndw_ntfy_enable()
183 asyw->ntfy.awaken = false; in nv50_wndw_ntfy_enable()
184 asyw->set.ntfy = true; in nv50_wndw_ntfy_enable()
192 struct nv50_wndw_atom *asyw, in nv50_wndw_atomic_check_release() argument
197 wndw->func->release(wndw, asyw, asyh); in nv50_wndw_atomic_check_release()
198 asyw->ntfy.handle = 0; in nv50_wndw_atomic_check_release()
199 asyw->sema.handle = 0; in nv50_wndw_atomic_check_release()
200 asyw->xlut.handle = 0; in nv50_wndw_atomic_check_release()
201 memset(asyw->image.handle, 0x00, sizeof(asyw->image.handle)); in nv50_wndw_atomic_check_release()
205 nv50_wndw_atomic_check_acquire_yuv(struct nv50_wndw_atom *asyw) in nv50_wndw_atomic_check_acquire_yuv() argument
207 switch (asyw->state.fb->format->format) { in nv50_wndw_atomic_check_acquire_yuv()
209 asyw->image.format = NV507E_SURFACE_SET_PARAMS_FORMAT_VE8YO8UE8YE8; in nv50_wndw_atomic_check_acquire_yuv()
212 asyw->image.format = NV507E_SURFACE_SET_PARAMS_FORMAT_YO8VE8YE8UE8; in nv50_wndw_atomic_check_acquire_yuv()
219 asyw->image.colorspace = NV507E_SURFACE_SET_PARAMS_COLOR_SPACE_YUV_601; in nv50_wndw_atomic_check_acquire_yuv()
224 nv50_wndw_atomic_check_acquire_rgb(struct nv50_wndw_atom *asyw) in nv50_wndw_atomic_check_acquire_rgb() argument
226 switch (asyw->state.fb->format->format) { in nv50_wndw_atomic_check_acquire_rgb()
228 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_I8; in nv50_wndw_atomic_check_acquire_rgb()
232 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_A8R8G8B8; in nv50_wndw_atomic_check_acquire_rgb()
235 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_R5G6B5; in nv50_wndw_atomic_check_acquire_rgb()
239 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_A1R5G5B5; in nv50_wndw_atomic_check_acquire_rgb()
243 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_A2B10G10R10; in nv50_wndw_atomic_check_acquire_rgb()
247 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_A8B8G8R8; in nv50_wndw_atomic_check_acquire_rgb()
251 asyw->image.format = NVC37E_SET_PARAMS_FORMAT_A2R10G10B10; in nv50_wndw_atomic_check_acquire_rgb()
255 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_RF16_GF16_BF16_AF16; in nv50_wndw_atomic_check_acquire_rgb()
261 asyw->image.colorspace = NV507E_SURFACE_SET_PARAMS_COLOR_SPACE_RGB; in nv50_wndw_atomic_check_acquire_rgb()
268 struct nv50_wndw_atom *asyw, in nv50_wndw_atomic_check_acquire() argument
271 struct drm_framebuffer *fb = asyw->state.fb; in nv50_wndw_atomic_check_acquire()
282 asyw->image.w = fb->width; in nv50_wndw_atomic_check_acquire()
283 asyw->image.h = fb->height; in nv50_wndw_atomic_check_acquire()
284 asyw->image.kind = kind; in nv50_wndw_atomic_check_acquire()
286 ret = nv50_wndw_atomic_check_acquire_rgb(asyw); in nv50_wndw_atomic_check_acquire()
288 ret = nv50_wndw_atomic_check_acquire_yuv(asyw); in nv50_wndw_atomic_check_acquire()
293 if (asyw->image.kind) { in nv50_wndw_atomic_check_acquire()
294 asyw->image.layout = NV507C_SURFACE_SET_STORAGE_MEMORY_LAYOUT_BLOCKLINEAR; in nv50_wndw_atomic_check_acquire()
296 asyw->image.blockh = tile_mode >> 4; in nv50_wndw_atomic_check_acquire()
298 asyw->image.blockh = tile_mode; in nv50_wndw_atomic_check_acquire()
299 asyw->image.blocks[0] = fb->pitches[0] / 64; in nv50_wndw_atomic_check_acquire()
300 asyw->image.pitch[0] = 0; in nv50_wndw_atomic_check_acquire()
302 asyw->image.layout = NV507C_SURFACE_SET_STORAGE_MEMORY_LAYOUT_PITCH; in nv50_wndw_atomic_check_acquire()
303 asyw->image.blockh = NV507C_SURFACE_SET_STORAGE_BLOCK_HEIGHT_ONE_GOB; in nv50_wndw_atomic_check_acquire()
304 asyw->image.blocks[0] = 0; in nv50_wndw_atomic_check_acquire()
305 asyw->image.pitch[0] = fb->pitches[0]; in nv50_wndw_atomic_check_acquire()
309 asyw->image.interval = 1; in nv50_wndw_atomic_check_acquire()
311 asyw->image.interval = 0; in nv50_wndw_atomic_check_acquire()
313 if (asyw->image.interval) in nv50_wndw_atomic_check_acquire()
314 asyw->image.mode = NV507C_SET_PRESENT_CONTROL_BEGIN_MODE_NON_TEARING; in nv50_wndw_atomic_check_acquire()
316 asyw->image.mode = NV507C_SET_PRESENT_CONTROL_BEGIN_MODE_IMMEDIATE; in nv50_wndw_atomic_check_acquire()
318 asyw->set.image = wndw->func->image_set != NULL; in nv50_wndw_atomic_check_acquire()
322 asyw->scale.sx = asyw->state.src_x >> 16; in nv50_wndw_atomic_check_acquire()
323 asyw->scale.sy = asyw->state.src_y >> 16; in nv50_wndw_atomic_check_acquire()
324 asyw->scale.sw = asyw->state.src_w >> 16; in nv50_wndw_atomic_check_acquire()
325 asyw->scale.sh = asyw->state.src_h >> 16; in nv50_wndw_atomic_check_acquire()
326 asyw->scale.dw = asyw->state.crtc_w; in nv50_wndw_atomic_check_acquire()
327 asyw->scale.dh = asyw->state.crtc_h; in nv50_wndw_atomic_check_acquire()
328 if (memcmp(&armw->scale, &asyw->scale, sizeof(asyw->scale))) in nv50_wndw_atomic_check_acquire()
329 asyw->set.scale = true; in nv50_wndw_atomic_check_acquire()
333 asyw->blend.depth = 255 - asyw->state.normalized_zpos; in nv50_wndw_atomic_check_acquire()
334 asyw->blend.k1 = asyw->state.alpha >> 8; in nv50_wndw_atomic_check_acquire()
335 switch (asyw->state.pixel_blend_mode) { in nv50_wndw_atomic_check_acquire()
337 asyw->blend.src_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_SRC_COLOR_FACTOR_MATCH_SELECT_K1; in nv50_wndw_atomic_check_acquire()
338 …asyw->blend.dst_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_DST_COLOR_FACTOR_MATCH_SELECT_NEG_K1_… in nv50_wndw_atomic_check_acquire()
341 …asyw->blend.src_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_SRC_COLOR_FACTOR_MATCH_SELECT_K1_TIME… in nv50_wndw_atomic_check_acquire()
342 …asyw->blend.dst_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_DST_COLOR_FACTOR_MATCH_SELECT_NEG_K1_… in nv50_wndw_atomic_check_acquire()
346 asyw->blend.src_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_SRC_COLOR_FACTOR_MATCH_SELECT_K1; in nv50_wndw_atomic_check_acquire()
347 … asyw->blend.dst_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_DST_COLOR_FACTOR_MATCH_SELECT_NEG_K1; in nv50_wndw_atomic_check_acquire()
350 if (memcmp(&armw->blend, &asyw->blend, sizeof(asyw->blend))) in nv50_wndw_atomic_check_acquire()
351 asyw->set.blend = true; in nv50_wndw_atomic_check_acquire()
355 asyw->point.x = asyw->state.crtc_x; in nv50_wndw_atomic_check_acquire()
356 asyw->point.y = asyw->state.crtc_y; in nv50_wndw_atomic_check_acquire()
357 if (memcmp(&armw->point, &asyw->point, sizeof(asyw->point))) in nv50_wndw_atomic_check_acquire()
358 asyw->set.point = true; in nv50_wndw_atomic_check_acquire()
361 return wndw->func->acquire(wndw, asyw, asyh); in nv50_wndw_atomic_check_acquire()
367 struct nv50_wndw_atom *asyw, in nv50_wndw_atomic_check_lut() argument
378 if (!ilut && asyw->state.fb->format->format == DRM_FORMAT_C8) { in nv50_wndw_atomic_check_lut()
385 asyw->visible = false; in nv50_wndw_atomic_check_lut()
396 asyw->state.fb->format->format != DRM_FORMAT_XBGR16161616F && in nv50_wndw_atomic_check_lut()
397 asyw->state.fb->format->format != DRM_FORMAT_ABGR16161616F) { in nv50_wndw_atomic_check_lut()
403 memset(&asyw->xlut, 0x00, sizeof(asyw->xlut)); in nv50_wndw_atomic_check_lut()
404 if ((asyw->ilut = wndw->func->ilut ? ilut : NULL)) { in nv50_wndw_atomic_check_lut()
405 if (!wndw->func->ilut(wndw, asyw, drm_color_lut_size(ilut))) { in nv50_wndw_atomic_check_lut()
409 asyw->xlut.handle = wndw->wndw.vram.handle; in nv50_wndw_atomic_check_lut()
410 asyw->xlut.i.buffer = !asyw->xlut.i.buffer; in nv50_wndw_atomic_check_lut()
411 asyw->set.xlut = true; in nv50_wndw_atomic_check_lut()
413 asyw->clr.xlut = armw->xlut.handle != 0; in nv50_wndw_atomic_check_lut()
418 (!armw->visible || (armw->xlut.handle && !asyw->xlut.handle))) in nv50_wndw_atomic_check_lut()
419 asyw->set.xlut = true; in nv50_wndw_atomic_check_lut()
423 wndw->func->csc(wndw, asyw, ctm); in nv50_wndw_atomic_check_lut()
424 asyw->csc.valid = true; in nv50_wndw_atomic_check_lut()
425 asyw->set.csc = true; in nv50_wndw_atomic_check_lut()
427 asyw->csc.valid = false; in nv50_wndw_atomic_check_lut()
428 asyw->clr.csc = armw->csc.valid; in nv50_wndw_atomic_check_lut()
442 struct nv50_wndw_atom *asyw = nv50_wndw_atom(state); in nv50_wndw_atomic_check() local
452 if (asyw->state.crtc) { in nv50_wndw_atomic_check()
453 asyh = nv50_head_atom_get(asyw->state.state, asyw->state.crtc); in nv50_wndw_atomic_check()
457 asyw->visible = asyh->state.active; in nv50_wndw_atomic_check()
459 asyw->visible = false; in nv50_wndw_atomic_check()
464 harm = nv50_head_atom_get(asyw->state.state, armw->state.crtc); in nv50_wndw_atomic_check()
470 if (asyw->visible && wndw->func->xlut_set && in nv50_wndw_atomic_check()
473 asyw->state.fb->format->format != in nv50_wndw_atomic_check()
475 ret = nv50_wndw_atomic_check_lut(wndw, armw, asyw, asyh); in nv50_wndw_atomic_check()
481 if (asyw->visible) { in nv50_wndw_atomic_check()
483 armw, asyw, asyh); in nv50_wndw_atomic_check()
490 nv50_wndw_atomic_check_release(wndw, asyw, harm); in nv50_wndw_atomic_check()
500 if (!asyw->visible || modeset) { in nv50_wndw_atomic_check()
501 asyw->clr.ntfy = armw->ntfy.handle != 0; in nv50_wndw_atomic_check()
502 asyw->clr.sema = armw->sema.handle != 0; in nv50_wndw_atomic_check()
503 asyw->clr.xlut = armw->xlut.handle != 0; in nv50_wndw_atomic_check()
504 if (asyw->clr.xlut && asyw->visible) in nv50_wndw_atomic_check()
505 asyw->set.xlut = asyw->xlut.handle != 0; in nv50_wndw_atomic_check()
506 asyw->clr.csc = armw->csc.valid; in nv50_wndw_atomic_check()
508 asyw->clr.image = armw->image.handle[0] != 0; in nv50_wndw_atomic_check()
534 struct nv50_wndw_atom *asyw = nv50_wndw_atom(state); in nv50_wndw_prepare_fb() local
541 if (!asyw->state.fb) in nv50_wndw_prepare_fb()
556 if (asyw->visible) in nv50_wndw_prepare_fb()
557 asyw->image.handle[0] = ctxdma->object.handle; in nv50_wndw_prepare_fb()
560 asyw->state.fence = dma_resv_get_excl_rcu(nvbo->bo.base.resv); in nv50_wndw_prepare_fb()
561 asyw->image.offset[0] = nvbo->offset; in nv50_wndw_prepare_fb()
564 asyh = nv50_head_atom_get(asyw->state.state, asyw->state.crtc); in nv50_wndw_prepare_fb()
568 wndw->func->prepare(wndw, asyh, asyw); in nv50_wndw_prepare_fb()
585 struct nv50_wndw_atom *asyw = nv50_wndw_atom(state); in nv50_wndw_atomic_destroy_state() local
586 __drm_atomic_helper_plane_destroy_state(&asyw->state); in nv50_wndw_atomic_destroy_state()
587 kfree(asyw); in nv50_wndw_atomic_destroy_state()
594 struct nv50_wndw_atom *asyw; in nv50_wndw_atomic_duplicate_state() local
595 if (!(asyw = kmalloc(sizeof(*asyw), GFP_KERNEL))) in nv50_wndw_atomic_duplicate_state()
597 __drm_atomic_helper_plane_duplicate_state(plane, &asyw->state); in nv50_wndw_atomic_duplicate_state()
598 asyw->sema = armw->sema; in nv50_wndw_atomic_duplicate_state()
599 asyw->ntfy = armw->ntfy; in nv50_wndw_atomic_duplicate_state()
600 asyw->ilut = NULL; in nv50_wndw_atomic_duplicate_state()
601 asyw->xlut = armw->xlut; in nv50_wndw_atomic_duplicate_state()
602 asyw->csc = armw->csc; in nv50_wndw_atomic_duplicate_state()
603 asyw->image = armw->image; in nv50_wndw_atomic_duplicate_state()
604 asyw->point = armw->point; in nv50_wndw_atomic_duplicate_state()
605 asyw->clr.mask = 0; in nv50_wndw_atomic_duplicate_state()
606 asyw->set.mask = 0; in nv50_wndw_atomic_duplicate_state()
607 return &asyw->state; in nv50_wndw_atomic_duplicate_state()
620 struct nv50_wndw_atom *asyw; in nv50_wndw_reset() local
622 if (WARN_ON(!(asyw = kzalloc(sizeof(*asyw), GFP_KERNEL)))) in nv50_wndw_reset()
628 __drm_atomic_helper_plane_reset(plane, &asyw->state); in nv50_wndw_reset()