Lines Matching refs:plane
61 static inline unsigned int tegra_plane_offset(struct tegra_plane *plane, in tegra_plane_offset() argument
66 return plane->offset + offset; in tegra_plane_offset()
71 return plane->offset + offset; in tegra_plane_offset()
76 return plane->offset + offset; in tegra_plane_offset()
79 dev_WARN(plane->dc->dev, "invalid offset: %x\n", offset); in tegra_plane_offset()
81 return plane->offset + offset; in tegra_plane_offset()
84 static inline u32 tegra_plane_readl(struct tegra_plane *plane, in tegra_plane_readl() argument
87 return tegra_dc_readl(plane->dc, tegra_plane_offset(plane, offset)); in tegra_plane_readl()
90 static inline void tegra_plane_writel(struct tegra_plane *plane, u32 value, in tegra_plane_writel() argument
93 tegra_dc_writel(plane->dc, value, tegra_plane_offset(plane, offset)); in tegra_plane_writel()
165 static void tegra_shared_plane_update(struct tegra_plane *plane) in tegra_shared_plane_update() argument
167 struct tegra_dc *dc = plane->dc; in tegra_shared_plane_update()
171 mask = COMMON_UPDATE | WIN_A_UPDATE << plane->base.index; in tegra_shared_plane_update()
185 static void tegra_shared_plane_activate(struct tegra_plane *plane) in tegra_shared_plane_activate() argument
187 struct tegra_dc *dc = plane->dc; in tegra_shared_plane_activate()
191 mask = COMMON_ACTREQ | WIN_A_ACT_REQ << plane->base.index; in tegra_shared_plane_activate()
206 tegra_shared_plane_get_owner(struct tegra_plane *plane, struct tegra_dc *dc) in tegra_shared_plane_get_owner() argument
209 tegra_plane_offset(plane, DC_WIN_CORE_WINDOWGROUP_SET_CONTROL); in tegra_shared_plane_get_owner()
215 struct tegra_plane *plane) in tegra_dc_owns_shared_plane() argument
219 if (tegra_shared_plane_get_owner(plane, dc) == dc->pipe) { in tegra_dc_owns_shared_plane()
220 if (plane->dc == dc) in tegra_dc_owns_shared_plane()
224 dc->pipe, plane->index); in tegra_dc_owns_shared_plane()
230 static int tegra_shared_plane_set_owner(struct tegra_plane *plane, in tegra_shared_plane_set_owner() argument
234 tegra_plane_offset(plane, DC_WIN_CORE_WINDOWGROUP_SET_CONTROL); in tegra_shared_plane_set_owner()
235 struct tegra_dc *old = plane->dc, *dc = new ? new : old; in tegra_shared_plane_set_owner()
237 unsigned int owner, index = plane->index; in tegra_shared_plane_set_owner()
266 plane->dc = new; in tegra_shared_plane_set_owner()
272 struct tegra_plane *plane) in tegra_dc_assign_shared_plane() argument
277 if (!tegra_dc_owns_shared_plane(dc, plane)) { in tegra_dc_assign_shared_plane()
278 err = tegra_shared_plane_set_owner(plane, dc); in tegra_dc_assign_shared_plane()
283 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_LINEBUF_CONFIG); in tegra_dc_assign_shared_plane()
285 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_LINEBUF_CONFIG); in tegra_dc_assign_shared_plane()
287 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_WGRP_FETCH_METER); in tegra_dc_assign_shared_plane()
289 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_WGRP_FETCH_METER); in tegra_dc_assign_shared_plane()
292 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLA); in tegra_dc_assign_shared_plane()
294 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLA); in tegra_dc_assign_shared_plane()
296 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLB); in tegra_dc_assign_shared_plane()
298 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLB); in tegra_dc_assign_shared_plane()
301 value = tegra_plane_readl(plane, DC_WIN_CORE_PRECOMP_WGRP_PIPE_METER); in tegra_dc_assign_shared_plane()
303 tegra_plane_writel(plane, value, DC_WIN_CORE_PRECOMP_WGRP_PIPE_METER); in tegra_dc_assign_shared_plane()
306 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_WGRP_POOL_CONFIG); in tegra_dc_assign_shared_plane()
308 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_WGRP_POOL_CONFIG); in tegra_dc_assign_shared_plane()
310 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_THREAD_GROUP); in tegra_dc_assign_shared_plane()
312 value |= THREAD_NUM(plane->base.index); in tegra_dc_assign_shared_plane()
314 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_THREAD_GROUP); in tegra_dc_assign_shared_plane()
316 tegra_shared_plane_update(plane); in tegra_dc_assign_shared_plane()
317 tegra_shared_plane_activate(plane); in tegra_dc_assign_shared_plane()
321 struct tegra_plane *plane) in tegra_dc_remove_shared_plane() argument
323 tegra_shared_plane_set_owner(plane, NULL); in tegra_dc_remove_shared_plane()
326 static int tegra_shared_plane_atomic_check(struct drm_plane *plane, in tegra_shared_plane_atomic_check() argument
330 struct tegra_shared_plane *tegra = to_tegra_shared_plane(plane); in tegra_shared_plane_atomic_check()
376 static void tegra_shared_plane_atomic_disable(struct drm_plane *plane, in tegra_shared_plane_atomic_disable() argument
379 struct tegra_plane *p = to_tegra_plane(plane); in tegra_shared_plane_atomic_disable()
408 static void tegra_shared_plane_atomic_update(struct drm_plane *plane, in tegra_shared_plane_atomic_update() argument
411 struct tegra_plane_state *state = to_tegra_plane_state(plane->state); in tegra_shared_plane_atomic_update()
412 struct tegra_dc *dc = to_tegra_dc(plane->state->crtc); in tegra_shared_plane_atomic_update()
413 unsigned int zpos = plane->state->normalized_zpos; in tegra_shared_plane_atomic_update()
414 struct drm_framebuffer *fb = plane->state->fb; in tegra_shared_plane_atomic_update()
415 struct tegra_plane *p = to_tegra_plane(plane); in tegra_shared_plane_atomic_update()
421 if (!plane->state->crtc || !plane->state->fb) in tegra_shared_plane_atomic_update()
424 if (!plane->state->visible) { in tegra_shared_plane_atomic_update()
425 tegra_shared_plane_atomic_disable(plane, old_state); in tegra_shared_plane_atomic_update()
465 value = V_POSITION(plane->state->crtc_y) | in tegra_shared_plane_atomic_update()
466 H_POSITION(plane->state->crtc_x); in tegra_shared_plane_atomic_update()
469 value = V_SIZE(plane->state->crtc_h) | H_SIZE(plane->state->crtc_w); in tegra_shared_plane_atomic_update()
475 value = V_SIZE(plane->state->crtc_h) | H_SIZE(plane->state->crtc_w); in tegra_shared_plane_atomic_update()
487 value = OFFSET_X(plane->state->src_y >> 16) | in tegra_shared_plane_atomic_update()
488 OFFSET_Y(plane->state->src_x >> 16); in tegra_shared_plane_atomic_update()
539 struct tegra_shared_plane *plane; in tegra_shared_plane_create() local
546 plane = kzalloc(sizeof(*plane), GFP_KERNEL); in tegra_shared_plane_create()
547 if (!plane) in tegra_shared_plane_create()
550 plane->base.offset = 0x0a00 + 0x0300 * index; in tegra_shared_plane_create()
551 plane->base.index = index; in tegra_shared_plane_create()
553 plane->wgrp = &hub->wgrps[wgrp]; in tegra_shared_plane_create()
554 plane->wgrp->parent = dc->dev; in tegra_shared_plane_create()
556 p = &plane->base.base; in tegra_shared_plane_create()
566 kfree(plane); in tegra_shared_plane_create()