From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 68004312832 for ; Thu, 21 May 2026 14:11:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779372702; cv=none; b=k5ZG1LG2pLSHN6T51hgkcRHyH06Ai+8mIZQYuzCsroaijEA4kpnQT1udtm0HtO8tSAkdfqI+wGuly4Kc/G+JhKtz9yF84OhbHI1PrD0P69i5mUPdhYj3GGX9uq2EVXxqEVf+dwET6bn1jzW4eaY+LO1Nc5XoRpTr4Mhqu6AGMuY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779372702; c=relaxed/simple; bh=SsGASIz3illZMtpamQaZ3aekGxKnq2iYrV7/XeVaGvo=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Fgg25LNplN4NyrYcUkrILzodvZhRxEZ4uW1Ade1sTd+5ZUhFTZdhwW8KsJ6cOOi9G5lfiOC9Gy7eEbKUWOtUenYg0jP4OI1Vg12XBsqiSQOPNqVrZlPxd9SvfnhlmWGlvVTrb5NKhus3D/fcnmmXCIHvVsVr29IWzMCeq48g+vw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1wQ47S-0006uw-C3; Thu, 21 May 2026 16:11:26 +0200 Received: from pty.whiteo.stw.pengutronix.de ([2a0a:edc0:2:b01:1d::c5]) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wQ47Q-0017Ne-0g; Thu, 21 May 2026 16:11:24 +0200 Received: from mtr by pty.whiteo.stw.pengutronix.de with local (Exim 4.98.2) (envelope-from ) id 1wQ47Q-00000004Ws9-2jnW; Thu, 21 May 2026 16:11:24 +0200 Date: Thu, 21 May 2026 16:11:24 +0200 From: Michael Tretter To: Sven =?utf-8?Q?P=C3=BCschel?= Cc: Jacob Chen , Ezequiel Garcia , Mauro Carvalho Chehab , Heiko Stuebner , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Hans Verkuil , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, kernel@pengutronix.de, nicolas@ndufresne.ca, sebastian.reichel@collabora.com, p.zabel@pengutronix.de, Nicolas Dufresne Subject: Re: [PATCH v7 12/28] media: rockchip: rga: avoid odd frame sizes for YUV formats Message-ID: Mail-Followup-To: Michael Tretter , Sven =?utf-8?Q?P=C3=BCschel?= , Jacob Chen , Ezequiel Garcia , Mauro Carvalho Chehab , Heiko Stuebner , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Hans Verkuil , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, kernel@pengutronix.de, nicolas@ndufresne.ca, sebastian.reichel@collabora.com, p.zabel@pengutronix.de, Nicolas Dufresne References: <20260521-spu-rga3-v7-0-3f33e8c7145f@pengutronix.de> <20260521-spu-rga3-v7-12-3f33e8c7145f@pengutronix.de> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20260521-spu-rga3-v7-12-3f33e8c7145f@pengutronix.de> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: m.tretter@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: devicetree@vger.kernel.org On Thu, 21 May 2026 00:44:17 +0200, Sven Püschel wrote: > Avoid odd frame sizes for YUV formats, as they may cause undefined > behavior. This is done in preparation for the RGA3, which hangs when the > output format is set to 129x129 pixel YUV420 SP (NV12). > > This requirement is documented explicitly for the RGA3 in section 5.6.3 > of the RK3588 TRM Part 2. For the RGA2 the RK3588 TRM Part 2 > (section 6.1.2) and RK3568 TRM Part 2 (section 14.2) only mentions the > x/y offsets and stride aligning requirements. But the vendor driver for > the RGA2 also contains checks for the width and height to be aligned to > 2 bytes. > > Reviewed-by: Nicolas Dufresne > Signed-off-by: Sven Püschel > --- > drivers/media/platform/rockchip/rga/rga.c | 19 ++++++++++++++----- > 1 file changed, 14 insertions(+), 5 deletions(-) > > diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.c > index f599c992829dd..77b8c7ab74274 100644 > --- a/drivers/media/platform/rockchip/rga/rga.c > +++ b/drivers/media/platform/rockchip/rga/rga.c > @@ -337,6 +337,19 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f) > struct rga_ctx *ctx = file_to_rga_ctx(file); > const struct rga_hw *hw = ctx->rga->hw; > struct rga_fmt *fmt; > + struct v4l2_frmsize_stepwise frmsize = { > + .min_width = hw->min_width, > + .max_width = hw->max_width, > + .min_height = hw->min_height, > + .max_height = hw->max_height, > + .step_width = 1, > + .step_height = 1, > + }; > + > + if (v4l2_is_format_yuv(v4l2_format_info(pix_fmt->pixelformat))) { > + frmsize.step_width = 2; > + frmsize.step_height = 2; If I understand correctly, this limitation may be a result of 4:2:0 chroma subsampling. Thus, formats with 4:2:2 subsampling would also work with step_height = 1. As this may be some hardware limitation, a comment that points to the TRM (in addition to the commit message) may be beneficial, too. Michael > + } > > if (V4L2_TYPE_IS_CAPTURE(f->type)) { > const struct rga_frame *frm; > @@ -358,11 +371,7 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f) > if (!fmt) > fmt = &hw->formats[0]; > > - pix_fmt->width = clamp(pix_fmt->width, > - hw->min_width, hw->max_width); > - pix_fmt->height = clamp(pix_fmt->height, > - hw->min_height, hw->max_height); > - > + v4l2_apply_frmsize_constraints(&pix_fmt->width, &pix_fmt->height, &frmsize); > v4l2_fill_pixfmt_mp(pix_fmt, fmt->fourcc, pix_fmt->width, pix_fmt->height); > pix_fmt->field = V4L2_FIELD_NONE; > > > -- > 2.54.0 > >