Lines Matching +full:native +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0-only
36 const struct drm_display_mode mode = { in drm_sysfb_mode() local
40 return mode; in drm_sysfb_mode()
95 * drm_sysfb_build_fourcc_list - Filters a list of supported color formats against
96 * the device's native formats
109 * drm_universal_plane_init() et al. Native formats will go before
110 * emulated formats. Native formats with alpha channel will be replaced
117 * The number of color-formats 4CC codes returned in @fourccs_out.
139 * The device's native formats go first. in drm_sysfb_build_fourcc_list()
144 * Several DTs, boot loaders and firmware report native in drm_sysfb_build_fourcc_list()
145 * alpha formats that are non-alpha formats instead. So in drm_sysfb_build_fourcc_list()
146 * replace alpha formats by non-alpha formats. in drm_sysfb_build_fourcc_list()
150 if (is_listed_fourcc(fourccs_out, fourccs - fourccs_out, fourcc)) { in drm_sysfb_build_fourcc_list()
153 drm_warn(dev, "Ignoring native format %p4cc\n", &fourcc); in drm_sysfb_build_fourcc_list()
157 drm_dbg_kms(dev, "adding native format %p4cc\n", &fourcc); in drm_sysfb_build_fourcc_list()
170 if (is_listed_fourcc(fourccs_out, fourccs - fourccs_out, fourcc)) { in drm_sysfb_build_fourcc_list()
171 continue; /* skip duplicate and native entries */ in drm_sysfb_build_fourcc_list()
183 return fourccs - fourccs_out; in drm_sysfb_build_fourcc_list()
189 __drm_gem_destroy_shadow_plane_state(&sysfb_plane_state->base); in drm_sysfb_plane_state_destroy()
244 struct drm_device *dev = plane->dev; in drm_sysfb_plane_helper_begin_fb_access()
246 struct drm_framebuffer *fb = plane_state->fb; in drm_sysfb_plane_helper_begin_fb_access()
259 ret = -EINVAL; in drm_sysfb_plane_helper_begin_fb_access()
261 crtc_state = drm_atomic_get_new_crtc_state(plane_state->state, plane_state->crtc); in drm_sysfb_plane_helper_begin_fb_access()
266 if (drm_WARN_ON_ONCE(dev, !sysfb_crtc_state->format)) in drm_sysfb_plane_helper_begin_fb_access()
268 blit_to_crtc = drm_sysfb_get_blit_func(sysfb_crtc_state->format->format, in drm_sysfb_plane_helper_begin_fb_access()
269 fb->format->format); in drm_sysfb_plane_helper_begin_fb_access()
272 &fb->format->format, &sysfb_crtc_state->format->format); in drm_sysfb_plane_helper_begin_fb_access()
275 sysfb_plane_state->blit_to_crtc = blit_to_crtc; in drm_sysfb_plane_helper_begin_fb_access()
288 struct drm_sysfb_device *sysfb = to_drm_sysfb_device(plane->dev); in drm_sysfb_plane_helper_atomic_check()
292 struct drm_framebuffer *new_fb = new_plane_state->fb; in drm_sysfb_plane_helper_atomic_check()
293 struct drm_crtc *new_crtc = new_plane_state->crtc; in drm_sysfb_plane_helper_atomic_check()
299 new_crtc_state = drm_atomic_get_new_crtc_state(new_state, new_plane_state->crtc); in drm_sysfb_plane_helper_atomic_check()
307 else if (!new_plane_state->visible) in drm_sysfb_plane_helper_atomic_check()
310 new_crtc_state = drm_atomic_get_new_crtc_state(new_state, new_plane_state->crtc); in drm_sysfb_plane_helper_atomic_check()
313 new_sysfb_crtc_state->format = sysfb->fb_format; in drm_sysfb_plane_helper_atomic_check()
315 if (new_fb->format != new_sysfb_crtc_state->format) { in drm_sysfb_plane_helper_atomic_check()
319 buf = drm_format_conv_state_reserve(&new_shadow_plane_state->fmtcnv_state, in drm_sysfb_plane_helper_atomic_check()
320 sysfb->fb_pitch, GFP_KERNEL); in drm_sysfb_plane_helper_atomic_check()
322 return -ENOMEM; in drm_sysfb_plane_helper_atomic_check()
331 struct drm_device *dev = plane->dev; in drm_sysfb_plane_helper_atomic_update()
336 struct drm_shadow_plane_state *shadow_plane_state = &sysfb_plane_state->base; in drm_sysfb_plane_helper_atomic_update()
337 struct drm_framebuffer *fb = plane_state->fb; in drm_sysfb_plane_helper_atomic_update()
338 unsigned int dst_pitch = sysfb->fb_pitch; in drm_sysfb_plane_helper_atomic_update()
339 struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, plane_state->crtc); in drm_sysfb_plane_helper_atomic_update()
341 const struct drm_format_info *dst_format = sysfb_crtc_state->format; in drm_sysfb_plane_helper_atomic_update()
342 drm_sysfb_blit_func blit_to_crtc = sysfb_plane_state->blit_to_crtc; in drm_sysfb_plane_helper_atomic_update()
356 struct iosys_map dst = sysfb->fb_addr; in drm_sysfb_plane_helper_atomic_update()
357 struct drm_rect dst_clip = plane_state->dst; in drm_sysfb_plane_helper_atomic_update()
363 blit_to_crtc(&dst, &dst_pitch, shadow_plane_state->data, fb, &damage, in drm_sysfb_plane_helper_atomic_update()
364 &shadow_plane_state->fmtcnv_state); in drm_sysfb_plane_helper_atomic_update()
376 struct drm_device *dev = plane->dev; in drm_sysfb_plane_helper_atomic_disable()
378 struct iosys_map dst = sysfb->fb_addr; in drm_sysfb_plane_helper_atomic_disable()
381 unsigned int dst_pitch = sysfb->fb_pitch; in drm_sysfb_plane_helper_atomic_disable()
382 const struct drm_format_info *dst_format = sysfb->fb_format; in drm_sysfb_plane_helper_atomic_disable()
388 plane_state->src_x >> 16, plane_state->src_y >> 16, in drm_sysfb_plane_helper_atomic_disable()
389 plane_state->src_w >> 16, plane_state->src_h >> 16); in drm_sysfb_plane_helper_atomic_disable()
400 memset_io(dst_vmap, 0, linepixels * dst_format->cpp[0]); in drm_sysfb_plane_helper_atomic_disable()
411 struct drm_sysfb_device *sysfb = to_drm_sysfb_device(plane->dev); in drm_sysfb_plane_helper_get_scanout_buffer()
413 sb->width = sysfb->fb_mode.hdisplay; in drm_sysfb_plane_helper_get_scanout_buffer()
414 sb->height = sysfb->fb_mode.vdisplay; in drm_sysfb_plane_helper_get_scanout_buffer()
415 sb->format = sysfb->fb_format; in drm_sysfb_plane_helper_get_scanout_buffer()
416 sb->pitch[0] = sysfb->fb_pitch; in drm_sysfb_plane_helper_get_scanout_buffer()
417 sb->map[0] = sysfb->fb_addr; in drm_sysfb_plane_helper_get_scanout_buffer()
427 if (plane->state) in drm_sysfb_plane_reset()
428 drm_sysfb_plane_state_destroy(to_drm_sysfb_plane_state(plane->state)); in drm_sysfb_plane_reset()
432 __drm_gem_reset_shadow_plane(plane, &sysfb_plane_state->base); in drm_sysfb_plane_reset()
440 struct drm_device *dev = plane->dev; in drm_sysfb_plane_atomic_duplicate_state()
441 struct drm_plane_state *plane_state = plane->state; in drm_sysfb_plane_atomic_duplicate_state()
453 new_shadow_plane_state = &new_sysfb_plane_state->base; in drm_sysfb_plane_atomic_duplicate_state()
456 new_sysfb_plane_state->blit_to_crtc = sysfb_plane_state->blit_to_crtc; in drm_sysfb_plane_atomic_duplicate_state()
458 return &new_shadow_plane_state->base; in drm_sysfb_plane_atomic_duplicate_state()
475 __drm_atomic_helper_crtc_destroy_state(&sysfb_crtc_state->base); in drm_sysfb_crtc_state_destroy()
481 const struct drm_display_mode *mode) in drm_sysfb_crtc_helper_mode_valid() argument
483 struct drm_sysfb_device *sysfb = to_drm_sysfb_device(crtc->dev); in drm_sysfb_crtc_helper_mode_valid()
485 return drm_crtc_helper_mode_valid_fixed(crtc, mode, &sysfb->fb_mode); in drm_sysfb_crtc_helper_mode_valid()
491 struct drm_device *dev = crtc->dev; in drm_sysfb_crtc_helper_atomic_check()
496 if (!new_crtc_state->enable) in drm_sysfb_crtc_helper_atomic_check()
503 if (new_crtc_state->color_mgmt_changed) { in drm_sysfb_crtc_helper_atomic_check()
505 sysfb->fb_gamma_lut_size * sizeof(struct drm_color_lut); in drm_sysfb_crtc_helper_atomic_check()
506 const struct drm_property_blob *gamma_lut = new_crtc_state->gamma_lut; in drm_sysfb_crtc_helper_atomic_check()
508 if (gamma_lut && (gamma_lut->length != gamma_lut_length)) { in drm_sysfb_crtc_helper_atomic_check()
509 drm_dbg(dev, "Incorrect gamma_lut length %zu\n", gamma_lut->length); in drm_sysfb_crtc_helper_atomic_check()
510 return -EINVAL; in drm_sysfb_crtc_helper_atomic_check()
520 struct drm_sysfb_device *sysfb = to_drm_sysfb_device(crtc->dev); in drm_sysfb_crtc_reset()
523 if (crtc->state) in drm_sysfb_crtc_reset()
524 drm_sysfb_crtc_state_destroy(to_drm_sysfb_crtc_state(crtc->state)); in drm_sysfb_crtc_reset()
528 sysfb_crtc_state->format = sysfb->fb_format; in drm_sysfb_crtc_reset()
529 __drm_atomic_helper_crtc_reset(crtc, &sysfb_crtc_state->base); in drm_sysfb_crtc_reset()
538 struct drm_device *dev = crtc->dev; in drm_sysfb_crtc_atomic_duplicate_state()
539 struct drm_crtc_state *crtc_state = crtc->state; in drm_sysfb_crtc_atomic_duplicate_state()
552 __drm_atomic_helper_crtc_duplicate_state(crtc, &new_sysfb_crtc_state->base); in drm_sysfb_crtc_atomic_duplicate_state()
553 new_sysfb_crtc_state->format = sysfb_crtc_state->format; in drm_sysfb_crtc_atomic_duplicate_state()
555 return &new_sysfb_crtc_state->base; in drm_sysfb_crtc_atomic_duplicate_state()
572 const u8 *edid = sysfb->edid; in drm_sysfb_get_edid_block()
577 return -EINVAL; in drm_sysfb_get_edid_block()
579 return -EINVAL; in drm_sysfb_get_edid_block()
596 struct drm_sysfb_device *sysfb = to_drm_sysfb_device(connector->dev); in drm_sysfb_connector_helper_get_modes()
599 if (sysfb->edid) { in drm_sysfb_connector_helper_get_modes()
605 /* Return the fixed mode even with EDID */ in drm_sysfb_connector_helper_get_modes()
606 return drm_connector_helper_get_modes_fixed(connector, &sysfb->fb_mode); in drm_sysfb_connector_helper_get_modes()