Skip to content

Commit 69c63e8

Browse files
committed
drm/mipi-dbi: Use shadow-plane mappings
Use the buffer mappings provided by shadow-plane helpers. As the mappings are established while the commit can still fail, errors are now reported correctly to callers. v2: * use shadow-plane state directly (Noralf) Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Noralf Trønnes <noralf@tronnes.org> Tested-by: Javier Martinez Canillas <javierm@redhat.com> Tested-by: Noralf Trønnes <noralf@tronnes.org> # drm/tiny/mi0283qt Link: https://patchwork.freedesktop.org/patch/msgid/20221202125644.7917-8-tzimmermann@suse.de
1 parent e7caf04 commit 69c63e8

File tree

3 files changed

+13
-44
lines changed

3 files changed

+13
-44
lines changed

drivers/gpu/drm/drm_mipi_dbi.c

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -321,27 +321,19 @@ EXPORT_SYMBOL(mipi_dbi_pipe_mode_valid);
321321
void mipi_dbi_pipe_update(struct drm_simple_display_pipe *pipe,
322322
struct drm_plane_state *old_state)
323323
{
324-
struct iosys_map map[DRM_FORMAT_MAX_PLANES] = { };
325-
struct iosys_map data[DRM_FORMAT_MAX_PLANES] = { };
326324
struct drm_plane_state *state = pipe->plane.state;
325+
struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
327326
struct drm_framebuffer *fb = state->fb;
328327
struct drm_rect rect;
329-
int ret;
330328

331329
if (!pipe->crtc.state->active)
332330
return;
333331

334332
if (WARN_ON(!fb))
335333
return;
336334

337-
ret = drm_gem_fb_vmap(fb, map, data);
338-
if (ret)
339-
return;
340-
341335
if (drm_atomic_helper_damage_merged(old_state, state, &rect))
342-
mipi_dbi_fb_dirty(&data[0], fb, &rect);
343-
344-
drm_gem_fb_vunmap(fb, map);
336+
mipi_dbi_fb_dirty(&shadow_plane_state->data[0], fb, &rect);
345337
}
346338
EXPORT_SYMBOL(mipi_dbi_pipe_update);
347339

@@ -362,29 +354,22 @@ void mipi_dbi_enable_flush(struct mipi_dbi_dev *dbidev,
362354
struct drm_crtc_state *crtc_state,
363355
struct drm_plane_state *plane_state)
364356
{
357+
struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(plane_state);
365358
struct drm_framebuffer *fb = plane_state->fb;
366359
struct drm_rect rect = {
367360
.x1 = 0,
368361
.x2 = fb->width,
369362
.y1 = 0,
370363
.y2 = fb->height,
371364
};
372-
struct iosys_map map[DRM_FORMAT_MAX_PLANES] = { };
373-
struct iosys_map data[DRM_FORMAT_MAX_PLANES] = { };
374-
int idx, ret;
365+
int idx;
375366

376367
if (!drm_dev_enter(&dbidev->drm, &idx))
377368
return;
378369

379-
ret = drm_gem_fb_vmap(fb, map, data);
380-
if (ret)
381-
goto err_drm_dev_exit;
382-
383-
mipi_dbi_fb_dirty(&data[0], fb, &rect);
370+
mipi_dbi_fb_dirty(&shadow_plane_state->data[0], fb, &rect);
384371
backlight_enable(dbidev->backlight);
385372

386-
drm_gem_fb_vunmap(fb, map);
387-
err_drm_dev_exit:
388373
drm_dev_exit(idx);
389374
}
390375
EXPORT_SYMBOL(mipi_dbi_enable_flush);

drivers/gpu/drm/tiny/ili9225.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -164,26 +164,23 @@ static void ili9225_pipe_update(struct drm_simple_display_pipe *pipe,
164164
struct drm_plane_state *old_state)
165165
{
166166
struct drm_plane_state *state = pipe->plane.state;
167+
struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
167168
struct drm_framebuffer *fb = state->fb;
168-
struct drm_gem_dma_object *dma_obj;
169-
struct iosys_map src;
170169
struct drm_rect rect;
171170

172171
if (!pipe->crtc.state->active)
173172
return;
174173

175-
dma_obj = drm_fb_dma_get_gem_obj(fb, 0);
176-
iosys_map_set_vaddr(&src, dma_obj->vaddr);
177-
178174
if (drm_atomic_helper_damage_merged(old_state, state, &rect))
179-
ili9225_fb_dirty(&src, fb, &rect);
175+
ili9225_fb_dirty(&shadow_plane_state->data[0], fb, &rect);
180176
}
181177

182178
static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe,
183179
struct drm_crtc_state *crtc_state,
184180
struct drm_plane_state *plane_state)
185181
{
186182
struct mipi_dbi_dev *dbidev = drm_to_mipi_dbi_dev(pipe->crtc.dev);
183+
struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(plane_state);
187184
struct drm_framebuffer *fb = plane_state->fb;
188185
struct device *dev = pipe->crtc.dev->dev;
189186
struct mipi_dbi *dbi = &dbidev->dbi;
@@ -193,8 +190,6 @@ static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe,
193190
.y1 = 0,
194191
.y2 = fb->height,
195192
};
196-
struct drm_gem_dma_object *dma_obj;
197-
struct iosys_map src;
198193
int ret, idx;
199194
u8 am_id;
200195

@@ -285,10 +280,7 @@ static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe,
285280

286281
ili9225_command(dbi, ILI9225_DISPLAY_CONTROL_1, 0x1017);
287282

288-
dma_obj = drm_fb_dma_get_gem_obj(fb, 0);
289-
iosys_map_set_vaddr(&src, dma_obj->vaddr);
290-
291-
ili9225_fb_dirty(&src, fb, &rect);
283+
ili9225_fb_dirty(&shadow_plane_state->data[0], fb, &rect);
292284

293285
out_exit:
294286
drm_dev_exit(idx);

drivers/gpu/drm/tiny/st7586.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -153,26 +153,23 @@ static void st7586_pipe_update(struct drm_simple_display_pipe *pipe,
153153
struct drm_plane_state *old_state)
154154
{
155155
struct drm_plane_state *state = pipe->plane.state;
156+
struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(state);
156157
struct drm_framebuffer *fb = state->fb;
157-
struct drm_gem_dma_object *dma_obj;
158-
struct iosys_map src;
159158
struct drm_rect rect;
160159

161160
if (!pipe->crtc.state->active)
162161
return;
163162

164-
dma_obj = drm_fb_dma_get_gem_obj(fb, 0);
165-
iosys_map_set_vaddr(&src, dma_obj->vaddr);
166-
167163
if (drm_atomic_helper_damage_merged(old_state, state, &rect))
168-
st7586_fb_dirty(&src, fb, &rect);
164+
st7586_fb_dirty(&shadow_plane_state->data[0], fb, &rect);
169165
}
170166

171167
static void st7586_pipe_enable(struct drm_simple_display_pipe *pipe,
172168
struct drm_crtc_state *crtc_state,
173169
struct drm_plane_state *plane_state)
174170
{
175171
struct mipi_dbi_dev *dbidev = drm_to_mipi_dbi_dev(pipe->crtc.dev);
172+
struct drm_shadow_plane_state *shadow_plane_state = to_drm_shadow_plane_state(plane_state);
176173
struct drm_framebuffer *fb = plane_state->fb;
177174
struct mipi_dbi *dbi = &dbidev->dbi;
178175
struct drm_rect rect = {
@@ -181,8 +178,6 @@ static void st7586_pipe_enable(struct drm_simple_display_pipe *pipe,
181178
.y1 = 0,
182179
.y2 = fb->height,
183180
};
184-
struct drm_gem_dma_object *dma_obj;
185-
struct iosys_map src;
186181
int idx, ret;
187182
u8 addr_mode;
188183

@@ -242,10 +237,7 @@ static void st7586_pipe_enable(struct drm_simple_display_pipe *pipe,
242237

243238
msleep(100);
244239

245-
dma_obj = drm_fb_dma_get_gem_obj(fb, 0);
246-
iosys_map_set_vaddr(&src, dma_obj->vaddr);
247-
248-
st7586_fb_dirty(&src, fb, &rect);
240+
st7586_fb_dirty(&shadow_plane_state->data[0], fb, &rect);
249241

250242
mipi_dbi_command(dbi, MIPI_DCS_SET_DISPLAY_ON);
251243
out_exit:

0 commit comments

Comments
 (0)