aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2015-02-22 18:25:19 -0500
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2015-03-03 09:16:24 -0500
commitf398f344eb59cd9803091ee08bee77b4e473971e (patch)
treedd9cd2f04c4105882f5635122d07ff987a1d3745
parent4407cc02c9251b0ce6bad3718211353a7dba93ef (diff)
drm: rcar-du: Rework plane setup code
Now that the plane setup code isn't called outside of the plane implementation, it can be simplified by merging the rcar_du_plane_compute_base() and rcar_du_plane_update_base() functions. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_plane.c34
-rw-r--r--drivers/gpu/drm/rcar-du/rcar_du_plane.h3
2 files changed, 12 insertions, 25 deletions
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
index 7e0e2731ea27..f28d13dc6fc9 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
@@ -129,12 +129,14 @@ static void rcar_du_plane_release(struct rcar_du_plane *plane)
129 plane->hwindex = -1; 129 plane->hwindex = -1;
130} 130}
131 131
132static void rcar_du_plane_update_base(struct rcar_du_plane *plane) 132static void rcar_du_plane_setup_fb(struct rcar_du_plane *plane)
133{ 133{
134 struct drm_framebuffer *fb = plane->plane.state->fb;
134 struct rcar_du_group *rgrp = plane->group; 135 struct rcar_du_group *rgrp = plane->group;
135 unsigned int src_x = plane->plane.state->src_x >> 16; 136 unsigned int src_x = plane->plane.state->src_x >> 16;
136 unsigned int src_y = plane->plane.state->src_y >> 16; 137 unsigned int src_y = plane->plane.state->src_y >> 16;
137 unsigned int index = plane->hwindex; 138 unsigned int index = plane->hwindex;
139 struct drm_gem_cma_object *gem;
138 bool interlaced; 140 bool interlaced;
139 u32 mwr; 141 u32 mwr;
140 142
@@ -144,9 +146,9 @@ static void rcar_du_plane_update_base(struct rcar_du_plane *plane)
144 * operation with 32bpp formats. 146 * operation with 32bpp formats.
145 */ 147 */
146 if (plane->format->planes == 2) 148 if (plane->format->planes == 2)
147 mwr = plane->pitch; 149 mwr = fb->pitches[0];
148 else 150 else
149 mwr = plane->pitch * 8 / plane->format->bpp; 151 mwr = fb->pitches[0] * 8 / plane->format->bpp;
150 152
151 if (interlaced && plane->format->bpp == 32) 153 if (interlaced && plane->format->bpp == 32)
152 mwr *= 2; 154 mwr *= 2;
@@ -168,33 +170,22 @@ static void rcar_du_plane_update_base(struct rcar_du_plane *plane)
168 rcar_du_plane_write(rgrp, index, PnSPXR, src_x); 170 rcar_du_plane_write(rgrp, index, PnSPXR, src_x);
169 rcar_du_plane_write(rgrp, index, PnSPYR, src_y * 171 rcar_du_plane_write(rgrp, index, PnSPYR, src_y *
170 (!interlaced && plane->format->bpp == 32 ? 2 : 1)); 172 (!interlaced && plane->format->bpp == 32 ? 2 : 1));
171 rcar_du_plane_write(rgrp, index, PnDSA0R, plane->dma[0]); 173
174 gem = drm_fb_cma_get_gem_obj(fb, 0);
175 rcar_du_plane_write(rgrp, index, PnDSA0R, gem->paddr + fb->offsets[0]);
172 176
173 if (plane->format->planes == 2) { 177 if (plane->format->planes == 2) {
174 index = (index + 1) % 8; 178 index = (index + 1) % 8;
175 179
176 rcar_du_plane_write(rgrp, index, PnMWR, plane->pitch); 180 rcar_du_plane_write(rgrp, index, PnMWR, fb->pitches[0]);
177 181
178 rcar_du_plane_write(rgrp, index, PnSPXR, src_x); 182 rcar_du_plane_write(rgrp, index, PnSPXR, src_x);
179 rcar_du_plane_write(rgrp, index, PnSPYR, src_y * 183 rcar_du_plane_write(rgrp, index, PnSPYR, src_y *
180 (plane->format->bpp == 16 ? 2 : 1) / 2); 184 (plane->format->bpp == 16 ? 2 : 1) / 2);
181 rcar_du_plane_write(rgrp, index, PnDSA0R, plane->dma[1]);
182 }
183}
184
185static void rcar_du_plane_compute_base(struct rcar_du_plane *plane,
186 struct drm_framebuffer *fb)
187{
188 struct drm_gem_cma_object *gem;
189
190 plane->pitch = fb->pitches[0];
191 185
192 gem = drm_fb_cma_get_gem_obj(fb, 0);
193 plane->dma[0] = gem->paddr + fb->offsets[0];
194
195 if (plane->format->planes == 2) {
196 gem = drm_fb_cma_get_gem_obj(fb, 1); 186 gem = drm_fb_cma_get_gem_obj(fb, 1);
197 plane->dma[1] = gem->paddr + fb->offsets[1]; 187 rcar_du_plane_write(rgrp, index, PnDSA0R,
188 gem->paddr + fb->offsets[1]);
198 } 189 }
199} 190}
200 191
@@ -316,7 +307,7 @@ void rcar_du_plane_setup(struct rcar_du_plane *plane)
316 if (plane->format->planes == 2) 307 if (plane->format->planes == 2)
317 __rcar_du_plane_setup(plane, (plane->hwindex + 1) % 8); 308 __rcar_du_plane_setup(plane, (plane->hwindex + 1) % 8);
318 309
319 rcar_du_plane_update_base(plane); 310 rcar_du_plane_setup_fb(plane);
320} 311}
321 312
322static int rcar_du_plane_atomic_check(struct drm_plane *plane, 313static int rcar_du_plane_atomic_check(struct drm_plane *plane,
@@ -403,7 +394,6 @@ static void rcar_du_plane_atomic_update(struct drm_plane *plane,
403 rplane->crtc = state->crtc; 394 rplane->crtc = state->crtc;
404 rplane->format = format; 395 rplane->format = format;
405 396
406 rcar_du_plane_compute_base(rplane, state->fb);
407 rcar_du_plane_setup(rplane); 397 rcar_du_plane_setup(rplane);
408 398
409 mutex_lock(&rplane->group->planes.lock); 399 mutex_lock(&rplane->group->planes.lock);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.h b/drivers/gpu/drm/rcar-du/rcar_du_plane.h
index d291e85896ef..012f2185ca1f 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.h
@@ -41,9 +41,6 @@ struct rcar_du_plane {
41 int hwindex; /* 0-based, -1 means unused */ 41 int hwindex; /* 0-based, -1 means unused */
42 42
43 const struct rcar_du_format_info *format; 43 const struct rcar_du_format_info *format;
44
45 unsigned long dma[2];
46 unsigned int pitch;
47}; 44};
48 45
49struct rcar_du_planes { 46struct rcar_du_planes {