From 19db1bffa9d8283707680aaff586202e98f699bd Mon Sep 17 00:00:00 2001 From: Koji Matsuoka Date: Mon, 24 Mar 2014 14:40:01 +0900 Subject: [PATCH] drm: rcar-du: Add procedure of memory width update When the frame buffer is changed, there is a problem which memory width is not updated. This problem is resolved by this patch. Change-Id: Ifd581c28b285328a5b6977e5964136a3d22db374 Signed-off-by: Koji Matsuoka Signed-off-by: Damian Hobson-Garcia --- drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 2 ++ drivers/gpu/drm/rcar-du/rcar_du_plane.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c index 79d6ddb..4b4b4a7 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c @@ -337,6 +337,8 @@ static void rcar_du_crtc_update_base(struct rcar_du_crtc *rcrtc) { struct drm_crtc *crtc = &rcrtc->crtc; + rcrtc->plane->pitch = crtc->fb->pitches[0]; + rcar_du_plane_compute_base(rcrtc->plane, crtc->fb); rcar_du_plane_update_base(rcrtc->plane); } diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c index 0f422f9..4156bb4 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c @@ -225,6 +225,7 @@ static void __rcar_du_plane_setup(struct rcar_du_plane *plane, struct rcar_du_group *rgrp = plane->group; u32 ddcr2 = PnDDCR2_CODE; u32 ddcr4; + u32 mwr; /* Data format * @@ -255,6 +256,17 @@ static void __rcar_du_plane_setup(struct rcar_du_plane *plane, rcar_du_plane_write(rgrp, index, PnDDCR2, ddcr2); rcar_du_plane_write(rgrp, index, PnDDCR4, ddcr4); + /* Memory pitch (expressed in pixels) */ + if (plane->format->planes == 2) + mwr = plane->pitch; + else + mwr = plane->pitch * 8 / plane->format->bpp; + + if ((plane->interlace_flag) && (plane->format->bpp == 32)) + rcar_du_plane_write(rgrp, index, PnMWR, mwr * 2); + else + rcar_du_plane_write(rgrp, index, PnMWR, mwr); + /* Destination position and size */ rcar_du_plane_write(rgrp, index, PnDSXR, plane->width); rcar_du_plane_write(rgrp, index, PnDSYR, plane->height); -- 2.7.4