diff options
author | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2015-07-27 06:43:09 -0400 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2016-02-19 19:58:53 -0500 |
commit | 2f13c5296d81ad9083e04229eb899ea4287e348f (patch) | |
tree | a4a481ea497f66f0ce2ca451cb195ed70dc2c6ab | |
parent | ff967363dd5ceeee1c15c9cbb2c70ceb228e24e1 (diff) |
drm: rcar-du: Refactor plane setup
Rename plane setup functions using more explicit names, and use local
variables to store intermediate values to increase readability. This
also prepares for VSP compositor support.
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
-rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_du_plane.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c index aa02c375ab7f..a23b5ea717fc 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c | |||
@@ -35,7 +35,7 @@ static void rcar_du_plane_write(struct rcar_du_group *rgrp, | |||
35 | data); | 35 | data); |
36 | } | 36 | } |
37 | 37 | ||
38 | static void rcar_du_plane_setup_fb(struct rcar_du_plane *plane) | 38 | static void rcar_du_plane_setup_scanout(struct rcar_du_plane *plane) |
39 | { | 39 | { |
40 | struct rcar_du_plane_state *state = | 40 | struct rcar_du_plane_state *state = |
41 | to_rcar_plane_state(plane->plane.state); | 41 | to_rcar_plane_state(plane->plane.state); |
@@ -45,8 +45,10 @@ static void rcar_du_plane_setup_fb(struct rcar_du_plane *plane) | |||
45 | unsigned int src_y = state->state.src_y >> 16; | 45 | unsigned int src_y = state->state.src_y >> 16; |
46 | unsigned int index = state->hwindex; | 46 | unsigned int index = state->hwindex; |
47 | struct drm_gem_cma_object *gem; | 47 | struct drm_gem_cma_object *gem; |
48 | unsigned int pitch; | ||
48 | bool interlaced; | 49 | bool interlaced; |
49 | u32 mwr; | 50 | unsigned int i; |
51 | u32 dma[2]; | ||
50 | 52 | ||
51 | interlaced = state->state.crtc->state->adjusted_mode.flags | 53 | interlaced = state->state.crtc->state->adjusted_mode.flags |
52 | & DRM_MODE_FLAG_INTERLACE; | 54 | & DRM_MODE_FLAG_INTERLACE; |
@@ -55,14 +57,18 @@ static void rcar_du_plane_setup_fb(struct rcar_du_plane *plane) | |||
55 | * operation with 32bpp formats. | 57 | * operation with 32bpp formats. |
56 | */ | 58 | */ |
57 | if (state->format->planes == 2) | 59 | if (state->format->planes == 2) |
58 | mwr = fb->pitches[0]; | 60 | pitch = fb->pitches[0]; |
59 | else | 61 | else |
60 | mwr = fb->pitches[0] * 8 / state->format->bpp; | 62 | pitch = fb->pitches[0] * 8 / state->format->bpp; |
61 | 63 | ||
62 | if (interlaced && state->format->bpp == 32) | 64 | for (i = 0; i < state->format->planes; ++i) { |
63 | mwr *= 2; | 65 | gem = drm_fb_cma_get_gem_obj(fb, i); |
66 | dma[i] = gem->paddr + fb->offsets[i]; | ||
67 | } | ||
64 | 68 | ||
65 | rcar_du_plane_write(rgrp, index, PnMWR, mwr); | 69 | rcar_du_plane_write(rgrp, index, PnMWR, |
70 | (interlaced && state->format->bpp == 32) ? | ||
71 | pitch * 2 : pitch); | ||
66 | 72 | ||
67 | /* The Y position is expressed in raster line units and must be doubled | 73 | /* The Y position is expressed in raster line units and must be doubled |
68 | * for 32bpp formats, according to the R8A7790 datasheet. No mention of | 74 | * for 32bpp formats, according to the R8A7790 datasheet. No mention of |
@@ -80,21 +86,18 @@ static void rcar_du_plane_setup_fb(struct rcar_du_plane *plane) | |||
80 | rcar_du_plane_write(rgrp, index, PnSPYR, src_y * | 86 | rcar_du_plane_write(rgrp, index, PnSPYR, src_y * |
81 | (!interlaced && state->format->bpp == 32 ? 2 : 1)); | 87 | (!interlaced && state->format->bpp == 32 ? 2 : 1)); |
82 | 88 | ||
83 | gem = drm_fb_cma_get_gem_obj(fb, 0); | 89 | rcar_du_plane_write(rgrp, index, PnDSA0R, dma[0]); |
84 | rcar_du_plane_write(rgrp, index, PnDSA0R, gem->paddr + fb->offsets[0]); | ||
85 | 90 | ||
86 | if (state->format->planes == 2) { | 91 | if (state->format->planes == 2) { |
87 | index = (index + 1) % 8; | 92 | index = (index + 1) % 8; |
88 | 93 | ||
89 | rcar_du_plane_write(rgrp, index, PnMWR, fb->pitches[0]); | 94 | rcar_du_plane_write(rgrp, index, PnMWR, pitch); |
90 | 95 | ||
91 | rcar_du_plane_write(rgrp, index, PnSPXR, src_x); | 96 | rcar_du_plane_write(rgrp, index, PnSPXR, src_x); |
92 | rcar_du_plane_write(rgrp, index, PnSPYR, src_y * | 97 | rcar_du_plane_write(rgrp, index, PnSPYR, src_y * |
93 | (state->format->bpp == 16 ? 2 : 1) / 2); | 98 | (state->format->bpp == 16 ? 2 : 1) / 2); |
94 | 99 | ||
95 | gem = drm_fb_cma_get_gem_obj(fb, 1); | 100 | rcar_du_plane_write(rgrp, index, PnDSA0R, dma[1]); |
96 | rcar_du_plane_write(rgrp, index, PnDSA0R, | ||
97 | gem->paddr + fb->offsets[1]); | ||
98 | } | 101 | } |
99 | } | 102 | } |
100 | 103 | ||
@@ -161,8 +164,8 @@ static void rcar_du_plane_setup_mode(struct rcar_du_plane *plane, | |||
161 | } | 164 | } |
162 | } | 165 | } |
163 | 166 | ||
164 | static void __rcar_du_plane_setup(struct rcar_du_plane *plane, | 167 | static void rcar_du_plane_setup_format(struct rcar_du_plane *plane, |
165 | unsigned int index) | 168 | unsigned int index) |
166 | { | 169 | { |
167 | struct rcar_du_plane_state *state = | 170 | struct rcar_du_plane_state *state = |
168 | to_rcar_plane_state(plane->plane.state); | 171 | to_rcar_plane_state(plane->plane.state); |
@@ -217,11 +220,11 @@ void rcar_du_plane_setup(struct rcar_du_plane *plane) | |||
217 | struct rcar_du_plane_state *state = | 220 | struct rcar_du_plane_state *state = |
218 | to_rcar_plane_state(plane->plane.state); | 221 | to_rcar_plane_state(plane->plane.state); |
219 | 222 | ||
220 | __rcar_du_plane_setup(plane, state->hwindex); | 223 | rcar_du_plane_setup_format(plane, state->hwindex); |
221 | if (state->format->planes == 2) | 224 | if (state->format->planes == 2) |
222 | __rcar_du_plane_setup(plane, (state->hwindex + 1) % 8); | 225 | rcar_du_plane_setup_format(plane, (state->hwindex + 1) % 8); |
223 | 226 | ||
224 | rcar_du_plane_setup_fb(plane); | 227 | rcar_du_plane_setup_scanout(plane); |
225 | } | 228 | } |
226 | 229 | ||
227 | static int rcar_du_plane_atomic_check(struct drm_plane *plane, | 230 | static int rcar_du_plane_atomic_check(struct drm_plane *plane, |