From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 402E815E97; Fri, 30 May 2025 13:51:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613094; cv=none; b=CwwziEd57v5e0Fgs2za/jQXFKoXiB+uy+qgQG61HyuAQctpAdp56GVqxiMNP/NpkBlySJY+u5nWyoeZZ1OLFuYssUahETk+E4GqCXi+SGM/hWZk5OIS2570ZgomALg+Pg3Ic8JJ2TenEZy3cgwXGw61BXmjdZjUHKT2WqiruFP4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613094; c=relaxed/simple; bh=rClXTcoOQ5oDq+MUxDlxS/Yj1I0Y66txEryMU35AlQU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PL/NklWmSS6Gcbcikr3i9iCgv/fFRADNt4deQF3N+46HdEg/2DM7MkZYX2n+AgOKavH86uIsN1K/Vgb594nfElIsucYwSOhIn3vjyrrUS3LMM+MWpOb3RsEAb+x8kmrUeB6gKl0DELXver39evgWnjeVWsvyG+l0HaEEKi7xTP0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=DN2gFnwT; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="DN2gFnwT" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id CD404A44; Fri, 30 May 2025 15:51:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613062; bh=rClXTcoOQ5oDq+MUxDlxS/Yj1I0Y66txEryMU35AlQU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DN2gFnwT1dixlrrPu08Bgw4Jn7FaBkOjSrYpzfrXaWFjLlqkl4FaNKcwB0aRBWtKe GSz0t5embdR/T8HFxjIUULsi/YB+qL3SACLR1c3FEji3gCseXSwdivf7AokG+5lF/7 LjPy0woOsIWBXgf/WdJJzlVT5zhYbuW8FUWIozbE= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:30 +0300 Subject: [PATCH v3 01/15] media: rcar-csi2: Use the pad version of v4l2_get_link_freq() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-1-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1186; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=rClXTcoOQ5oDq+MUxDlxS/Yj1I0Y66txEryMU35AlQU=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfaMz4EZRCJRUzt6/Lmm2n9ZZIOumQhImuap GC7j2CgZ6qJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm32gAKCRD6PaqMvJYe 9TjmD/934GA4LtTEpBJU7GdFaElyldmUOrbKxlBnfPvz7aWg0Ca1jZAPb5maM3YxsrxEtCpkEoa RN7YryajxzXtqXOL4U4Be9sJBS4uuqp4nKogBH4o8noQhpBSCUeATTT7MrpFYt0is5uQK8GQBq5 dLT1qHoIUu8U3EyBsLXDpKbXXfN2akQ+u/y9GKf8snWTDPpzXAwEe8PvNyvIbZq3tKjT8apkfO8 QT9Wu3hJOne4DV8Sn4OjX/5JpeXh5MbMNjAiGBBysmwumPzicDaWPp+r4/AxzoQt1Z/NUWMD65P UHmjsUopoxVI5vw7E6fkhvPAy5TvziyQ1TzaGAjK5jJg6ltw37XFiAvfZ/6gwlVdlCY0j8lOdoq 0kBP/An1xdL2hjobte9Jm7OsDRxatlIm2Fk4/kbqnbjCNEQ/DFzmsqIPbgK3eA+esCgoC/XANK5 +WrY9s8Pvvp5OuFPdVsT3bxQeg61ScONIP/sO7EnJzbM28nfMHOO3oaTQViZCxCiAA/IcYLAkYh jVak+p1huohbdx0TtG8UB3IXZsgH2S472zwHSVJbMTiJfAXYVCIkYZ/mWCshMG0j6AHhMvSQalo 5csqhhkuNzUr2O7OApfYWF1lSbyFXChvhapipDv+njQ0LQA3r45WalxW50o0GXhoNh9CeYxF+wQ EMvT5Ef9Ip0zkJg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Use the new version of v4l2_get_link_freq() which supports media_pad as a parameter. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Reviewed-by: Niklas S=C3=B6derlund Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 9979de4f6ef1..ddbdde23c122 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -954,6 +954,7 @@ static int rcsi2_set_phypll(struct rcar_csi2 *priv, uns= igned int mbps) static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp, unsigned int lanes) { + struct media_pad *remote_pad; struct v4l2_subdev *source; s64 freq; u64 mbps; @@ -962,8 +963,9 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsi= gned int bpp, return -ENODEV; =20 source =3D priv->remote; + remote_pad =3D &source->entity.pads[priv->remote_pad]; =20 - freq =3D v4l2_get_link_freq(source->ctrl_handler, bpp, 2 * lanes); + freq =3D v4l2_get_link_freq(remote_pad, bpp, 2 * lanes); if (freq < 0) { int ret =3D (int)freq; =20 --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 6290622B8AA; Fri, 30 May 2025 13:51:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613096; cv=none; b=ahMbFL4UcRYO82kJ+l3dSUainLbi7O447DnYm/hCMXvuxdyewNJmzQj3iWgi7j0YUIfLn0Mkom9udGmmqMKV6i/XLtTAGf8uXWDwNZ/uSy/8a9FZuSULteK02HVeYQZVqx+Myj7kCWt0e6YZr+UxZAqbd9i4dzyhtxOp3wc2ntw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613096; c=relaxed/simple; bh=W5HRHl4jSUWe8tPRd6X0mi3ShE7jUg4uJtCo0gCxDmM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fZXzpIva4ltUuvayS1CljP/bbsKjm+5VhJj4qYnIDMfPsCW8BFaLn25JTWhS4wBcHxSiEa/sA4hQnXjH1qok2PGLAfh0ONS1hmqyP3UBTjnB5wP6gHc58fyREINbjnhp6yfFPz3AQItMuAybE130UIbWk4IID1IzrBBxSUl72LA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=labkmWrC; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="labkmWrC" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 87A32AD0; Fri, 30 May 2025 15:51:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613063; bh=W5HRHl4jSUWe8tPRd6X0mi3ShE7jUg4uJtCo0gCxDmM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=labkmWrCbC8EIuMdKsi4zJvfOLfxqVwZYxMiOJmCJZ69RFJvieTUd7y4mTdIZCcWe ARSH11i1iTKfThhdtxAuMcXfc86yc0b3ULas5geBprm4htHDodyiNjEt1E3dHRBAbf OCI45XMF+MB4VGSeu7cHXryfNQEEv2inewWuaeUI= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:31 +0300 Subject: [PATCH v3 02/15] media: rcar-isp: Improve ISPPROCMODE_DT_PROC_MODE_VC Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-2-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1882; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=W5HRHl4jSUWe8tPRd6X0mi3ShE7jUg4uJtCo0gCxDmM=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfbhDpZvOOgIV3faV8KoVitZn7qXkq97nbdz QGWqirlshyJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm32wAKCRD6PaqMvJYe 9fg+EACRRuRH7RLaeYlzuqhSYqpTlit94XbM5lEuYo9FtUbAO+qemaFA53T2GtN3uQXSK/IzsE9 xS608WZV17M6sYpsZO7suIINI00rrljmnBVMkj1M/zftbYiH2BN/l/yjuwu/20SmJl9paOk8GKF bzptnwlLFuRIAKkE9C7ASeuGIwi1G/uZn45DEhlb9BLUfQ53kaDheEruDSRw7Ib+E5/GKtvpB3l ZcEHE/dDK9gvvhqDe7qVKYEOpZn5bv1rsqEHt/Q59Ho3HdS+Y14SBldoggSPHyCHiZ44A6lHyC5 bjjnqUmbGFm3WRt5oRRdSI1MxOLJnXT/rZS7xSg+11vGE+g547zGXA2//B9Pt310qdijCJ9QqJh VKmpWpUR2jjmwEZ9poiIk7JhLj9MuDwE7h3HS2LPSmDIEDBHAHs01POyoCkZiO6MK/HDfFMpWWx vL0K0NpuatFhn4TSNeZCaSar+lF0Nn9ScEJpqHUkkUTy8rE6cSVBl5LyZnWKgnhgGvamCI4nlyP oTmkJIxQpslU/Phc0HPM9GOULtmVmyDicaOoOnG6hgfwxIM/+uCFf4Ds8LKrosiqnYzzmhQHEn/ 9znbbeWOCndxFW5DEedYHPXgknOwICe3e6IynQEq5M/cecn5qKqGq5m1yyTg9pr68CKgCOJZ/1c UfFTL5hPFMeW1MA== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Instead of having four macros for ISPPROCMODE_DT_PROC_MODE_VC[0123](pm), have just one ISPPROCMODE_DT_PROC_MODE_VCn(vc, pm). Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Reviewed-by: Niklas S=C3=B6derlund Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-isp/csisp.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp/csisp.c b/drivers/medi= a/platform/renesas/rcar-isp/csisp.c index 1eb29a0b774a..8fb2cc3b5650 100644 --- a/drivers/media/platform/renesas/rcar-isp/csisp.c +++ b/drivers/media/platform/renesas/rcar-isp/csisp.c @@ -28,10 +28,7 @@ #define ISPSTART_STOP 0x0000 =20 #define ISPPROCMODE_DT_REG(n) (0x1100 + (0x4 * (n))) -#define ISPPROCMODE_DT_PROC_MODE_VC3(pm) (((pm) & 0x3f) << 24) -#define ISPPROCMODE_DT_PROC_MODE_VC2(pm) (((pm) & 0x3f) << 16) -#define ISPPROCMODE_DT_PROC_MODE_VC1(pm) (((pm) & 0x3f) << 8) -#define ISPPROCMODE_DT_PROC_MODE_VC0(pm) ((pm) & 0x3f) +#define ISPPROCMODE_DT_PROC_MODE_VCn(vc, pm) (((pm) & 0x3f) << (8 * (vc))) =20 #define ISPCS_FILTER_ID_CH_REG(n) (0x3000 + (0x0100 * (n))) =20 @@ -263,10 +260,10 @@ static int risp_start(struct rcar_isp *isp, struct v4= l2_subdev_state *state) =20 /* Setup processing method. */ risp_write_cs(isp, ISPPROCMODE_DT_REG(format->datatype), - ISPPROCMODE_DT_PROC_MODE_VC3(format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VC2(format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VC1(format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VC0(format->procmode)); + ISPPROCMODE_DT_PROC_MODE_VCn(3, format->procmode) | + ISPPROCMODE_DT_PROC_MODE_VCn(2, format->procmode) | + ISPPROCMODE_DT_PROC_MODE_VCn(1, format->procmode) | + ISPPROCMODE_DT_PROC_MODE_VCn(0, format->procmode)); =20 /* Start ISP. */ risp_write_cs(isp, ISPSTART_REG, ISPSTART_START); --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 6D11D22CBE4; Fri, 30 May 2025 13:51:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613098; cv=none; b=Ac9qb/uFRBWtehRs0+mrqUQMaGUGRr2MmATmsKaEh+dK6yv8vxM7Dr4YwLOgsznsFC8VZWTH5AVUDiq3JNoijqS5btY8nWQiC1VeOnmGHrBdjMtk0LQMSzf3O7DM3KQHsYgUY61LHBQ9Ih2V6QGySDYQrr5VEJDMGOw+e5StlOE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613098; c=relaxed/simple; bh=hmnQ+jK97q2WKdM1rwH2rwCrfKMpKR0KZEvJa1ntwjM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nNKa2Nor1PkZpxyADbQ21OKpz6sCilPo/d/bFzFuJZd0/kbbMv1SSL89msYW91EzirnvlqD8OBNvqaG/A6DzAy5K7MPIAj1erx1TgN+6dBwPjYYJ7W+4kSzFstZKeRAsu3EdO0p1MGchTK71N1hAh15bOoOp+WyckOjv9lXzB5A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=RAWJDibz; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="RAWJDibz" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 3F31310C4; Fri, 30 May 2025 15:51:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613063; bh=hmnQ+jK97q2WKdM1rwH2rwCrfKMpKR0KZEvJa1ntwjM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RAWJDibzLhqkq3XlE0on3qlBm/viskf33T4GEII9OoLSK/u86RXvXU2jDbdQ+pM8r 5fHVCHqk2uzVTwSsOg//gq4QH6S8B5GfWv3EDDxchEoe2dX2O+xwaO9XY4qSuyOMiz kVVvspu5i1WlwJxw2xkKQzjQ1mMXD2ySYYe32KtU= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:32 +0300 Subject: [PATCH v3 03/15] media: rcar-isp: Move {enable|disable}_streams() calls Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-3-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1831; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=hmnQ+jK97q2WKdM1rwH2rwCrfKMpKR0KZEvJa1ntwjM=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfbXA2nghA+PGEjqGOS2BiJcZwLdjUw1JHMO tFyLQ153c2JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm32wAKCRD6PaqMvJYe 9dJXD/9yBe9gTG3FoThVaqheVo1bmwhzfvsp83xkzaLPN9FVDlQ3j3v5p9U8TVQvprAP53QKiCt swPAl5Wz6m/WjeQqWOIGT0m+ULZhepYL6WOp4i2t4iBuMp9TL1xhLVHG0nxrGLMYXdx+MnlgQQt 9AEZ0cuJXUq9ibxKNvBJQi57PSDqZwNrQb5EnhgTHnQYBTQXMXIkZsoXgJRF+p2VL8mE93/Cod8 /lqyuoS4RtKDbYrlbGOVr8Z1YjtTiAZqji8wSPqWSYSpwEFUmNivxiuz8XdIZ0RsgdDvYZrZBaO MyehXusq9zcZbRtQSd4+S/KvYy82knsJJ0xPPPAB5aYO4BlyQye/IR4Dgnml3H9W/pNKz8NVOl2 MRtW4j/oEb/hrMsPIsupyiF4cwX9OZsd16w7SX7h2cL/J5pLcXD/SFgqgKFr1uMWNr0JXTt6Ak3 wGS+3neKk/BrXdW95fHOh2g3Jj97DKtY+kgYXOSgpDo4tiYvdLyHchMb06RZyLlfqwzQScbaCzW SzrhJnuIAtoi1n9InN10YU7ZEN7uZGcN0viDERL2e2Ywyb0cSLwP+1N51vqrrFkjCZHpBHqfan1 H7l2VQVAp5C7QRtaRdaXtNPkOniDdWRR6f2/zLm1aEVVmv/nwvT4jYJAzZs9rB80VqxB+dgjpKN 0UkSLbG2+hyoQLg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 With multiple streams the operation to enable the ISP hardware and to call {enable|disable}_streams() on upstream subdev will need to be handled separately. Prepare for that by moving {enable|disable}_streams() calls out from risp_start() and risp_stop(). Signed-off-by: Tomi Valkeinen Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-isp/csisp.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp/csisp.c b/drivers/medi= a/platform/renesas/rcar-isp/csisp.c index 8fb2cc3b5650..2337c5d44c40 100644 --- a/drivers/media/platform/renesas/rcar-isp/csisp.c +++ b/drivers/media/platform/renesas/rcar-isp/csisp.c @@ -268,18 +268,11 @@ static int risp_start(struct rcar_isp *isp, struct v4= l2_subdev_state *state) /* Start ISP. */ risp_write_cs(isp, ISPSTART_REG, ISPSTART_START); =20 - ret =3D v4l2_subdev_enable_streams(isp->remote, isp->remote_pad, - BIT_ULL(0)); - if (ret) - risp_power_off(isp); - - return ret; + return 0; } =20 static void risp_stop(struct rcar_isp *isp) { - v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, BIT_ULL(0)); - /* Stop ISP. */ risp_write_cs(isp, ISPSTART_REG, ISPSTART_STOP); =20 @@ -305,6 +298,13 @@ static int risp_enable_streams(struct v4l2_subdev *sd, return ret; } =20 + ret =3D v4l2_subdev_enable_streams(isp->remote, isp->remote_pad, + BIT_ULL(0)); + if (ret) { + risp_stop(isp); + return ret; + } + isp->stream_count +=3D 1; =20 return ret; @@ -322,6 +322,8 @@ static int risp_disable_streams(struct v4l2_subdev *sd, if (!isp->remote) return -ENODEV; =20 + v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, BIT_ULL(0)); + if (isp->stream_count =3D=3D 1) risp_stop(isp); =20 --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 9AE5222D9F6; Fri, 30 May 2025 13:51:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613100; cv=none; b=iMwdI1WU7pswIOBwA061s6RAvB2lfTiAmiFDAnWpH5LwYvfNDLNhWLR0KOQej1vGPeBv0HEdbKYzgjTzWekTKrqyQdKR4TYZPcgwFLxThEbUYNWHze44YLU5Q7Euy5JF4cq1BBdKNlRrDai4RN7ei8PBokT+qRZZvK476m5ms8I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613100; c=relaxed/simple; bh=belfbHJAk/4wDSUWKwSGFsMJp8VqA/wPEL2IyDXlAUU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pBjFFm3ipUjnK0Es1O6zqdR2OoGRpa+x2uiGUwOOcu00sf8HtkkKj9TKxCv9Q40Pq17HGfLuXGqbN/EMITa5kKsawmwng1KStLuL6kTZyTC4XRkm68BL+bsHdZCPvccTwnp/GXCtGXim4hY1BTGGSvo2r/JtZd/LKfGgOTrL5Vs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=X+ogWk9V; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="X+ogWk9V" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E83AD1666; Fri, 30 May 2025 15:51:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613064; bh=belfbHJAk/4wDSUWKwSGFsMJp8VqA/wPEL2IyDXlAUU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=X+ogWk9VPFjZtbwsD1rp/bU5256vKS+bdOF2FVQT+trwuqtw8L4ML9j/8ZmQy2IIE 5MYKbkPNIsyUL/zLtdH3CGIjCdfKj7hQpPgvfYVPwbgIlKo+n1vw04yBq52UZTxFh6 YJGcqL0Ja9fC4J5S8e1n6fFOrsfQkkRbBpyYinC8= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:33 +0300 Subject: [PATCH v3 04/15] media: rcar-csi2: Move {enable|disable}_streams() calls Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-4-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1818; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=belfbHJAk/4wDSUWKwSGFsMJp8VqA/wPEL2IyDXlAUU=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfcZ30/6NKB39m6h8M5YJUN7nu3yF2Fq3WlE GRSnCg4HK6JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33AAKCRD6PaqMvJYe 9RyqEACD7oyValMIy4peGKeczF54eXZ2KNpuAkW/mNFwcugGxYD35K4k06QJTu6XIccGpAL1Gl6 Za6JyycOdoArT2izk7b6y2bA8AQwqgr8f0BdqZHZZLXr+ITqCFyXz1Lxz1Dm6w1QXYJ+F7QMJnp +YtF86Z3y/obo8eKszbNdUl0uATcjrB18SNWJTAHWOcWTJMQiNlFykrgpuLh7DJljYTu1reT3uG IDe3MBGVKcl2KGt4A7pOvMAYMc9TwLjm0rCpcCE+DBxFRUobjf8uSagrh/rdfbNoF3IoDezXymz ZY8/nHByf5YOhE8ALz8xf6BpbvLRy12wYOpFQ1nVDAl2Qqhn2PWqPC4zORjwVEI6kbkWXoiMVEa FdUo1Bxz9iFotgg2l1gKmDCgwZJm752FZtcDsRO2/CNZFiH9tEF4Vkzl0XWEzBfFipKfAuXOaDc JyOxBRYoPL8GlnaabhMKLL+8BEulNepAvpwZt6g8JcKWDxBLCMUe1psPRO7/8C1xNQu4T1Zakck 4h2+Dacgxa48EukH9UD3gmL3sLC6nV9l76EFBsOBZJ6kNneH8hO0BP1eIqYeAejNc6aZjPgEBTd 8EB0dUsjhOMjdGAvt4fHSHaJHk21FUsZK+pSAj/I0nmGbeE08Y+/RF+GSD0ijyfnQB7PsU6fYiO y52JTfGp1PetyMg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 With multiple streams the operation to enable the CSI-2 hardware and to call {enable|disable}_streams() on upstream subdev will need to be handled separately. Prepare for that by moving {enable|disable}_streams() calls out from rcsi2_start() and rcsi2_stop(). Signed-off-by: Tomi Valkeinen Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index ddbdde23c122..698eb0e60f32 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1573,20 +1573,12 @@ static int rcsi2_start(struct rcar_csi2 *priv, stru= ct v4l2_subdev_state *state) return ret; } =20 - ret =3D v4l2_subdev_enable_streams(priv->remote, priv->remote_pad, - BIT_ULL(0)); - if (ret) { - rcsi2_enter_standby(priv); - return ret; - } - return 0; } =20 static void rcsi2_stop(struct rcar_csi2 *priv) { rcsi2_enter_standby(priv); - v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, BIT_ULL(0)); } =20 static int rcsi2_enable_streams(struct v4l2_subdev *sd, @@ -1608,6 +1600,13 @@ static int rcsi2_enable_streams(struct v4l2_subdev *= sd, return ret; } =20 + ret =3D v4l2_subdev_enable_streams(priv->remote, priv->remote_pad, + BIT_ULL(0)); + if (ret) { + rcsi2_stop(priv); + return ret; + } + priv->stream_count +=3D 1; =20 return ret; @@ -1629,6 +1628,8 @@ static int rcsi2_disable_streams(struct v4l2_subdev *= sd, if (priv->stream_count =3D=3D 1) rcsi2_stop(priv); =20 + v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, BIT_ULL(0)); + priv->stream_count -=3D 1; =20 return ret; --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 A933A22DF84; Fri, 30 May 2025 13:51:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613101; cv=none; b=o+ACLDyE9oQVK18K6cqATn3lyxbJiAonbx8F5gpcNDsvTFeq6PUPFzvyJSJr0xKuoc+vcwzYY+/SDBW1XNzTIK88VJraqQrnH91lN/xps8q6/3g8VvEWP0r62wuJjVc3hq1a2jxEgOmF46MT+FYIZvPiFVDc6gVLq2g2nXl6s0E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613101; c=relaxed/simple; bh=qIwc/mCCkgIMzyAyWFhxe7hb7H6PsuoxUxDGrtcsi/o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M2JxlXK//vhCNGmnwdiYLI64EErl7nvtBw7dIXGw+dpopq7daza7WT8SzKgDnK935tP0grsOz1ljpt6Lsg9mgwLAglctTap8UNcThxR2bAw/NUnGXeH/BT4XDihBdEKI4R+iDufvnpnazKeSpIy88WZKuc2F4UKYFev3ST1IMLk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=VUHkc98H; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="VUHkc98H" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C3B1817C1; Fri, 30 May 2025 15:51:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613065; bh=qIwc/mCCkgIMzyAyWFhxe7hb7H6PsuoxUxDGrtcsi/o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=VUHkc98HWhed+vpIdhccuyuXTTcpC18AuIsBwIsd1ggKUXbx6NO6dKZVxW7Gt3NwU PCHmBqM9hBXfN6Q5uKOQ3oWcVFS/1QN14E/Ud1jrxVhfpQLrK3ifA+yIh6C5QQEhut nIwuB/O5Yjp3TfuE2oO6nBgMc7CYxYtsjZgIx0uM= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:34 +0300 Subject: [PATCH v3 05/15] media: rcar-csi2: Move rcar2_calc_mbps() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-5-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2390; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=qIwc/mCCkgIMzyAyWFhxe7hb7H6PsuoxUxDGrtcsi/o=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfctDcfT6hfgCPjTbCOG2kAa+pVLeecltsX5 3qHdE0Vvs+JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33AAKCRD6PaqMvJYe 9XDiEACmN4VmeSBzigNfWRuYTc0vRTzvSEXZHFS05d5pIBuJp4Xk4iC1b4W+BpZ6U5THv3bxW/3 ZsLXWV4/h43KCOxsszeTepREMBInrI8+3PD9lhuez/UytP8RtO42HM1lpljNkf4k1luZDC6Btgg vy7xS4ct6A8Qh/QVWoOOc6wmISR9Yong6a2CbqgnUjVSBZBbF3sxwgJi6b0Gk9Vti8in3sy5fOM vEFf2aqQTE5tsvkoz1Ph6Dg3JL/2GqgGvudOJSbjoLZRtzhzWLB1Wss/kvp5H6Md9jnID7ZFTlW l10mshfB7mrwGBznmpdvYfHxHI06cSTdaND5uTP1ekg2PsWNsQd67o7QhOiiPTW2EgFCTu67nUN JLwwUi5iLXw+lcA9LGJtUwH9h1yzfFytJgYU1lSOXYlpXGRMLU/+xX3KWjcx4Rl0keybCiPbqph bP96fEh8vgP5cHrQmw60IaLlzWMVpWy5U8DUBQU+VcU91CbjJHPhe7SimB0l5cCdzNwRfD3Ruff ddJC4tAyO6KTZ6BfpTUZ81RD7NoY97GhCvbzTemk95XKbV/XATj+E5iygD2J1zWDTZcXxy0FTN/ RZ3CTpgNlAxvugAGFmsyHVUbvinKLAU83+IDPUNzbbpflh/m5WURp5RIKpeKCegypBx0yckaWAO pODVvuSvqfWMvsg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Move the function so that it can call rcsi2_get_active_lanes() in the following patch. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Reviewed-by: Niklas S=C3=B6derlund Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 66 +++++++++++++++-----------= ---- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 698eb0e60f32..8aca35096408 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -951,39 +951,6 @@ static int rcsi2_set_phypll(struct rcar_csi2 *priv, un= signed int mbps) return 0; } =20 -static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp, - unsigned int lanes) -{ - struct media_pad *remote_pad; - struct v4l2_subdev *source; - s64 freq; - u64 mbps; - - if (!priv->remote) - return -ENODEV; - - source =3D priv->remote; - remote_pad =3D &source->entity.pads[priv->remote_pad]; - - freq =3D v4l2_get_link_freq(remote_pad, bpp, 2 * lanes); - if (freq < 0) { - int ret =3D (int)freq; - - dev_err(priv->dev, "failed to get link freq for %s: %d\n", - source->name, ret); - - return ret; - } - - mbps =3D div_u64(freq * 2, MEGA); - - /* Adjust for C-PHY, divide by 2.8. */ - if (priv->cphy) - mbps =3D div_u64(mbps * 5, 14); - - return mbps; -} - static int rcsi2_get_active_lanes(struct rcar_csi2 *priv, unsigned int *lanes) { @@ -1031,6 +998,39 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *p= riv, return 0; } =20 +static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp, + unsigned int lanes) +{ + struct media_pad *remote_pad; + struct v4l2_subdev *source; + s64 freq; + u64 mbps; + + if (!priv->remote) + return -ENODEV; + + source =3D priv->remote; + remote_pad =3D &source->entity.pads[priv->remote_pad]; + + freq =3D v4l2_get_link_freq(remote_pad, bpp, 2 * lanes); + if (freq < 0) { + int ret =3D (int)freq; + + dev_err(priv->dev, "failed to get link freq for %s: %d\n", + source->name, ret); + + return ret; + } + + mbps =3D div_u64(freq * 2, MEGA); + + /* Adjust for C-PHY, divide by 2.8. */ + if (priv->cphy) + mbps =3D div_u64(mbps * 5, 14); + + return mbps; +} + static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 820EE22F177; Fri, 30 May 2025 13:51:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613103; cv=none; b=GKN7ujo7terrlS1s+0Ys2+nWOiyjLdhdU1y1SiPLetFG25DpGPuYe7UyirHB3Y18l7QMdDvXYBnNbAd8PtY1Dmo462iCH3nViNupkvnXmQhB8pIsELHL5rzGtC24oAae6hJ1/a3RspX2sWDAbdS0VNSI8/nAWrplepg050ApDug= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613103; c=relaxed/simple; bh=f9Zu08iRKcpOonJQPT1z5w861yw0MT1qatoa5Fhmp1w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s2XM/cV+FaThyuYKN7esCu613aIDmjJMkOfJRDhIjH7/waaMiE2PHzBFkjM4XLs8kZR/r9D/dJtKbtHuBCRTetyo0qgvJ39HMTJnU16ZNMh560nq3u/3dftERmE2fN5SXsNFZv+7YE9LGhGF56aHr2ZbX40GnMd+IxdAFCCgKDY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=n+NrvRvP; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="n+NrvRvP" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7903918B9; Fri, 30 May 2025 15:51:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613066; bh=f9Zu08iRKcpOonJQPT1z5w861yw0MT1qatoa5Fhmp1w=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=n+NrvRvPFHrs2RxiCfukHYWAgrkAw5dlXignOfRYlDHhmOEeYve7xqOQbtWOTJKgx 0TO0VN8oReqPeeDGgeAP3LpJBf7+pePxXzBpQAdum/CfKoaApftxx4bE+eqOLgkivJ r3RwHbDvpPvmILEVqDVzRmSdsNkbELdGYL9LlSF0= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:35 +0300 Subject: [PATCH v3 06/15] media: rcar-csi2: Simplify rcsi2_calc_mbps() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-6-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=3595; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=f9Zu08iRKcpOonJQPT1z5w861yw0MT1qatoa5Fhmp1w=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfcPSkp3vyJSwbTde2dwYrlWJfHsNOBgz5yX c8Ovq/E/dGJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33AAKCRD6PaqMvJYe 9TLuD/0T+gn4n8w5SPNtPddeWlQzF+0598QNlON16oJCj2ksX5gaJ42JSyuUV5EVvhlZq1v4wny LPnmFlTS6X1kn4tTHHWw0weslcv5/ChXCmwsGxvPkU4MxoI2XJGs7tvXavUKUik3us+nJ1FdKhE tU1smuiXdcBsFkXTRenffZSkM4fMYfez2o9fhNcERPUjZiClfNRxTfRh5nbQcjPxAGNyn1N0ZLU MiWtouyw1KU4W4MGNFkOI2TmImyPNvsLV8LwM9mUb5+ltL31xB25hrSzNWVq0QDg6+OlMOXCl4d mKqSbgz3N82fit7YWL/ek29SriTGHfHyr3OTMzmGd1xzJvGuNhQaLQDPDlJ6Gwv4XMYwOH6l/Nj LKHfcmNFW7ahfdyBqCXZbCJ3J0CqCc/Wzren2rAq2rAL/mWgPzjl7uesMsAh7F39hj26a7vF7mo iKSDLNnaJaZUNXKFgecjGKEwqk1Jm9iRSYV73V+sdTpxazro1CKxP6LTDylzKtECJKUsVI0rkLV eJwh3i1oY+Vv9IiVT7zNianT6tcSWvL4ncndTNH40vYuw4Plo2xZnCocD9bsj/nQu1umOR11uCx wcv1y6ZM9gtRenuDkIBJwHKwWUyRdEGSsKLnQotC6ECCUcN+Xb9KnRJEkMVoi0Ue2xjVSA82QEB BikkiwK9rFqbkfg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Instead of taking the bpp and the number of lanes as parameters to rcsi2_calc_mbps(), change the function to get those parameters inside the function. This centralizes the code a bit and makes it easier to add streams support. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Reviewed-by: Niklas S=C3=B6derlund Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 45 ++++++++++++++++----------= ---- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 8aca35096408..90973f3cba38 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -998,13 +998,18 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *p= riv, return 0; } =20 -static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp, - unsigned int lanes) +static int rcsi2_calc_mbps(struct rcar_csi2 *priv, + struct v4l2_subdev_state *state) { + const struct rcar_csi2_format *format; + struct v4l2_mbus_framefmt *fmt; struct media_pad *remote_pad; struct v4l2_subdev *source; + unsigned int lanes; + unsigned int bpp; s64 freq; u64 mbps; + int ret; =20 if (!priv->remote) return -ENODEV; @@ -1012,6 +1017,20 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, u= nsigned int bpp, source =3D priv->remote; remote_pad =3D &source->entity.pads[priv->remote_pad]; =20 + ret =3D rcsi2_get_active_lanes(priv, &lanes); + if (ret) + return ret; + + fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); + if (!fmt) + return -EINVAL; + + format =3D rcsi2_code_to_fmt(fmt->code); + if (!format) + return -EINVAL; + + bpp =3D format->bpp; + freq =3D v4l2_get_link_freq(remote_pad, bpp, 2 * lanes); if (freq < 0) { int ret =3D (int)freq; @@ -1092,7 +1111,7 @@ static int rcsi2_start_receiver_gen3(struct rcar_csi2= *priv, phycnt =3D PHYCNT_ENABLECLK; phycnt |=3D (1 << lanes) - 1; =20 - mbps =3D rcsi2_calc_mbps(priv, format->bpp, lanes); + mbps =3D rcsi2_calc_mbps(priv, state); if (mbps < 0) return mbps; =20 @@ -1300,23 +1319,15 @@ static int rcsi2_c_phy_setting_v4h(struct rcar_csi2= *priv, int msps) static int rcsi2_start_receiver_v4h(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { - const struct rcar_csi2_format *format; - const struct v4l2_mbus_framefmt *fmt; unsigned int lanes; int msps; int ret; =20 - /* Use the format on the sink pad to compute the receiver config. */ - fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); - format =3D rcsi2_code_to_fmt(fmt->code); - if (!format) - return -EINVAL; - ret =3D rcsi2_get_active_lanes(priv, &lanes); if (ret) return ret; =20 - msps =3D rcsi2_calc_mbps(priv, format->bpp, lanes); + msps =3D rcsi2_calc_mbps(priv, state); if (msps < 0) return msps; =20 @@ -1494,23 +1505,15 @@ static int rcsi2_init_common_v4m(struct rcar_csi2 *= priv, unsigned int mbps) static int rcsi2_start_receiver_v4m(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { - const struct rcar_csi2_format *format; - const struct v4l2_mbus_framefmt *fmt; unsigned int lanes; int mbps; int ret; =20 - /* Calculate parameters */ - fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); - format =3D rcsi2_code_to_fmt(fmt->code); - if (!format) - return -EINVAL; - ret =3D rcsi2_get_active_lanes(priv, &lanes); if (ret) return ret; =20 - mbps =3D rcsi2_calc_mbps(priv, format->bpp, lanes); + mbps =3D rcsi2_calc_mbps(priv, state); if (mbps < 0) return mbps; =20 --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 92E0C22F767; Fri, 30 May 2025 13:51:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613104; cv=none; b=Cf6kVi1GS00w3TfzIbH08kKyoWsVuUafwWV6dNIWw462ERdjydfOTxJrmpIJplfVNJ49Ym0kFdktsNSFd2DzjkfFxo6wh1n5GxPBQtwiuq+y5JpKP5CXK0Cdmu4+zabBLVBCojidKOEgqUt+VP3rhdgV6YHfssT9Uq7mV/CCNBU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613104; c=relaxed/simple; bh=wX8xnb5JJonq7MBfmlA0sa10fSG4A6We7UuS2Jc3MDg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gTA/rBXey6oSaoy9aW8Ljss+Mg0wxa7H3t55XjA7AGRJ07jeAjH3D3rkmY08gCWRlE4/SOu1ndx8Z8yJI2WA2srel1+dvrVEAGVcsKpV1mlL4DE9BnuRamrpledZboxae2q7Oj8Bp2GehTcAkRrZLd5dbjXlpgj+AVuYiobpCzA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=Y397xb9k; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Y397xb9k" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 2FE2589A; Fri, 30 May 2025 15:51:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613066; bh=wX8xnb5JJonq7MBfmlA0sa10fSG4A6We7UuS2Jc3MDg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Y397xb9kVZZ4hbXaxYJ0CYV6ghuiU6cqtM9UDY43zqBr8eexTQsEOjCg0EFgiPG40 leAtdO2uTvGOWzwH//uywTams3bMDFFyOF9lb9xPlzYYJrrFbiqbEdffB7MwUCj/gQ FyUj7u4M2HDSVVejqy+lV9RjXOVkHzgoTraxB+DY= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:36 +0300 Subject: [PATCH v3 07/15] media: rcar-csi2: Optimize rcsi2_calc_mbps() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-7-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2872; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=wX8xnb5JJonq7MBfmlA0sa10fSG4A6We7UuS2Jc3MDg=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfdPNzj7O5PEW82QBfQqHRnYiQcWxHb1M9Mu xBZUd1kWEKJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33QAKCRD6PaqMvJYe 9ZZ0D/oCKBmnAKOizGNZNQKisy+BkYrjeiMNEckVR3NxS2SfdEYYkKfvl2c86QnY7rTAteKJv7E sZB0nzH8440dRjpBpEjIE8i4VRuHS6+j8V3yFkzoMQYnI7YxUq2IistO2vHnPfwqqNUB5WD88Gy 98FSKmwEAfl3FeRYzQOUPo3wdXLMW2L7ZZ/wJS56jz2g2BdCMiEhZTE9/o7YqkjwTndYDYUmMBq 2AnQGGpj3Y00h3YZ83B/UFlQB+5jZgN9DkEYnJII+dxsBvMTY9l5HgngMKrj2W8COxCsPj91gYI Km9ZdqEDoQCGvGt7K9k9C+3Hjpm+qM9IBPTwB3yA+OUG1jr+akCyvNVtH77Bgwi0wS7tKxHJMqu gKvo1yXXxgdpWpy8lKjUBw1b8VpwJJJlp+smNyPJ7+dRfGo4c1gQ/epMY9mVwvN47cTuTOijWSM ec8p5MhksgTwT/CjO6jbOnFhOISHF9KcqdxIdHQat5xQs3cKRkQ0UyUBHwEgUZneMkLs9SDhxpP A0iETO0WUyY79nVnPO3givwDkws+wriIHTnVbHQaI2vb2s13vZdBKojgw5M1AvSN7a4MWxjb3HX 2PdYa0Tg5xeAs9uJ6Sw9p7HU5+X2YEfknivvsa5tzyE2FTi9R55PN7/sMXhBfLvB1WB6zcVv6Xl HyV/YX7A/wxmUtA== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 With modern drivers supporting link-freq, we don't need to do any calculations based on the bpp and number of lanes when figuring out the link frequency. However, the code currently always runs code to get the bpp and number of lanes. Optimize the rcsi2_calc_mbps() so that we only do that when needed, i.e. when querying the link-freq is not supported by the upstream subdevice. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 50 +++++++++++++++++---------= ---- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 90973f3cba38..e0a0fd96459b 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1001,15 +1001,10 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 = *priv, static int rcsi2_calc_mbps(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { - const struct rcar_csi2_format *format; - struct v4l2_mbus_framefmt *fmt; struct media_pad *remote_pad; struct v4l2_subdev *source; - unsigned int lanes; - unsigned int bpp; s64 freq; u64 mbps; - int ret; =20 if (!priv->remote) return -ENODEV; @@ -1017,28 +1012,41 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, source =3D priv->remote; remote_pad =3D &source->entity.pads[priv->remote_pad]; =20 - ret =3D rcsi2_get_active_lanes(priv, &lanes); - if (ret) - return ret; + /* + * First try to get the real link freq. If that fails, try the heuristic + * method with bpp and lanes (but that only works for one route). + */ + freq =3D v4l2_get_link_freq(remote_pad, 0, 0); + if (freq < 0) { + const struct rcar_csi2_format *format; + struct v4l2_mbus_framefmt *fmt; + unsigned int lanes; + unsigned int bpp; + int ret; =20 - fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); - if (!fmt) - return -EINVAL; + ret =3D rcsi2_get_active_lanes(priv, &lanes); + if (ret) + return ret; =20 - format =3D rcsi2_code_to_fmt(fmt->code); - if (!format) - return -EINVAL; + fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); + if (!fmt) + return -EINVAL; =20 - bpp =3D format->bpp; + format =3D rcsi2_code_to_fmt(fmt->code); + if (!format) + return -EINVAL; =20 - freq =3D v4l2_get_link_freq(remote_pad, bpp, 2 * lanes); - if (freq < 0) { - int ret =3D (int)freq; + bpp =3D format->bpp; =20 - dev_err(priv->dev, "failed to get link freq for %s: %d\n", - source->name, ret); + freq =3D v4l2_get_link_freq(remote_pad, bpp, 2 * lanes); + if (freq < 0) { + int ret =3D (int)freq; =20 - return ret; + dev_err(priv->dev, "failed to get link freq for %s: %d\n", + source->name, ret); + + return ret; + } } =20 mbps =3D div_u64(freq * 2, MEGA); --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 1B34D230BC9; Fri, 30 May 2025 13:51:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613106; cv=none; b=jYkurqB7IALCilKSpqiNxzTIhIf7QS/nFf1J9zu3ja7Pc3tQk9Fyuf2pLXZx1kW3zTxjTfhwfBVZCvoEUIL5ekKXKujs8eQq21SMRRLAAF32Mok7+WVkcJOlvIn/LgcuPQVvb7YKyUUAF4sQ7GuGPndbQY7Q88Msbi+N3mzK+1Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613106; c=relaxed/simple; bh=eGxXrbQ8I7Tnu7ZgQwBPljss30FabnTKNMEZW47YvvU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p9H7y/rWX1uST7wpVkjKq+RNRFSJTOVMQyFoNajRUCnc1z6nC31TOH9eYfePS04ubKIC4Xkw2ng7SaQe0udgusF56BZOUAIbkp858bLJUW7qhP0ZOM7lYtRMJC6Yal7jJ7TMX0urObzAGeEvQ/L6TDDIpL3YfyQVa0ClRPVsX1g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=dXDi4mnV; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="dXDi4mnV" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DE18B192D; Fri, 30 May 2025 15:51:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613067; bh=eGxXrbQ8I7Tnu7ZgQwBPljss30FabnTKNMEZW47YvvU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dXDi4mnVI9GpHdSFLpPRYPVr4swS2UbjPSSnvnXZHfk6djxjO8LmP9JJl1z8kVOqy tx025GPVigR4gbY40P5ieUKo2BbpaGiU25nJ9JpU/cGa0FSyhLvMEwm2RgqsVZ0maO gZab07Ds9LxJJCEySW2wv8DPV7ZObHFuvyvPUUj0= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:37 +0300 Subject: [PATCH v3 08/15] media: rcar-csi2: Switch to Streams API Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-8-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=4215; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=eGxXrbQ8I7Tnu7ZgQwBPljss30FabnTKNMEZW47YvvU=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfd/p4ubr3zmsUbKGBLOTaSAc+w1REz+jCt5 BMlTyLEkVuJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33QAKCRD6PaqMvJYe 9UsSD/9gkjCE70TGoPwZtu7N7/bgachPzt5D1V5jryQxrKE9BmnuPHQP0MIdrHEXd+52l+piojj cmDniOflk2s15onpxVyNQtx011834gZymbG11JEjOl9R/RXOBbMCTVKw1ndnLsD0+7MymoGEEtV Ato3Cli8rE7oPO8Lcani7Kka6g234Dhjvr6h0TSzXzYM2wx9QV9ixS2xjNELQcQPTVmwSwHn+4n J7pUqZdKE1Df39Rt/+Pvt8r9+acVQN15Rd44D3eR1zUh4v6PusU0AkJ7j0phAM9LJEQdJQEAsk6 RPOqasAL4Mwj0dk4jTMfYeEOXstnpszoojwn4+jaxQNhs/O9M9/rHsQojToDj9QC3y09OFU1lZ6 zzdSDIhHFn4n51myhTn4TjQrG0pPLVggURQ9SZURxcCvE6HD+w+Q1PPCHPkC+J2obNivuzUlNgy ajmqP853y8SZw3RWznmaUdLEFjEDamhiozFN+45tsUAV+qgnPGw5ufCWUBZBB2n62WQ2Atvb2qn AkZFnFQPIxuFrt7uzmD9QHN+kVUzMh3NDYgEko2Xi0DLSvR8NEnNbIXf9Ymu3jQi/6PAFIyW6C2 aZe4HIgOdIqAC1/sWTFpze/bHdfMmZjE/+yGQAsr3GgyyYrdPmCfJWP33GPaWwtp6vByFvvs4oF nbeFbNa2GkRvMmw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Switch to Streams API with a single hardcoded route. This breaks any existing userspace which depended on the custom rcar streams implementation, but a single camera use case should continue to work. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Reviewed-by: Niklas S=C3=B6derlund Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 47 +++++++++++++++++++++-----= ---- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index e0a0fd96459b..20bd44274bd2 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1028,7 +1028,7 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, if (ret) return ret; =20 - fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); + fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); if (!fmt) return -EINVAL; =20 @@ -1069,7 +1069,7 @@ static int rcsi2_start_receiver_gen3(struct rcar_csi2= *priv, int mbps, ret; =20 /* Use the format on the sink pad to compute the receiver config. */ - fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); + fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); =20 dev_dbg(priv->dev, "Input size (%ux%u%c)\n", fmt->width, fmt->height, @@ -1650,8 +1650,7 @@ static int rcsi2_set_pad_format(struct v4l2_subdev *s= d, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format) { - struct rcar_csi2 *priv =3D sd_to_csi2(sd); - unsigned int num_pads =3D rcsi2_num_pads(priv); + struct v4l2_mbus_framefmt *fmt; =20 if (format->pad > RCAR_CSI2_SINK) return v4l2_subdev_get_fmt(sd, state, format); @@ -1659,11 +1658,20 @@ static int rcsi2_set_pad_format(struct v4l2_subdev = *sd, if (!rcsi2_code_to_fmt(format->format.code)) format->format.code =3D rcar_csi2_formats[0].code; =20 - *v4l2_subdev_state_get_format(state, format->pad) =3D format->format; + /* Set sink format */ + fmt =3D v4l2_subdev_state_get_format(state, format->pad, format->stream); + if (!fmt) + return -EINVAL; + + *fmt =3D format->format; + + /* Propagate to source format */ + fmt =3D v4l2_subdev_state_get_opposite_stream_format(state, format->pad, + format->stream); + if (!fmt) + return -EINVAL; =20 - /* Propagate the format to the source pads. */ - for (unsigned int i =3D RCAR_CSI2_SOURCE_VC0; i < num_pads; i++) - *v4l2_subdev_state_get_format(state, i) =3D format->format; + *fmt =3D format->format; =20 return 0; } @@ -1683,8 +1691,15 @@ static const struct v4l2_subdev_ops rcar_csi2_subdev= _ops =3D { static int rcsi2_init_state(struct v4l2_subdev *sd, struct v4l2_subdev_state *state) { - struct rcar_csi2 *priv =3D sd_to_csi2(sd); - unsigned int num_pads =3D rcsi2_num_pads(priv); + static struct v4l2_subdev_route routes[] =3D { + { + .sink_pad =3D RCAR_CSI2_SINK, + .sink_stream =3D 0, + .source_pad =3D RCAR_CSI2_SOURCE_VC0, + .source_stream =3D 0, + .flags =3D V4L2_SUBDEV_ROUTE_FL_ACTIVE, + }, + }; =20 static const struct v4l2_mbus_framefmt rcar_csi2_default_fmt =3D { .width =3D 1920, @@ -1697,10 +1712,13 @@ static int rcsi2_init_state(struct v4l2_subdev *sd, .xfer_func =3D V4L2_XFER_FUNC_DEFAULT, }; =20 - for (unsigned int i =3D RCAR_CSI2_SINK; i < num_pads; i++) - *v4l2_subdev_state_get_format(state, i) =3D rcar_csi2_default_fmt; + static const struct v4l2_subdev_krouting routing =3D { + .num_routes =3D ARRAY_SIZE(routes), + .routes =3D routes, + }; =20 - return 0; + return v4l2_subdev_set_routing_with_fmt(sd, state, &routing, + &rcar_csi2_default_fmt); } =20 static const struct v4l2_subdev_internal_ops rcar_csi2_internal_ops =3D { @@ -2356,7 +2374,8 @@ static int rcsi2_probe(struct platform_device *pdev) v4l2_set_subdevdata(&priv->subdev, &pdev->dev); snprintf(priv->subdev.name, sizeof(priv->subdev.name), "%s %s", KBUILD_MODNAME, dev_name(&pdev->dev)); - priv->subdev.flags =3D V4L2_SUBDEV_FL_HAS_DEVNODE; + priv->subdev.flags =3D V4L2_SUBDEV_FL_HAS_DEVNODE | + V4L2_SUBDEV_FL_STREAMS; =20 priv->subdev.entity.function =3D MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER; priv->subdev.entity.ops =3D &rcar_csi2_entity_ops; --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 D793B230BE6; Fri, 30 May 2025 13:51:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613107; cv=none; b=qShz7ohhRIM7iaA1heZ5W9G4LWMe/NsVgGQX46Upk74lJdU+Gs0KrGI9Cxg2S62Zm2fiqgUKcsL82nYR3PGq0TyTHAQ7ikkIf8yTQdabmDdLp72FB8Lx7yT2TC6+kJbtrFlbCjN/anjc0z/NwdH11EN/TVZ/VyJVUzrxFkyF5Rw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613107; c=relaxed/simple; bh=GDkHInsCsrgA6dV3ADS50B1/4imFLWM9R7kKfBD6saQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kbfclQDFlO3QBad8xmwUi8Vd/Sf/Bqa8ejU8y+I2RIBKFe/pgnIGDEIvI2yXC6Q4Yy0wwLX4TyXO927bWzWco6jKmJr4EcWMFQ9PdBvwogdjcrzrhx7FdPt+P4HvzqwHSt4hprLh3WzWsTaMB/cFk73t+9fRjy3lbjNudFEx7A0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=nPK2bYbO; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="nPK2bYbO" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9725DA44; Fri, 30 May 2025 15:51:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613068; bh=GDkHInsCsrgA6dV3ADS50B1/4imFLWM9R7kKfBD6saQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nPK2bYbOFZjZTbWy2USbJN8NMdfAJTcsA5sIg09dUZAcXpcd+UBNt2cHaF0kMXIap zc4xWHQzisC/YQFbEHHlNnCehWI7+YmP6Tt9+GqE33hg85m5qA/JloSz/uxXsYFV1/ r8KcEjvSPqGOO0tAYVNhcbIrW1gSyfVZyqGjZKeg= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:38 +0300 Subject: [PATCH v3 09/15] media: rcar-isp: Switch to Streams API Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-9-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=4143; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=GDkHInsCsrgA6dV3ADS50B1/4imFLWM9R7kKfBD6saQ=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfdhx6N1ETTN9fWGek5cRSuEzkBsYcHqHG7p JeE1SKM1WuJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33QAKCRD6PaqMvJYe 9SoREACsx7kAjQmaEesZuwXr+wb4nvgDXlPk7m6P/5Ol1fYH1NxaoWpHmAcyTERXvswHSsI/T4X MClTMjQq5cEy6O3s5ULVLl+pxU7kNF/e6H2Nd7IEIi18gVaSQekU1H3jFEsWuhXBRV0r1CLs24J QDU2fShJWGXBhtt3lNCd36I5geeqqm1N2QSRd0sBeQ05J63yOl7l8JK4L+bkl7+RlFSX6ONkULu MAvvyV9HlFQd2S0QbQ/qtDPREF2W1kXCXQSmmzmuL3rNjj/roxUzdlaE0kbyttsy+R1Ue2PwwYm cvGRAuRcbu75prBRiN/7o6OM5bYESysdD5wFbg8uD2PxEbzqbAbjHCs2bIOt33h96BxxBTmgZ+X AcrZA3Dk900ryC136tFTEhpYjDhJ1E2e5SH1KPpbrjzLTN14SbrhNpsqqvBNJzahnzXwyOc+d2v BZHQuJcGkTEMrzuIAv6iVPlIwKSJX4ac7nVlA9V0f88FOt4bscqRS6YYbvL+ZA/RA6nFtuik9B4 rPan/2X5YXqV4BG1rUWAnigTDAfrelB6VpiP9EPj77QOAJkydt03U5b23Y7BsZCfjBSRGQwe5Fw a/RzV1onzW43xXQXdgk6dB56VwJNcqJ4B1cQL+XWGyoCW4+rTvFvXBFfRt0DY9YJGrgMxcylZcF VSo4hEbyGcfrqyA== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Switch to Streams API with a single hardcoded route. This breaks any existing userspace which depended on the custom rcar streams implementation, but a single camera use case should continue to work. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Reviewed-by: Niklas S=C3=B6derlund Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-isp/csisp.c | 62 +++++++++++++++++++++= +--- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp/csisp.c b/drivers/medi= a/platform/renesas/rcar-isp/csisp.c index 2337c5d44c40..a04cbf96b809 100644 --- a/drivers/media/platform/renesas/rcar-isp/csisp.c +++ b/drivers/media/platform/renesas/rcar-isp/csisp.c @@ -124,6 +124,17 @@ static const struct rcar_isp_format rcar_isp_formats[]= =3D { }, }; =20 +static const struct v4l2_mbus_framefmt risp_default_fmt =3D { + .width =3D 1920, + .height =3D 1080, + .code =3D MEDIA_BUS_FMT_RGB888_1X24, + .colorspace =3D V4L2_COLORSPACE_SRGB, + .field =3D V4L2_FIELD_NONE, + .ycbcr_enc =3D V4L2_YCBCR_ENC_DEFAULT, + .quantization =3D V4L2_QUANTIZATION_DEFAULT, + .xfer_func =3D V4L2_XFER_FUNC_DEFAULT, +}; + static const struct rcar_isp_format *risp_code_to_fmt(unsigned int code) { unsigned int i; @@ -222,7 +233,7 @@ static int risp_start(struct rcar_isp *isp, struct v4l2= _subdev_state *state) u32 sel_csi =3D 0; int ret; =20 - fmt =3D v4l2_subdev_state_get_format(state, RCAR_ISP_SINK); + fmt =3D v4l2_subdev_state_get_format(state, RCAR_ISP_SINK, 0); if (!fmt) return -EINVAL; =20 @@ -336,7 +347,7 @@ static int risp_set_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format) { - struct v4l2_mbus_framefmt *framefmt; + struct v4l2_mbus_framefmt *fmt; =20 if (format->pad > RCAR_ISP_SINK) return v4l2_subdev_get_fmt(sd, state, format); @@ -344,10 +355,20 @@ static int risp_set_pad_format(struct v4l2_subdev *sd, if (!risp_code_to_fmt(format->format.code)) format->format.code =3D rcar_isp_formats[0].code; =20 - for (unsigned int i =3D 0; i < RCAR_ISP_NUM_PADS; i++) { - framefmt =3D v4l2_subdev_state_get_format(state, i); - *framefmt =3D format->format; - } + /* Set sink format */ + fmt =3D v4l2_subdev_state_get_format(state, format->pad, format->stream); + if (!fmt) + return -EINVAL; + + *fmt =3D format->format; + + /* Propagate to source format */ + fmt =3D v4l2_subdev_state_get_opposite_stream_format(state, format->pad, + format->stream); + if (!fmt) + return -EINVAL; + + *fmt =3D format->format; =20 return 0; } @@ -364,6 +385,32 @@ static const struct v4l2_subdev_ops rcar_isp_subdev_op= s =3D { .pad =3D &risp_pad_ops, }; =20 +static int risp_init_state(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state) +{ + static struct v4l2_subdev_route routes[] =3D { + { + .sink_pad =3D RCAR_ISP_SINK, + .sink_stream =3D 0, + .source_pad =3D RCAR_ISP_PORT0, + .source_stream =3D 0, + .flags =3D V4L2_SUBDEV_ROUTE_FL_ACTIVE, + }, + }; + + static const struct v4l2_subdev_krouting routing =3D { + .num_routes =3D ARRAY_SIZE(routes), + .routes =3D routes, + }; + + return v4l2_subdev_set_routing_with_fmt(sd, state, &routing, + &risp_default_fmt); +} + +static const struct v4l2_subdev_internal_ops risp_internal_ops =3D { + .init_state =3D risp_init_state, +}; + /* -----------------------------------------------------------------------= ------ * Async handling and registration of subdevices and links */ @@ -521,11 +568,12 @@ static int risp_probe(struct platform_device *pdev) =20 isp->subdev.owner =3D THIS_MODULE; isp->subdev.dev =3D &pdev->dev; + isp->subdev.internal_ops =3D &risp_internal_ops; v4l2_subdev_init(&isp->subdev, &rcar_isp_subdev_ops); v4l2_set_subdevdata(&isp->subdev, &pdev->dev); snprintf(isp->subdev.name, sizeof(isp->subdev.name), "%s %s", KBUILD_MODNAME, dev_name(&pdev->dev)); - isp->subdev.flags =3D V4L2_SUBDEV_FL_HAS_DEVNODE; + isp->subdev.flags =3D V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_STREAMS; =20 isp->subdev.entity.function =3D MEDIA_ENT_F_VID_MUX; isp->subdev.entity.ops =3D &risp_entity_ops; --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 5E23423185E; Fri, 30 May 2025 13:51:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613109; cv=none; b=BmjOpJVOtFGKKwrbaa8CtvQDvTc5qqWYY/w+BDRozzIFAmL71H7jI+R3/gNDG7M3OpH5c/cIWAQwXneVcfYBJqsfRGLVHeMx632iwiWHtWA7Lx+XmjYNtRpJvhll3P4mwJhSkz3BSjFiWWe37I/giJRGp4nk5/HN+D5nLE+kASE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613109; c=relaxed/simple; bh=OMIeYdUtXu63h6bre0JQxBRXMomRsy32y7R+INsUhcY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=V0X/OgJfYFx4mE7z+v2I6ugnN7lGFxiezI0pQXT1e62obumMj5ohVQuLFxKMIEtdeiBoUgKwNR4FVUFma3XkWzOw/VTGEfRquO7nyOufob6sWu1+fDZfJyXPQw22dyVs6i6U7aSbtZd6XSYQaWBL0+cCX6os3f1RIbazx8Prxb4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=ECXFzOK/; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="ECXFzOK/" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 4BF628D4; Fri, 30 May 2025 15:51:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613068; bh=OMIeYdUtXu63h6bre0JQxBRXMomRsy32y7R+INsUhcY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ECXFzOK/E/vxzBzunOzMdEI6iQ5/XzSsSohwW+E12NbFNtx2tTyYKy38IFpRo3udm YObdlGp/bth3m8QOp0HNKxhGG9IWfd6tOd10k4pbKCyjn4F+bq5TWFeK300IHHmI5M 6PuPnxrGxZNVqlbCVwSZq1jafmvzmLTQFD1irRZ0= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:39 +0300 Subject: [PATCH v3 10/15] media: rcar-csi2: Add .get_frame_desc op Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-10-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2471; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=OMIeYdUtXu63h6bre0JQxBRXMomRsy32y7R+INsUhcY=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfeadzC5/4IupfxQN53rx28ztvd8xN0C4A3Q 44+5JJoR26JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33gAKCRD6PaqMvJYe 9TJdD/472GcPjV/Rj4xMlW+/l1FKOBp6oC9S3TBrChTGU1uUq2Sd6oLtAINgzmjpt1FwiYdfXPN auKfJpEE1d8VaHmBuUjGcVhYYWmDBzG+gwvCcqsL/a5U3rl8Ew7ZskQzt2STvutsyVvXRBUaGDo 02cmJGw1sZIfpRLWvy/gdssi/gHSIxI/VUC2rVv9c4raZHAD4G3VlC3+73G7Sv5GzQb6etNPJZO 21ZH6fSC8HDMZU2xL7vFhhw8io+E6Ogdv+elXOKT78jrRaZWb3DlZnhjZkMy6frY5fVsUtmPvzt IDoMWQhY15XGepVJ0lUPOyrjD5Se3elilKMNxxc3HFrRjf+QINL/B4bIfiFpbLOzpEzO5F1HP+f 31+09MZFN5L7+w54S7aw7tlqiW5Dohr37MouLTMJBdGyzahvUe4QIThWUmg01C8QaB4qq2Sngqq 6Cb6GTeuwG8G1c+Dr7fMya5u7P7z0LqMpGQ7JzcuNnoj5n1Rm5pVuyPHjYLZNfNc6hd3i1+zSEL e6JOKbJA3pt2SIBB0uSCyS1XvEauoe6ynWuPk+9xsSyj+n8WFWBp1Pu8tCzb8rhFp6LN1wJDs9f f3/M8mfKdCzQMAv/8uoPeJbVZkK0xfydX2bWExSsiIm8uKodxRLTL3ZSwGH8y4X8f1NoBaxGTFL E7cQ+RoQLeY4xvA== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Add v4l2_subdev_pad_ops.get_frame_desc() implementation. We also implement a fallback for the case where the upstream subdevice does not implement .get_frame_desc. It assumes a single stream with VC =3D 0 and DT based on the configured stream mbus format. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 56 ++++++++++++++++++++++++++= ++++ 1 file changed, 56 insertions(+) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 20bd44274bd2..65c7f3040696 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1676,12 +1676,68 @@ static int rcsi2_set_pad_format(struct v4l2_subdev = *sd, return 0; } =20 +static int rcsi2_get_frame_desc_fallback(struct v4l2_subdev *sd, + unsigned int pad, + struct v4l2_mbus_frame_desc *fd) +{ + const struct rcar_csi2_format *format; + struct v4l2_subdev_state *state; + struct v4l2_mbus_framefmt *fmt; + int ret =3D 0; + + state =3D v4l2_subdev_lock_and_get_active_state(sd); + + fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); + if (!fmt) { + ret =3D -EINVAL; + goto out; + } + + format =3D rcsi2_code_to_fmt(fmt->code); + if (!format) { + ret =3D -EINVAL; + goto out; + } + + fd->num_entries =3D 1; + fd->type =3D V4L2_MBUS_FRAME_DESC_TYPE_CSI2; + fd->entry[0].stream =3D 0; + fd->entry[0].pixelcode =3D fmt->code; + fd->entry[0].bus.csi2.vc =3D 0; + fd->entry[0].bus.csi2.dt =3D format->datatype; + +out: + v4l2_subdev_unlock_state(state); + + return ret; +} + +static int rcsi2_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_frame_desc *fd) +{ + struct rcar_csi2 *priv =3D sd_to_csi2(sd); + int ret; + + if (WARN_ON(!priv->info->use_isp)) + return -ENOTTY; + + if (WARN_ON(pad !=3D RCAR_CSI2_SOURCE_VC0)) + return -EINVAL; + + ret =3D v4l2_subdev_get_frame_desc_passthrough(sd, pad, fd); + if (ret =3D=3D -ENOIOCTLCMD) + ret =3D rcsi2_get_frame_desc_fallback(sd, pad, fd); + return ret; +} + static const struct v4l2_subdev_pad_ops rcar_csi2_pad_ops =3D { .enable_streams =3D rcsi2_enable_streams, .disable_streams =3D rcsi2_disable_streams, =20 .set_fmt =3D rcsi2_set_pad_format, .get_fmt =3D v4l2_subdev_get_fmt, + + .get_frame_desc =3D rcsi2_get_frame_desc, }; =20 static const struct v4l2_subdev_ops rcar_csi2_subdev_ops =3D { --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 25F0B231A37; Fri, 30 May 2025 13:51:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613110; cv=none; b=YDAql81RgXTgMTnuecJzLsh2JeJxW99PUQoiCqWOpaweA0ZnlFYGECcO7cjsmF3qJp5JFFlIVZr4e1Gvuy4N0FMwII2z2mTF+z5KO7sCXMTl11jwmEJ3dWR182mHhMWeBbQlD1AQSTngew/PUvaL9ALtOhB+Uxfc8NPaQW5ijKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613110; c=relaxed/simple; bh=2a1aTa89YfHbKhTvYuMlZwM95lDZAoaySTga60o3guY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KVbZLD/7v8wK/tJAXzahiHl5UyT7yZfUAvBJKzfDSxGt1ugoOCt8watsmYFZ4zY7BILyCnlX5aEs+X3TMIc+lAhTcLXtzz4xRehknvCGReqLw/7j0ify49+h8egCckOkxiPYbDmtlY181Me2Bfz4xhLX8seRDBfqGNdMStaY8vQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=URt4COJZ; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="URt4COJZ" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 041151A04; Fri, 30 May 2025 15:51:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613069; bh=2a1aTa89YfHbKhTvYuMlZwM95lDZAoaySTga60o3guY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=URt4COJZWBqaz55oZWoOIKd8WW7i+jA+Pb4lCLf0m4BmS/LstOvKAN3P4t+M3T8RC gHvGAmcarkl5OQYaEPK8xs4Q339qeZzaTCg2Xv9r/qg/6ikVjynyMTsXSbJEGLHdli sXgniRbto/QcABKgYfj6VjqY9P/oRYqrY61826AU= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:40 +0300 Subject: [PATCH v3 11/15] media: rcar-isp: Call get_frame_desc to find out VC & DT Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-11-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=4623; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=2a1aTa89YfHbKhTvYuMlZwM95lDZAoaySTga60o3guY=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfeKf63AoRQAmM2o9cxaZK7j3FWyNfvvyVGx RWXOQyz5jeJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33gAKCRD6PaqMvJYe 9cuRD/4k2CxFhBqQ1fDbX1zUpAFT+clzEqmemxiuVNJutu2S9vmyf1NMc0KmyTEoaShOYUUGZXN 9Kf/vsy+B/I6noPubctc9SFkReQqLyFLPKxGbkArSeYyMLN3GE+HOOFXGS12vZSz3EWKUZFCH+l PN7jnHRSJhhk40aOv1SftZ/zd4Ps6lyqPIIAHi6r/hOHOMN39eBldvCOF/2v/CaA0bPSgC6m+iA HWOfDoQZhX0YGSoWsftCItICs6BQwUIN8Y+S1Hkch1ZxkumFFO/PpT5wdpCa4NsU7xCeRXTh8RH JxYngYwYRCOJ2F3zmcP4P72KB6F66+uESI6J3eJnuO1J1IeacIiNr9uSsZWPhD0XZF/hqjIeFj3 dbZhJAg4DE1aRPHrPXjNRClYWEZ8Y5rbC4eiH9mzF0wyB9sZOR9S9zuq890bQyRHtDl3dSdKOrC PPWsgCm5EuW3d0T/uxRfvqiuIMctKElm1AFecizjT8poJOgyMsi5IS5EQ9Tyev7ImgIjrEBzfhO 8D3F4vhHupQy2JR7QC5elyeOYn9So++P1ayZ6Th97Hz8y3QFW0QaeJAuOeatedR/IlsJOs7524+ V/92TmxGMwMBY2zoD/9i6klnROWYglmUZSe8TonhRV/cjWYpHVDdl6lTZq3OYLeQEov1+ek20Gr mOm1ScUknp4jzXQ== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Call get_frame_desc to find out VC & DT, instead of hardcoding the VC routing and deducing the DT based on the mbus format. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-isp/csisp.c | 108 +++++++++++++++++---= ---- 1 file changed, 77 insertions(+), 31 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp/csisp.c b/drivers/medi= a/platform/renesas/rcar-isp/csisp.c index a04cbf96b809..887d8eb21a3a 100644 --- a/drivers/media/platform/renesas/rcar-isp/csisp.c +++ b/drivers/media/platform/renesas/rcar-isp/csisp.c @@ -225,24 +225,86 @@ static void risp_power_off(struct rcar_isp *isp) pm_runtime_put(isp->dev); } =20 -static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *stat= e) +static int risp_configure_routing(struct rcar_isp *isp, + struct v4l2_subdev_state *state) { - const struct v4l2_mbus_framefmt *fmt; - const struct rcar_isp_format *format; - unsigned int vc; - u32 sel_csi =3D 0; + struct v4l2_mbus_frame_desc source_fd; + struct v4l2_subdev_route *route; int ret; =20 - fmt =3D v4l2_subdev_state_get_format(state, RCAR_ISP_SINK, 0); - if (!fmt) - return -EINVAL; + ret =3D v4l2_subdev_call(isp->remote, pad, get_frame_desc, + isp->remote_pad, &source_fd); + if (ret) + return ret; =20 - format =3D risp_code_to_fmt(fmt->code); - if (!format) { - dev_err(isp->dev, "Unsupported bus format\n"); - return -EINVAL; + /* Clear the channel registers */ + for (unsigned int ch =3D 0; ch < 12; ++ch) { + risp_write_cs(isp, ISPCS_FILTER_ID_CH_REG(ch), 0); + risp_write_cs(isp, ISPCS_DT_CODE03_CH_REG(ch), 0); } =20 + /* Clear the proc mode registers */ + for (unsigned int dt =3D 0; dt < 64; ++dt) + risp_write_cs(isp, ISPPROCMODE_DT_REG(dt), 0); + + for_each_active_route(&state->routing, route) { + struct v4l2_mbus_frame_desc_entry *source_entry =3D NULL; + const struct rcar_isp_format *format; + const struct v4l2_mbus_framefmt *fmt; + unsigned int i; + u8 vc, dt, ch; + u32 v; + + for (i =3D 0; i < source_fd.num_entries; i++) { + if (source_fd.entry[i].stream =3D=3D route->sink_stream) { + source_entry =3D &source_fd.entry[i]; + break; + } + } + + if (!source_entry) { + dev_err(isp->dev, + "Failed to find stream from source frame desc\n"); + return -EPIPE; + } + + vc =3D source_entry->bus.csi2.vc; + dt =3D source_entry->bus.csi2.dt; + /* Channels 4 - 11 go to VIN */ + ch =3D route->source_pad - 1 + 4; + + fmt =3D v4l2_subdev_state_get_format(state, route->sink_pad, + route->sink_stream); + if (!fmt) + return -EINVAL; + + format =3D risp_code_to_fmt(fmt->code); + if (!format) { + dev_err(isp->dev, "Unsupported bus format\n"); + return -EINVAL; + } + + /* VC Filtering */ + risp_write_cs(isp, ISPCS_FILTER_ID_CH_REG(ch), BIT(vc)); + + /* DT Filtering */ + risp_write_cs(isp, ISPCS_DT_CODE03_CH_REG(ch), + ISPCS_DT_CODE03_EN0 | ISPCS_DT_CODE03_DT0(dt)); + + /* Proc mode */ + v =3D risp_read_cs(isp, ISPPROCMODE_DT_REG(dt)); + v |=3D ISPPROCMODE_DT_PROC_MODE_VCn(vc, format->procmode); + risp_write_cs(isp, ISPPROCMODE_DT_REG(dt), v); + } + + return 0; +} + +static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *stat= e) +{ + u32 sel_csi =3D 0; + int ret; + ret =3D risp_power_on(isp); if (ret) { dev_err(isp->dev, "Failed to power on ISP\n"); @@ -256,25 +318,9 @@ static int risp_start(struct rcar_isp *isp, struct v4l= 2_subdev_state *state) risp_write_cs(isp, ISPINPUTSEL0_REG, risp_read_cs(isp, ISPINPUTSEL0_REG) | sel_csi); =20 - /* Configure Channel Selector. */ - for (vc =3D 0; vc < 4; vc++) { - u8 ch =3D vc + 4; - u8 dt =3D format->datatype; - - risp_write_cs(isp, ISPCS_FILTER_ID_CH_REG(ch), BIT(vc)); - risp_write_cs(isp, ISPCS_DT_CODE03_CH_REG(ch), - ISPCS_DT_CODE03_EN3 | ISPCS_DT_CODE03_DT3(dt) | - ISPCS_DT_CODE03_EN2 | ISPCS_DT_CODE03_DT2(dt) | - ISPCS_DT_CODE03_EN1 | ISPCS_DT_CODE03_DT1(dt) | - ISPCS_DT_CODE03_EN0 | ISPCS_DT_CODE03_DT0(dt)); - } - - /* Setup processing method. */ - risp_write_cs(isp, ISPPROCMODE_DT_REG(format->datatype), - ISPPROCMODE_DT_PROC_MODE_VCn(3, format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VCn(2, format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VCn(1, format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VCn(0, format->procmode)); + ret =3D risp_configure_routing(isp, state); + if (ret) + return ret; =20 /* Start ISP. */ risp_write_cs(isp, ISPSTART_REG, ISPSTART_START); --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 933B023370F; Fri, 30 May 2025 13:51:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613113; cv=none; b=URZVN7o/+wLp4E0yrPhNyHwC3cHB3lb/pHVjUbD0Tq4JzN7QdmwLkEI/towNhqafDHW+dC4sjAhBM7UhUIyPQe4eCPzKZSkj4HRmfpZYSE5AQtmi8OqW6k8H/zcm9eKgqcs5dtrLuEJFFpzflde5EqOcbgYZUUMPCa0klZkvFvY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613113; c=relaxed/simple; bh=1yNv+grbVzrmbxkX3x9jX6k84if16DwukMHTWu1HlLs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MQh3S7pS/2AjKbYiMBt4gSRozY1PP3yaQpL58vcVCwxGg/9P9BvVVY4htFKmJl5jxdX4V379c6RT+e9mLnTAKww8lSnGJ0h8DeAydN7Z4tZ+UfOBA2GPrQLDFLs/YBqs16ujNspZ2qWfChAzip0AP/sRXrcUkTn90JPuL6ML+MU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=CdcjJftx; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="CdcjJftx" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DF79BAD0; Fri, 30 May 2025 15:51:09 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613070; bh=1yNv+grbVzrmbxkX3x9jX6k84if16DwukMHTWu1HlLs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CdcjJftxHEO8sdiD1imO7rYSaheRqKz8UJHaA+jn/U87z4Y/vzz67fNkq1NEPUlx1 zuz3n8pFv1roADFFGdZfncuRz+dziaSkXWIEVHAJh/GOR8U+A2wHNOm4gpeBvmIXxk cMFb/TrlQ9SfWmeqt7CQ3D3XujWhzPvfof2O198g= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:41 +0300 Subject: [PATCH v3 12/15] media: rcar-csi2: Add more stream support to rcsi2_calc_mbps() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-12-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1321; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=1yNv+grbVzrmbxkX3x9jX6k84if16DwukMHTWu1HlLs=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfeuXHccfbsjuIWRROfcMiehFMC2cM/AVvzn MlFLThscYaJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33gAKCRD6PaqMvJYe 9dJwD/4+hOsFBCA5PaxKiO2K/4GhS94QHGihlmEzGtdVy7AqtByXd4jMEcgBAZKGJFrwD0cKWXG Dw4aRNcX6zgLUyJa23zsMTN2qhzYTwM+fH7THanCvuq0uo2HbMX2lvT9fO6jJtQuaEuOBEZ8Kic 3UtxgPHu+mtAfKI4aSZBxN1hDKIAQ3WDDzdmVkLIpyAtync5jmfM7NqHMXYGlHn8zvrfDlQvHqk jKMIg8Ox6HDWpKaEQhmqoWozGSir0Z1JG4Kwhcmg/yR9+G0JizYmUmLPUGzNpNHE9+VWwSNtZn4 UZFDX4MAwgI/HrNnm10hTKhfIKl9Iuyw9IFUHH9bP90JebJNJoC2+16YCfMHF0Bn4vBcpQ7IJO2 iMf+dcJw7Qi1S1XAYBQcVkfxeFI4Ka1nSe7mhiaQ8rIeIjzkpvYhHYvrnU0Xfz75PNwZQz7jRX/ dIxr6cC+U8+OqV3QEUDObz3zHjRByGkYUss2Y1iLpO4JJO4SYVFYN8boVP91/WHrK2VOzpiWO9R rxTCQJtyLGDbCVVyODezaGLquzqJEEPV1YSzunLR6ym1nlIiEMtQ4YnZlguHQ/+d8eIaGaUe0LO i0utipfSf++Fzj8bxLOU05A+UI2zwYi1yILSWU77qYS96aRYSZtJKuvgXUx4L3xETn/FTUmtfOy /0c/6B0pOUzWeAw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 In the case where link-freq is not available, make sure we fail if there are more than one stream configured, and also use the correct stream number for that single stream. Signed-off-by: Tomi Valkeinen Reviewed-by: Niklas S=C3=B6derlund Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 65c7f3040696..b9f83aae725a 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1018,17 +1018,22 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, */ freq =3D v4l2_get_link_freq(remote_pad, 0, 0); if (freq < 0) { + struct v4l2_subdev_route *route =3D &state->routing.routes[0]; const struct rcar_csi2_format *format; struct v4l2_mbus_framefmt *fmt; unsigned int lanes; unsigned int bpp; int ret; =20 + if (state->routing.num_routes > 1) + return -EINVAL; + ret =3D rcsi2_get_active_lanes(priv, &lanes); if (ret) return ret; =20 - fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); + fmt =3D v4l2_subdev_state_get_format(state, route->sink_pad, + route->sink_stream); if (!fmt) return -EINVAL; =20 --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 6C0D3233733; Fri, 30 May 2025 13:51:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613114; cv=none; b=NHEdhif1hsljRlRvi8WgKoILAUzCv5rzWpQzQ2gV2zQ0T+Z6I52bmBro8qK2S3MXn4+sfxHaij7CZ35fngcxCDkkU8oCf1k88/DB/U/f12+4ehJzsD2WlpJ4bIxystcvScjPj8K28K9zRAZcZNKnUxufsjuQ2/oi9pBAtDzhxEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613114; c=relaxed/simple; bh=aqbmhsHX5IxfR08kY9FbOyMcyYBn9kBKkZQk0J+/pcA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=h4YTeVR2fYwDQT8Yr8EHq8M8kI+1gpIYDP0BxooET17EceAz3MgmAKYdHTrAzjsNKD5UQJP+LGdaMDlpv96PFvEIWf12v5mGNiqkoyFVEbe+ZBfz2Q/s5qGxdOYzhNXVxizKPd9UtiBmlLoZAyxKj6Xie9hdX0A7Od2a/fNWxzI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=k0tXJZ0d; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="k0tXJZ0d" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 934881A44; Fri, 30 May 2025 15:51:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613071; bh=aqbmhsHX5IxfR08kY9FbOyMcyYBn9kBKkZQk0J+/pcA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=k0tXJZ0dD+sBvbO6CpVA5RZj8ttI9TsGju4Z4M1sgCTWNcIhoE0N5D66yMf4SDkfT EhxZ7piEfKRlCdMEkRTmcWYi/LYheHbT/0/KHmBQZC4exSbX8+S9ZkzdsIKoKkL5GT E6+7ah0VmJP+G+lI0CccCqK6ySBbD8KXwIiZ3z9M= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:42 +0300 Subject: [PATCH v3 13/15] media: rcar-csi2: Call get_frame_desc to find out VC & DT (Gen3) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-13-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=5089; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=aqbmhsHX5IxfR08kY9FbOyMcyYBn9kBKkZQk0J+/pcA=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObffxSvRzTfUkBMUYZQ8MaKDQJpjwoAY9Iopj a+q1TFvpiGJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33wAKCRD6PaqMvJYe 9fOPEACY2UthGrvNKuGj2uTtLMQao35gejtwJv+Vn6NYZCnoI8gy0zrCblBdppHu/Jqx8/uVG2f /KeDotlWaghhsgy78oHIDBOTnjH0ZvlBX9eup9W9TBQGxpN/XCUGWJQsurqQxSX52TEGMZG8v3O CnU0p3qgQncWLYfCv1RdvoYIHNcSZlUBI1n36yRK5NefoL4r1/SwTvCISbiQdaOT7sDiLuoYrYk Konfbwt4FsEjd0S+4BJnF2T7DtVb4TOR7yhoJcXujl32M8ZMMZ472jW7YxJm/6WLIB2qiO90pzB 9ZELITYamuCahLfsVqFl6iV15Th+KajsWJLabMLCqxdU0oJyHSmrectpF46nNjZQWQ9KzQR96hb RInUFeEvrXUa+GxwxYRvVsSSVXFrgS76hAVsWAwIfqFKL9KdkTsdC0uoVvGuAv92fixRktW0ZvQ BcmukUm+SGenqwfwXnaGq410Ipk/MJuk2lZm7D9o5znw/0zXh90soyeF/aXTAtqwFRchvTiywhZ 1MENuOAw/A8fSWUtS4Ae0iUQV56fsNu52M7bmviWHX8A+LR3vB2JtyEz2+5039moPBV7zkrq5s+ umNXc+aA31h95jBFPK7Lxfrxx4x03tGIUD25UdSWa6AwOKKG1jv+oqYGF+HwpH/uPepOfVwCkg7 +Dz4rIxAOw8B7Rg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Call get_frame_desc to find out VC & DT, for Gen3 platforms, instead of hardcoding the VC routing and deducing the DT based on the mbus format. If the source subdevice doesn't implement .get_frame_desc, we use a fallback case where we assume there's a single stream with VC =3D 0 and DT based on the mbus format. Signed-off-by: Tomi Valkeinen Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 113 +++++++++++++++++++------= ---- 1 file changed, 76 insertions(+), 37 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index b9f83aae725a..8f708196ef49 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -71,10 +71,7 @@ struct rcar_csi2; #define FLD_REG 0x1c #define FLD_FLD_NUM(n) (((n) & 0xff) << 16) #define FLD_DET_SEL(n) (((n) & 0x3) << 4) -#define FLD_FLD_EN4 BIT(3) -#define FLD_FLD_EN3 BIT(2) -#define FLD_FLD_EN2 BIT(1) -#define FLD_FLD_EN BIT(0) +#define FLD_FLD_EN(ch) BIT(ch) =20 /* Automatic Standby Control */ #define ASTBY_REG 0x20 @@ -1066,52 +1063,94 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { - const struct rcar_csi2_format *format; - u32 phycnt, vcdt =3D 0, vcdt2 =3D 0, fld =3D 0; - const struct v4l2_mbus_framefmt *fmt; + u32 phycnt, vcdt =3D 0, vcdt2 =3D 0; + u32 fld =3D FLD_DET_SEL(1); + struct v4l2_mbus_frame_desc source_fd; + struct v4l2_subdev_route *route; unsigned int lanes; - unsigned int i; int mbps, ret; + u8 ch =3D 0; =20 - /* Use the format on the sink pad to compute the receiver config. */ - fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); + ret =3D v4l2_subdev_call(priv->remote, pad, get_frame_desc, + priv->remote_pad, &source_fd); + if (ret && ret !=3D -ENOIOCTLCMD) { + return ret; + } else if (ret =3D=3D -ENOIOCTLCMD) { + /* Create a fallback source_fd */ + struct v4l2_mbus_frame_desc *fd =3D &source_fd; + const struct rcar_csi2_format *format; + struct v4l2_mbus_framefmt *fmt; =20 - dev_dbg(priv->dev, "Input size (%ux%u%c)\n", - fmt->width, fmt->height, - fmt->field =3D=3D V4L2_FIELD_NONE ? 'p' : 'i'); + fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); + if (!fmt) + return -EINVAL; =20 - /* Code is validated in set_fmt. */ - format =3D rcsi2_code_to_fmt(fmt->code); - if (!format) - return -EINVAL; + format =3D rcsi2_code_to_fmt(fmt->code); + if (!format) + return -EINVAL; =20 - /* - * Enable all supported CSI-2 channels with virtual channel and - * data type matching. - * - * NOTE: It's not possible to get individual datatype for each - * source virtual channel. Once this is possible in V4L2 - * it should be used here. - */ - for (i =3D 0; i < priv->info->num_channels; i++) { + memset(fd, 0, sizeof(*fd)); + + fd->num_entries =3D 1; + fd->type =3D V4L2_MBUS_FRAME_DESC_TYPE_CSI2; + fd->entry[0].stream =3D 0; + fd->entry[0].pixelcode =3D fmt->code; + fd->entry[0].bus.csi2.vc =3D 0; + fd->entry[0].bus.csi2.dt =3D format->datatype; + } + + for_each_active_route(&state->routing, route) { + struct v4l2_mbus_frame_desc_entry *source_entry =3D NULL; + const struct v4l2_mbus_framefmt *fmt; + const struct rcar_csi2_format *format; + unsigned int i; + u8 vc, dt; u32 vcdt_part; =20 - if (priv->channel_vc[i] < 0) - continue; + for (i =3D 0; i < source_fd.num_entries; i++) { + if (source_fd.entry[i].stream =3D=3D route->sink_stream) { + source_entry =3D &source_fd.entry[i]; + break; + } + } + + if (!source_entry) { + dev_err(priv->dev, + "Failed to find stream from source frame desc\n"); + return -EPIPE; + } =20 - vcdt_part =3D VCDT_SEL_VC(priv->channel_vc[i]) | VCDT_VCDTN_EN | - VCDT_SEL_DTN_ON | VCDT_SEL_DT(format->datatype); + vc =3D source_entry->bus.csi2.vc; + dt =3D source_entry->bus.csi2.dt; + + vcdt_part =3D VCDT_SEL_VC(vc) | VCDT_VCDTN_EN | + VCDT_SEL_DTN_ON | VCDT_SEL_DT(dt); =20 /* Store in correct reg and offset. */ - if (i < 2) - vcdt |=3D vcdt_part << ((i % 2) * 16); + if (ch < 2) + vcdt |=3D vcdt_part << ((ch % 2) * 16); else - vcdt2 |=3D vcdt_part << ((i % 2) * 16); - } + vcdt2 |=3D vcdt_part << ((ch % 2) * 16); + + fmt =3D v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, + route->sink_stream); + if (!fmt) + return -EINVAL; + + dev_dbg(priv->dev, "Input size (%ux%u%c)\n", + fmt->width, fmt->height, + fmt->field =3D=3D V4L2_FIELD_NONE ? 'p' : 'i'); =20 - if (fmt->field =3D=3D V4L2_FIELD_ALTERNATE) - fld =3D FLD_DET_SEL(1) | FLD_FLD_EN4 | FLD_FLD_EN3 | FLD_FLD_EN2 - | FLD_FLD_EN; + /* Code is validated in set_fmt. */ + format =3D rcsi2_code_to_fmt(fmt->code); + if (!format) + return -EINVAL; + + if (fmt->field =3D=3D V4L2_FIELD_ALTERNATE) + fld |=3D FLD_FLD_EN(ch); + + ch++; + } =20 /* * Get the number of active data lanes inspecting the remote mbus --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 A88A4235051; Fri, 30 May 2025 13:51:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613116; cv=none; b=IMTw7467ygC2DVwzHvwCFa134Ggbwe+FFhrNJNvW/y+24G8jF/40m/wFhUis5smKbZO3K3r/jOaytn0oAOfD6EWe+aq3uoNfy1h643DxNejkworQmIFVuz+uyXAmTJpjhNam0+OViKTRy2eUraRL+TfsiFmydB8dfIjMcYXngZ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613116; c=relaxed/simple; bh=AouKTtyjiq8170T9Uqjk+tvVIEns+KuUJ+h/sOoyHuA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=smlp+opEi3k98fFTPKWUXXrbvIuQ6NCfaagzKPFCwzRrwOIHCX4PYdmvRiLj9UNikM+6Bh/VPxzdqCS42PSX+nbYk7TsnNK4HSHh1gTvU2UzS3Ge/oGcarqY14R6IZvcw4M2mMns+cgCIPtX3MUrt94j4To4RsECPGYZFMLzAd4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=mOpFgMw6; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="mOpFgMw6" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 4940D10C4; Fri, 30 May 2025 15:51:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613071; bh=AouKTtyjiq8170T9Uqjk+tvVIEns+KuUJ+h/sOoyHuA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mOpFgMw6zyTFbffi1/zNt0eQDi8KeesZywEhUMkYrrFSRT0G1LWA7JOJHGfad5d4/ YLcko8/P2RArDAaNRumMsrHVXNMIOhgvfamuPuRuAWT9JbpIF+v31JyWwfkaU4Gd4l QjsNv23YUgUqvhg+g+uhWMYQYLPzPz6EvtWQYBRU= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:43 +0300 Subject: [PATCH v3 14/15] media: rcar-csi2: Add full streams support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-14-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=4751; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=AouKTtyjiq8170T9Uqjk+tvVIEns+KuUJ+h/sOoyHuA=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObffkGGh49nv+2Ez1anfl08hAfLaOuq7abXTo OkjTZokI5OJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm33wAKCRD6PaqMvJYe 9ZLyEACq/j86koNFkrPzR9TJfbgSuT0b2E+nOvwldERnbnTTuwzwUE/xcpSEIl0EUDrehnHIHsd 6/AgjvNx5JzxeOxrGskJ+GsEnVQARpfTZ1/yfe2mBhVOqIHXYFQsgIP4Buy/0P66EkzRK2HAsYe 6TDG0N6FJ2DczOx8+WmMjp4nDtKiD7pYs8P6YXiZVzbFSVTtZ8D+ylZvsh4xCgMu3A4Ixk6jWDG D3RtVYgHZBMJVSllk+V7xOY0Zwc+sQgt8F7yKWKM1Vux06raPO5JU6rpul9UwViULBv2dCkxz7y 1WdgP2BAyJWysrm0m5l8WPQIY/KiwEPUOkUFnzHOlWiVlku+Lb3KdJBk5Qz+TD6aSJn834Z7oSu zUkC/QJjV+dTsQTSY10pgM+bXESsvwgmKZnCIlyj18pLzB/kDaQna3siYEKNIvS+GTU8l6IsqUV xH2D4yiOn4cWz8YF7HE9mvJkztJ/UEu9adHqCcjuqZHpHi9ctM3udhl4zYWORQGunK5k/wmevhJ IU2vx/KgCEIZHWeuaX/RixsvODPVQ2Cxy28ZbGBg6R3iVUgSrm9Eg5lBGJLHEQFlPGP7q6QKIyl afwa/V+WZxsXDAqWY1ZqddcprSVn7+u5yevEWMyul3/snOccu9cW4+u3rDL1KogSWar3VbSF6Z0 WIkjWI7nlZw5i+Q== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Add the missing pieces to enable full streams support: - Add set_routing - Drop the explicit uses of a single stream, and instead use the streams mask. Signed-off-by: Tomi Valkeinen Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 85 ++++++++++++++++++++++----= ---- 1 file changed, 63 insertions(+), 22 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 8f708196ef49..4a73d223229c 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -694,6 +694,17 @@ static const struct rcar_csi2_format rcar_csi2_formats= [] =3D { }, }; =20 +static const struct v4l2_mbus_framefmt rcar_csi2_default_fmt =3D { + .width =3D 1920, + .height =3D 1080, + .code =3D MEDIA_BUS_FMT_RGB888_1X24, + .colorspace =3D V4L2_COLORSPACE_SRGB, + .field =3D V4L2_FIELD_NONE, + .ycbcr_enc =3D V4L2_YCBCR_ENC_DEFAULT, + .quantization =3D V4L2_QUANTIZATION_DEFAULT, + .xfer_func =3D V4L2_XFER_FUNC_DEFAULT, +}; + static const struct rcar_csi2_format *rcsi2_code_to_fmt(unsigned int code) { unsigned int i; @@ -1641,10 +1652,8 @@ static int rcsi2_enable_streams(struct v4l2_subdev *= sd, u64 source_streams_mask) { struct rcar_csi2 *priv =3D sd_to_csi2(sd); - int ret =3D 0; - - if (source_streams_mask !=3D 1) - return -EINVAL; + u64 sink_streams; + int ret; =20 if (!priv->remote) return -ENODEV; @@ -1655,8 +1664,13 @@ static int rcsi2_enable_streams(struct v4l2_subdev *= sd, return ret; } =20 + sink_streams =3D v4l2_subdev_state_xlate_streams(state, + RCAR_CSI2_SOURCE_VC0, + RCAR_CSI2_SINK, + &source_streams_mask); + ret =3D v4l2_subdev_enable_streams(priv->remote, priv->remote_pad, - BIT_ULL(0)); + sink_streams); if (ret) { rcsi2_stop(priv); return ret; @@ -1672,10 +1686,7 @@ static int rcsi2_disable_streams(struct v4l2_subdev = *sd, u32 source_pad, u64 source_streams_mask) { struct rcar_csi2 *priv =3D sd_to_csi2(sd); - int ret =3D 0; - - if (source_streams_mask !=3D 1) - return -EINVAL; + u64 sink_streams; =20 if (!priv->remote) return -ENODEV; @@ -1683,11 +1694,17 @@ static int rcsi2_disable_streams(struct v4l2_subdev= *sd, if (priv->stream_count =3D=3D 1) rcsi2_stop(priv); =20 - v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, BIT_ULL(0)); + sink_streams =3D v4l2_subdev_state_xlate_streams(state, + RCAR_CSI2_SOURCE_VC0, + RCAR_CSI2_SINK, + &source_streams_mask); + + v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, + sink_streams); =20 priv->stream_count -=3D 1; =20 - return ret; + return 0; } =20 static int rcsi2_set_pad_format(struct v4l2_subdev *sd, @@ -1720,6 +1737,40 @@ static int rcsi2_set_pad_format(struct v4l2_subdev *= sd, return 0; } =20 +static int rcsi2_set_routing(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + enum v4l2_subdev_format_whence which, + struct v4l2_subdev_krouting *routing) +{ + struct rcar_csi2 *priv =3D sd_to_csi2(sd); + int ret; + + if (!priv->info->use_isp) + return -ENOTTY; + + if (routing->num_routes > V4L2_FRAME_DESC_ENTRY_MAX) + return -EINVAL; + + if (priv->info->use_isp) { + ret =3D v4l2_subdev_routing_validate(sd, routing, + V4L2_SUBDEV_ROUTING_ONLY_1_TO_1); + } else { + ret =3D v4l2_subdev_routing_validate(sd, routing, + V4L2_SUBDEV_ROUTING_ONLY_1_TO_1 | + V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING); + } + + if (ret) + return ret; + + ret =3D v4l2_subdev_set_routing_with_fmt(sd, state, routing, + &rcar_csi2_default_fmt); + if (ret) + return ret; + + return 0; +} + static int rcsi2_get_frame_desc_fallback(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd) @@ -1781,6 +1832,7 @@ static const struct v4l2_subdev_pad_ops rcar_csi2_pad= _ops =3D { .set_fmt =3D rcsi2_set_pad_format, .get_fmt =3D v4l2_subdev_get_fmt, =20 + .set_routing =3D rcsi2_set_routing, .get_frame_desc =3D rcsi2_get_frame_desc, }; =20 @@ -1801,17 +1853,6 @@ static int rcsi2_init_state(struct v4l2_subdev *sd, }, }; =20 - static const struct v4l2_mbus_framefmt rcar_csi2_default_fmt =3D { - .width =3D 1920, - .height =3D 1080, - .code =3D MEDIA_BUS_FMT_RGB888_1X24, - .colorspace =3D V4L2_COLORSPACE_SRGB, - .field =3D V4L2_FIELD_NONE, - .ycbcr_enc =3D V4L2_YCBCR_ENC_DEFAULT, - .quantization =3D V4L2_QUANTIZATION_DEFAULT, - .xfer_func =3D V4L2_XFER_FUNC_DEFAULT, - }; - static const struct v4l2_subdev_krouting routing =3D { .num_routes =3D ARRAY_SIZE(routes), .routes =3D routes, --=20 2.43.0 From nobody Tue Dec 16 22:17:06 2025 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 B570D235065; Fri, 30 May 2025 13:51:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613117; cv=none; b=ZHYzIPvakn67Hq2wjMXGrpnTfHy1Dn0yjmJI1ZM0CCnuxVI7P4rJjpIoFuzCOU1YZOtVbasm0S+yolrPOqgy91+mHFf1ffy+QImW7V3nGDQHqFndZByvzb0x3wKFvmABBBOzTTqyTL1i/6UUXGc/V65/nxNkqV13/h5v7zC8u3s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748613117; c=relaxed/simple; bh=89CbSrBJkWcuOU906rNizxWcRDno1foXQRch/TOtTL4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qz2VLXrvC7bmsvQr3e7A9k2l5DluBkYAjNlBknJKi4xyyOR8LEf5kXkjn7drU+Rk0w5rxfPSdFizOBVMAc39m02rtdLj17+cn+BIwE9anU/nL0fEAac7HbOVesjroxRPxgwcqITspgjYV8moRDCshpSMASGSH75a+oOtbsFBZ/g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=IYRF1N2S; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="IYRF1N2S" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 016EF1AC5; Fri, 30 May 2025 15:51:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1748613072; bh=89CbSrBJkWcuOU906rNizxWcRDno1foXQRch/TOtTL4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=IYRF1N2SuLYO6k0F01Bcp0fm+sgyk0CRUeECEBqR/uQ7NItDJD2A3+Axg2wxVwRrB 8gBtbCHoCBkwwtCCXxc2YeCk7f06Wsx+BAbgtHd96wfR9hGiFupARw4FEQ9Sns852z EWu2RXINsJMFgQmb/Avsr5qrk9hLSzSjJfKmZg1A= From: Tomi Valkeinen Date: Fri, 30 May 2025 16:50:44 +0300 Subject: [PATCH v3 15/15] media: rcar-isp: Add full streams support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250530-rcar-streams-v3-15-026655df7138@ideasonboard.com> References: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> In-Reply-To: <20250530-rcar-streams-v3-0-026655df7138@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=3084; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=89CbSrBJkWcuOU906rNizxWcRDno1foXQRch/TOtTL4=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBoObfgHUbawz0aW0hTJhZs6yMIY6sIJd2+aI03f i1YEfrtuiSJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaDm34AAKCRD6PaqMvJYe 9bRYEACvjIzmj8rx3lxrXsE3XqIPjaXAe+CRiexW6+YxMFWsTgI40RjNK9m5KkcsPoddBmojJkw Jq9xy68N81yezJGwrJk1pt9BCyI57GiUKITFB/ZeiU+j+XmodLMuUPbzSiOii/iXCY0SWiXDVTA ROixDUamy1rR8VuQzU8HVhulO/J1vrnpUPkIwTxmmbSS6viKv1KVPdYMhnJXre6naD7Ev0jvXdp 1zIjYcwpNMNa9WT+SzhnnOFAuHgod3xn1X1kIeJe7knJNcymMlnFTd86zJoLDRCelzeC4KiTD40 f54D4hLpgUxIDL0XJrv1lqUWp6Z0BMfAmw/pO+Z7hBWQHx6hA/QyqtSm2KrCq73zjmOGOOgZ2Ya q5iMCkkJIKl1JRgiQkoA5Bg7MRJqiymEfxZ0ulZPMnUT0zKfVFc6TObILpKwA9uR/GtVzWnJVEe Bpl4bmtUAKTp7QFmjVJmt4Dq2U+fcSbyUbHiy1ZQyUXNCvePnDjf+oOSyFCKyO5fkc2uRvZrQDp c0itZHzrS5cvzCEBG+DgrKpeneTgXkQc7xsTFuA76ZmT8354MoPGlQAgaLLlhyx5AqiAph4bBEF qiKXrXOlHmgzov/cSoo/wEigT8XdAJhVpyhrHIrdkzPUatoslSMxYa0KSlf86RYv8HneOY63QL6 pKUByQChLNkCYeA== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Add the missing pieces to enable full streams support: - Add set_routing - Drop the explicit uses of a single stream, and instead use the streams mask. Signed-off-by: Tomi Valkeinen Tested-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-isp/csisp.c | 41 +++++++++++++++++++++= ++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp/csisp.c b/drivers/medi= a/platform/renesas/rcar-isp/csisp.c index 887d8eb21a3a..101d69a2eba4 100644 --- a/drivers/media/platform/renesas/rcar-isp/csisp.c +++ b/drivers/media/platform/renesas/rcar-isp/csisp.c @@ -342,6 +342,7 @@ static int risp_enable_streams(struct v4l2_subdev *sd, { struct rcar_isp *isp =3D sd_to_isp(sd); int ret =3D 0; + u64 sink_streams; =20 if (source_streams_mask !=3D 1) return -EINVAL; @@ -355,8 +356,13 @@ static int risp_enable_streams(struct v4l2_subdev *sd, return ret; } =20 + sink_streams =3D v4l2_subdev_state_xlate_streams(state, + source_pad, + RCAR_ISP_SINK, + &source_streams_mask); + ret =3D v4l2_subdev_enable_streams(isp->remote, isp->remote_pad, - BIT_ULL(0)); + sink_streams); if (ret) { risp_stop(isp); return ret; @@ -372,6 +378,7 @@ static int risp_disable_streams(struct v4l2_subdev *sd, u64 source_streams_mask) { struct rcar_isp *isp =3D sd_to_isp(sd); + u64 sink_streams; =20 if (source_streams_mask !=3D 1) return -EINVAL; @@ -379,7 +386,12 @@ static int risp_disable_streams(struct v4l2_subdev *sd, if (!isp->remote) return -ENODEV; =20 - v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, BIT_ULL(0)); + sink_streams =3D v4l2_subdev_state_xlate_streams(state, + source_pad, + RCAR_ISP_SINK, + &source_streams_mask); + + v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, sink_streams); =20 if (isp->stream_count =3D=3D 1) risp_stop(isp); @@ -419,12 +431,37 @@ static int risp_set_pad_format(struct v4l2_subdev *sd, return 0; } =20 +static int risp_set_routing(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + enum v4l2_subdev_format_whence which, + struct v4l2_subdev_krouting *routing) +{ + int ret; + + if (routing->num_routes > V4L2_FRAME_DESC_ENTRY_MAX) + return -EINVAL; + + ret =3D v4l2_subdev_routing_validate(sd, routing, + V4L2_SUBDEV_ROUTING_ONLY_1_TO_1 | + V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING); + if (ret) + return ret; + + ret =3D v4l2_subdev_set_routing_with_fmt(sd, state, routing, + &risp_default_fmt); + if (ret) + return ret; + + return 0; +} + static const struct v4l2_subdev_pad_ops risp_pad_ops =3D { .enable_streams =3D risp_enable_streams, .disable_streams =3D risp_disable_streams, .set_fmt =3D risp_set_pad_format, .get_fmt =3D v4l2_subdev_get_fmt, .link_validate =3D v4l2_subdev_link_validate_default, + .set_routing =3D risp_set_routing, }; =20 static const struct v4l2_subdev_ops rcar_isp_subdev_ops =3D { --=20 2.43.0