Lines Matching full:plane

24 #include "plane.h"
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()
177 static void tegra_shared_plane_update(struct tegra_plane *plane) in tegra_shared_plane_update() argument
179 struct tegra_dc *dc = plane->dc; in tegra_shared_plane_update()
183 mask = COMMON_UPDATE | WIN_A_UPDATE << plane->base.index; in tegra_shared_plane_update()
197 static void tegra_shared_plane_activate(struct tegra_plane *plane) in tegra_shared_plane_activate() argument
199 struct tegra_dc *dc = plane->dc; in tegra_shared_plane_activate()
203 mask = COMMON_ACTREQ | WIN_A_ACT_REQ << plane->base.index; in tegra_shared_plane_activate()
218 tegra_shared_plane_get_owner(struct tegra_plane *plane, struct tegra_dc *dc) in tegra_shared_plane_get_owner() argument
221 tegra_plane_offset(plane, DC_WIN_CORE_WINDOWGROUP_SET_CONTROL); in tegra_shared_plane_get_owner()
227 struct tegra_plane *plane) in tegra_dc_owns_shared_plane() argument
231 if (tegra_shared_plane_get_owner(plane, dc) == dc->pipe) { in tegra_dc_owns_shared_plane()
232 if (plane->dc == dc) in tegra_dc_owns_shared_plane()
236 dc->pipe, plane->index); in tegra_dc_owns_shared_plane()
242 static int tegra_shared_plane_set_owner(struct tegra_plane *plane, in tegra_shared_plane_set_owner() argument
246 tegra_plane_offset(plane, DC_WIN_CORE_WINDOWGROUP_SET_CONTROL); in tegra_shared_plane_set_owner()
247 struct tegra_dc *old = plane->dc, *dc = new ? new : old; in tegra_shared_plane_set_owner()
249 unsigned int owner, index = plane->index; in tegra_shared_plane_set_owner()
278 plane->dc = new; in tegra_shared_plane_set_owner()
284 struct tegra_plane *plane) in tegra_dc_assign_shared_plane() argument
289 if (!tegra_dc_owns_shared_plane(dc, plane)) { in tegra_dc_assign_shared_plane()
290 err = tegra_shared_plane_set_owner(plane, dc); in tegra_dc_assign_shared_plane()
295 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_LINEBUF_CONFIG); in tegra_dc_assign_shared_plane()
297 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_LINEBUF_CONFIG); in tegra_dc_assign_shared_plane()
299 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_WGRP_FETCH_METER); in tegra_dc_assign_shared_plane()
301 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_WGRP_FETCH_METER); in tegra_dc_assign_shared_plane()
304 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLA); in tegra_dc_assign_shared_plane()
306 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLA); in tegra_dc_assign_shared_plane()
308 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLB); in tegra_dc_assign_shared_plane()
310 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLB); in tegra_dc_assign_shared_plane()
313 value = tegra_plane_readl(plane, DC_WIN_CORE_PRECOMP_WGRP_PIPE_METER); in tegra_dc_assign_shared_plane()
315 tegra_plane_writel(plane, value, DC_WIN_CORE_PRECOMP_WGRP_PIPE_METER); in tegra_dc_assign_shared_plane()
318 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_WGRP_POOL_CONFIG); in tegra_dc_assign_shared_plane()
320 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_WGRP_POOL_CONFIG); in tegra_dc_assign_shared_plane()
322 value = tegra_plane_readl(plane, DC_WIN_CORE_IHUB_THREAD_GROUP); in tegra_dc_assign_shared_plane()
324 value |= THREAD_NUM(plane->base.index); in tegra_dc_assign_shared_plane()
326 tegra_plane_writel(plane, value, DC_WIN_CORE_IHUB_THREAD_GROUP); in tegra_dc_assign_shared_plane()
328 tegra_shared_plane_update(plane); in tegra_dc_assign_shared_plane()
329 tegra_shared_plane_activate(plane); in tegra_dc_assign_shared_plane()
333 struct tegra_plane *plane) in tegra_dc_remove_shared_plane() argument
335 tegra_shared_plane_set_owner(plane, NULL); in tegra_dc_remove_shared_plane()
338 static int tegra_shared_plane_atomic_check(struct drm_plane *plane, in tegra_shared_plane_atomic_check() argument
342 struct tegra_shared_plane *tegra = to_tegra_shared_plane(plane); in tegra_shared_plane_atomic_check()
347 /* no need for further checks if the plane is being disabled */ in tegra_shared_plane_atomic_check()
374 DRM_ERROR("unsupported UV-plane configuration\n"); in tegra_shared_plane_atomic_check()
388 static void tegra_shared_plane_atomic_disable(struct drm_plane *plane, in tegra_shared_plane_atomic_disable() argument
391 struct tegra_plane *p = to_tegra_plane(plane); in tegra_shared_plane_atomic_disable()
425 static void tegra_shared_plane_atomic_update(struct drm_plane *plane, in tegra_shared_plane_atomic_update() argument
428 struct tegra_plane_state *state = to_tegra_plane_state(plane->state); in tegra_shared_plane_atomic_update()
429 struct tegra_dc *dc = to_tegra_dc(plane->state->crtc); in tegra_shared_plane_atomic_update()
430 unsigned int zpos = plane->state->normalized_zpos; in tegra_shared_plane_atomic_update()
431 struct drm_framebuffer *fb = plane->state->fb; in tegra_shared_plane_atomic_update()
432 struct tegra_plane *p = to_tegra_plane(plane); in tegra_shared_plane_atomic_update()
438 if (!plane->state->crtc || !plane->state->fb) in tegra_shared_plane_atomic_update()
441 if (!plane->state->visible) { in tegra_shared_plane_atomic_update()
442 tegra_shared_plane_atomic_disable(plane, old_state); in tegra_shared_plane_atomic_update()
485 value = V_POSITION(plane->state->crtc_y) | in tegra_shared_plane_atomic_update()
486 H_POSITION(plane->state->crtc_x); in tegra_shared_plane_atomic_update()
489 value = V_SIZE(plane->state->crtc_h) | H_SIZE(plane->state->crtc_w); in tegra_shared_plane_atomic_update()
495 value = V_SIZE(plane->state->crtc_h) | H_SIZE(plane->state->crtc_w); in tegra_shared_plane_atomic_update()
507 value = OFFSET_X(plane->state->src_y >> 16) | in tegra_shared_plane_atomic_update()
508 OFFSET_Y(plane->state->src_x >> 16); in tegra_shared_plane_atomic_update()
561 struct tegra_shared_plane *plane; in tegra_shared_plane_create() local
568 plane = kzalloc(sizeof(*plane), GFP_KERNEL); in tegra_shared_plane_create()
569 if (!plane) in tegra_shared_plane_create()
572 plane->base.offset = 0x0a00 + 0x0300 * index; in tegra_shared_plane_create()
573 plane->base.index = index; in tegra_shared_plane_create()
575 plane->wgrp = &hub->wgrps[wgrp]; in tegra_shared_plane_create()
576 plane->wgrp->parent = &dc->client; in tegra_shared_plane_create()
578 p = &plane->base.base; in tegra_shared_plane_create()
588 kfree(plane); in tegra_shared_plane_create()