Lines Matching +full:layer +full:- +full:primary

1 // SPDX-License-Identifier: GPL-2.0
20 struct komeda_plane *kplane = to_kplane(st->plane); in komeda_plane_init_data_flow()
21 struct drm_framebuffer *fb = st->fb; in komeda_plane_init_data_flow()
22 const struct komeda_format_caps *caps = to_kfb(fb)->format_caps; in komeda_plane_init_data_flow()
23 struct komeda_pipeline *pipe = kplane->layer->base.pipeline; in komeda_plane_init_data_flow()
27 dflow->blending_zorder = st->normalized_zpos; in komeda_plane_init_data_flow()
28 if (pipe == to_kcrtc(st->crtc)->master) in komeda_plane_init_data_flow()
29 dflow->blending_zorder -= kcrtc_st->max_slave_zorder; in komeda_plane_init_data_flow()
30 if (dflow->blending_zorder < 0) { in komeda_plane_init_data_flow()
32 st->plane->name, st->normalized_zpos, in komeda_plane_init_data_flow()
33 kcrtc_st->max_slave_zorder); in komeda_plane_init_data_flow()
34 return -EINVAL; in komeda_plane_init_data_flow()
37 dflow->pixel_blend_mode = st->pixel_blend_mode; in komeda_plane_init_data_flow()
38 dflow->layer_alpha = st->alpha >> 8; in komeda_plane_init_data_flow()
40 dflow->out_x = st->crtc_x; in komeda_plane_init_data_flow()
41 dflow->out_y = st->crtc_y; in komeda_plane_init_data_flow()
42 dflow->out_w = st->crtc_w; in komeda_plane_init_data_flow()
43 dflow->out_h = st->crtc_h; in komeda_plane_init_data_flow()
45 dflow->in_x = st->src_x >> 16; in komeda_plane_init_data_flow()
46 dflow->in_y = st->src_y >> 16; in komeda_plane_init_data_flow()
47 dflow->in_w = st->src_w >> 16; in komeda_plane_init_data_flow()
48 dflow->in_h = st->src_h >> 16; in komeda_plane_init_data_flow()
50 dflow->rot = drm_rotation_simplify(st->rotation, caps->supported_rots); in komeda_plane_init_data_flow()
51 if (!has_bits(dflow->rot, caps->supported_rots)) { in komeda_plane_init_data_flow()
53 dflow->rot, &caps->fourcc, fb->modifier); in komeda_plane_init_data_flow()
54 return -EINVAL; in komeda_plane_init_data_flow()
57 komeda_complete_data_flow_cfg(kplane->layer, dflow, fb); in komeda_plane_init_data_flow()
63 * komeda_plane_atomic_check - build input data flow
68 * Zero for success or -errno
78 struct komeda_layer *layer = kplane->layer; in komeda_plane_atomic_check() local
84 if (!new_plane_state->crtc || !new_plane_state->fb) in komeda_plane_atomic_check()
88 new_plane_state->crtc); in komeda_plane_atomic_check()
89 if (IS_ERR(crtc_st) || !crtc_st->enable) { in komeda_plane_atomic_check()
91 return -EINVAL; in komeda_plane_atomic_check()
95 if (!crtc_st->active) in komeda_plane_atomic_check()
105 err = komeda_build_layer_split_data_flow(layer, in komeda_plane_atomic_check()
108 err = komeda_build_layer_data_flow(layer, in komeda_plane_atomic_check()
115 * komeda handles all the HW update in crtc->atomic_flush
139 if (plane->state) in komeda_plane_reset()
140 __drm_atomic_helper_plane_destroy_state(plane->state); in komeda_plane_reset()
142 kfree(plane->state); in komeda_plane_reset()
143 plane->state = NULL; in komeda_plane_reset()
147 __drm_atomic_helper_plane_reset(plane, &state->base); in komeda_plane_reset()
155 if (WARN_ON(!plane->state)) in komeda_plane_atomic_duplicate_state()
162 __drm_atomic_helper_plane_duplicate_state(plane, &new->base); in komeda_plane_atomic_duplicate_state()
164 return &new->base; in komeda_plane_atomic_duplicate_state()
179 struct komeda_dev *mdev = plane->dev->dev_private; in komeda_plane_format_mod_supported()
181 u32 layer_type = kplane->layer->layer_type; in komeda_plane_format_mod_supported()
183 return komeda_format_mod_supported(&mdev->fmt_tbl, layer_type, in komeda_plane_format_mod_supported()
205 for (i = 0; i < kms->n_crtcs; i++) { in get_possible_crtcs()
206 crtc = &kms->crtcs[i]; in get_possible_crtcs()
208 if ((pipe == crtc->master) || (pipe == crtc->slave)) in get_possible_crtcs()
223 for (i = 0; i < kms->n_crtcs; i++) { in komeda_set_crtc_plane_mask()
224 kcrtc = &kms->crtcs[i]; in komeda_set_crtc_plane_mask()
226 if (pipe == kcrtc->slave) in komeda_set_crtc_plane_mask()
227 kcrtc->slave_planes |= BIT(drm_plane_index(plane)); in komeda_set_crtc_plane_mask()
231 /* use Layer0 as primary */
235 bool is_primary = (c->id == KOMEDA_COMPONENT_LAYER0); in get_plane_type()
241 struct komeda_layer *layer) in komeda_plane_add() argument
243 struct komeda_dev *mdev = kms->base.dev_private; in komeda_plane_add()
244 struct komeda_component *c = &layer->base; in komeda_plane_add()
252 return -ENOMEM; in komeda_plane_add()
254 plane = &kplane->base; in komeda_plane_add()
255 kplane->layer = layer; in komeda_plane_add()
257 formats = komeda_get_layer_fourcc_list(&mdev->fmt_tbl, in komeda_plane_add()
258 layer->layer_type, &n_formats); in komeda_plane_add()
261 return -ENOMEM; in komeda_plane_add()
264 err = drm_universal_plane_init(&kms->base, plane, in komeda_plane_add()
265 get_possible_crtcs(kms, c->pipeline), in komeda_plane_add()
269 "%s", c->name); in komeda_plane_add()
281 layer->supported_rots); in komeda_plane_add()
307 err = drm_plane_create_zpos_property(plane, layer->base.id, 0, 8); in komeda_plane_add()
311 komeda_set_crtc_plane_mask(kms, c->pipeline, plane); in komeda_plane_add()
324 for (i = 0; i < mdev->n_pipelines; i++) { in komeda_kms_add_planes()
325 pipe = mdev->pipelines[i]; in komeda_kms_add_planes()
327 for (j = 0; j < pipe->n_layers; j++) { in komeda_kms_add_planes()
328 err = komeda_plane_add(kms, pipe->layers[j]); in komeda_kms_add_planes()