aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2015-07-27 06:43:09 -0400
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2016-02-19 19:58:53 -0500
commit2f13c5296d81ad9083e04229eb899ea4287e348f (patch)
treea4a481ea497f66f0ce2ca451cb195ed70dc2c6ab
parentff967363dd5ceeee1c15c9cbb2c70ceb228e24e1 (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.c39
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
38static void rcar_du_plane_setup_fb(struct rcar_du_plane *plane) 38static 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
164static void __rcar_du_plane_setup(struct rcar_du_plane *plane, 167static 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
227static int rcar_du_plane_atomic_check(struct drm_plane *plane, 230static int rcar_du_plane_atomic_check(struct drm_plane *plane,