Takashi Iwai cca179
From 9b2798d5b71c50f64c41a40f0cbcae47c3fbd067 Mon Sep 17 00:00:00 2001
Takashi Iwai cca179
From: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
Takashi Iwai cca179
Date: Thu, 26 Oct 2017 02:27:51 -0400
Takashi Iwai cca179
Subject: [PATCH] media: vsp1: Fix YCbCr planar formats pitch calculation
Takashi Iwai cca179
Git-commit: 9b2798d5b71c50f64c41a40f0cbcae47c3fbd067
Takashi Iwai cca179
Patch-mainline: v4.20-rc1
Takashi Iwai cca179
References: bsc#1051510
Takashi Iwai cca179
Takashi Iwai cca179
YCbCr planar formats can have different pitch values for the luma and
Takashi Iwai cca179
chroma planes. This isn't taken into account in the driver. Fix it.
Takashi Iwai cca179
Takashi Iwai cca179
Based on a BSP patch from Koji Matsuoka <koji.matsuoka.xm@renesas.com>.
Takashi Iwai cca179
Takashi Iwai cca179
Fixes: 7863ac504bc5 ("drm: rcar-du: Add tri-planar memory formats support")
Takashi Iwai cca179
[Updated documentation of the struct vsp1_du_atomic_config pitch field]
Takashi Iwai cca179
Takashi Iwai cca179
Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
Takashi Iwai cca179
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Takashi Iwai cca179
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Takashi Iwai cca179
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Takashi Iwai cca179
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai cca179
Takashi Iwai cca179
---
Takashi Iwai cca179
 drivers/media/platform/vsp1/vsp1_drm.c |   11 ++++++++++-
Takashi Iwai cca179
 1 file changed, 10 insertions(+), 1 deletion(-)
Takashi Iwai cca179
Takashi Iwai cca179
--- a/drivers/media/platform/vsp1/vsp1_drm.c
Takashi Iwai cca179
+++ b/drivers/media/platform/vsp1/vsp1_drm.c
Takashi Iwai cca179
@@ -260,6 +260,7 @@ int vsp1_du_atomic_update(struct device
Takashi Iwai cca179
 {
Takashi Iwai cca179
 	struct vsp1_device *vsp1 = dev_get_drvdata(dev);
Takashi Iwai cca179
 	const struct vsp1_format_info *fmtinfo;
Takashi Iwai cca179
+	unsigned int chroma_hsub;
Takashi Iwai cca179
 	struct vsp1_rwpf *rpf;
Takashi Iwai cca179
 
Takashi Iwai cca179
 	if (rpf_index >= vsp1->info->rpf_count)
Takashi Iwai cca179
@@ -294,10 +295,18 @@ int vsp1_du_atomic_update(struct device
Takashi Iwai cca179
 		return -EINVAL;
Takashi Iwai cca179
 	}
Takashi Iwai cca179
 
Takashi Iwai cca179
+	/*
Takashi Iwai cca179
+	 * Only formats with three planes can affect the chroma planes pitch.
Takashi Iwai cca179
+	 * All formats with two planes have a horizontal subsampling value of 2,
Takashi Iwai cca179
+	 * but combine U and V in a single chroma plane, which thus results in
Takashi Iwai cca179
+	 * the luma plane and chroma plane having the same pitch.
Takashi Iwai cca179
+	 */
Takashi Iwai cca179
+	chroma_hsub = (fmtinfo->planes == 3) ? fmtinfo->hsub : 1;
Takashi Iwai cca179
+
Takashi Iwai cca179
 	rpf->fmtinfo = fmtinfo;
Takashi Iwai cca179
 	rpf->format.num_planes = fmtinfo->planes;
Takashi Iwai cca179
 	rpf->format.plane_fmt[0].bytesperline = cfg->pitch;
Takashi Iwai cca179
-	rpf->format.plane_fmt[1].bytesperline = cfg->pitch;
Takashi Iwai cca179
+	rpf->format.plane_fmt[1].bytesperline = cfg->pitch / chroma_hsub;
Takashi Iwai cca179
 	rpf->alpha = cfg->alpha;
Takashi Iwai cca179
 
Takashi Iwai cca179
 	rpf->mem.addr[0] = cfg->mem[0];