From nobody Thu Dec 18 09:57:47 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 B52C724679C; Tue, 16 Dec 2025 15:19:10 +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=1765898352; cv=none; b=fj1XpqXrTpe2nz+4a1xYZj+tvgBFmTshVpongquTr49zlG7i7VLguDKwV7llixoRkAGSBHnPkw/IAvbA2eNzI9whnX90+pimsps8UuBky5qxROqcVw4RcGXGevV0g/Hjb8JKG1Sg0gnIVoQ4/gH9kpp9Y+NpFJ8E0iiJBucvMVw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898352; c=relaxed/simple; bh=boadNYZb3yTQIm8omxMbxPhFmxl7jhq903UbqxYtuoE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b7bTZ4LPDmCMMTc1JnWPBklRSOwWyf67gFtWDtHnGLglxVGDY+ha3pKAgFHv/C/Z9fCJwGbRIDoqRtu8YYDLdhddQB/Y8LoplZPZ81T9/L4IVrUUCgSZrF9XRoKkrR56QSEBgPeO8VzgeqFEL3nPl/l9ms6Mche2N+mf6plOoaw= 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=c/9CocAz; 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="c/9CocAz" 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 65EA4594; Tue, 16 Dec 2025 16:19:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898341; bh=boadNYZb3yTQIm8omxMbxPhFmxl7jhq903UbqxYtuoE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=c/9CocAzzAAlvE1Pq5YYuI+MDQ/ga0qYhTN7u+qyDkv9EwrhUc49W4AaefvBujOI1 +u1LTyL6Fl5vjmz8fo8OPyuAQwsVTP70Sbf5gfsN834Zs87HTDxWZlVqtrKbW8OUQs u0LMOTsaQTOvcGrxWz5XFwJNyNVbQnTIVD1Dnm/E= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:18 +0200 Subject: [PATCH v4 01/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: <20251216-rcar-streams-v4-1-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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 , Laurent Pinchart X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2029; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=boadNYZb3yTQIm8omxMbxPhFmxl7jhq903UbqxYtuoE=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhjuzEgoV2Ps4Qi8qd0Yhq3503I8oqVaXDX6 NAUjVjEzJqJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4YwAKCRD6PaqMvJYe 9V9vEACsQBgz2bH6zEw4jufSxcpRLWz78y7YiizORlamjAGJi4qk5F/7xzj4Tpl9ngr1buIIrAM eqNsoyj5myTrwpKqQVCdFcTsE4wFzKcaSbf/0Nx3xR8RD1YpMxvmvrIcsSuaSbIYXtnvPAdB5q1 WWht2/DPEImirlBkgDUpNlKrcl0e4x+R5MZDFq7uV33ieGZH+8DoG0MwxpuuEWAvrOpTBOdE9Y4 EHMBed2erpNlT2sdG6y9c5eFu2/aDQpdRLfb4mjYwi/BJLxQQVimCR1CqmkfYqF9UNvYDXClqWp qVbtfS4ZEfAVj7F5p75k5oGL/Q06lHprqCW8SokjfL6pypJqUqfvLkH/T4SUDrzyicxFkeC+GgS 3RyyDiV9o85Tzow1QRMroC8PYlB5O+NlZ2fTlinodjubWQEuqND1zi+HSK+kf7fUg53XNiCTlv4 NNpDcWw2+SUeHKkoi18Q1k/koP8V+ZwcerxIXg7Jo5X85r4ic8ewy2Zd67j6tfCsHzmdtwGriwo 0xeV8j11P3lPZQUNBqBfrwhiMIWHPlMjujHYdutI5W9DcbeGenl7N6lu9Q1gZEOSf8a6HbYsAyv 7KDhtBDV39GmEvuMkVkLbegQkMSKEG9SUH/JYnBLd4F0N7734cj4+e+KYN7fZLZdfq8mxrnq7I1 J3umECIblKEQ3qw== 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 --- 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 Thu Dec 18 09:57:47 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 F157C33A9E4; Tue, 16 Dec 2025 15:19:12 +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=1765898355; cv=none; b=Yj3JIunQbYvQu8OHXygyZCx2cGV5E9r+5JiWCHBby5RPYIdyjC2Pg8jJZ9JkQvuX9CIAX688adLs8MjMeUQ8i+5QVXs8vvyLeuPfC8hcrG4cNs4DYqN5a0eHo4uYaP3xHNvBeqBiZ4IqvSHp5i4DczZzhkXPrYPtyNpxVMFarWw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898355; c=relaxed/simple; bh=utOQf1vMGqA6bTOF25Nkik7nQcx6ZmtvMsBSPMxIR6s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PFqa3LX52copqjQpWhyMMewWkfea0BiL2TjB/OjPUK/kkLzo8dkwVAiDyiODPFipZ44GnbXv4eL/x/KlE13FGLUtjalERSNin/0Dek2qznrujNrwqElLhS6duGgw5ltEqI1r1FJm2jyunaSSALQv92vFBmBbll1c5/dRJMkgX7E= 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=tGDs0Huj; 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="tGDs0Huj" 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 2C7101039; Tue, 16 Dec 2025 16:19:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898341; bh=utOQf1vMGqA6bTOF25Nkik7nQcx6ZmtvMsBSPMxIR6s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=tGDs0HujKWNO3IRNDcXYzEuPGxTTkDPK45rHMjDYVIDK3CbyABJGuG2V97OAeTT+0 MHrqJR4AZ7vHSGxGmMlljtLA0/+sSQv7a9aIXrHHvN13yi6ZSbzagGa7Pm0tYRM5PB XyiPAYUTMJva45XAy77s1kJj6yY7IXs/CKlgmm2I= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:19 +0200 Subject: [PATCH v4 02/15] media: rcar-csi2: Improve FLD_FLD_EN macros 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: <20251216-rcar-streams-v4-2-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=1329; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=utOQf1vMGqA6bTOF25Nkik7nQcx6ZmtvMsBSPMxIR6s=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhjuSn6yP6K6eKhvJ6TVFaKeH1erabaEWyro Av9IeFblEuJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4YwAKCRD6PaqMvJYe 9XdzD/9LBDD8jvQtkKnNitUoh8UbDUF2b9IR7W7KpnED+tyUlVLIZ99n8lmkV2gBI+fNSecb2TD u9J4feYLnuJ2tFO9bVe1nUX7R1o55TA2d5pMLW6ogW2Rv6cJeGK2n+O8Z7vyMJAXBESkBz2Ip35 1Ai+6Q3z8434ZVM+9dqfAT+kbHnLUcotlUktGQygWpnZBxY8vTDhWTisWFI+igJdpZplZoTs8Qg wvDfj2blQdUvPEaseA08ZXWdWetVtF0DKHwnjPitFLmLUt1HlwQZdS8MWk0/lvoTeb4poH9l2Aw w/pMwf8D9YmovxVRjuabVulA9zSuu+Xn1PPz+Zr5BTwog2sePfPhmllz+XNx5vFwk367Rv1aqhB OIeJvkmeIQ6M1c3zL7NpqnB5jEh+nML+UAHt/UxK0J1fG4Izuj09MxDpg6EzRxylcsEKlNz3a9i xZqg06GbNgM3SlFbP9UsnjQmlmTUD+MD0wcdlFyicE/S76WH7T1AZKmQhzSbi58ew/DqnI1aWSI gKDrQPZIGj23zNwHfUC1jlqFsRcIx3NlvQVw7VMSfKbrDNehAHY2EBx8WDQqbSVtcfH0NOAaErv jZBcmxsSUwK3dDQQ/YV/mUpxMFdGgbPRxNaoJQEG2BDtaQmdro9q1aWIGOWWrn1HCuMtRBrk1DS n4yl2hQ1HJcipsw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Instead of having four macros for FLD_FLD_EN for different channels, have just one FLD_FLD_EN(ch). Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index d1b31ab8b8c4..3cd35adb6803 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 @@ -1082,8 +1079,8 @@ static int rcsi2_start_receiver_gen3(struct rcar_csi2= *priv, } =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; + fld =3D FLD_DET_SEL(1) | FLD_FLD_EN(3) | FLD_FLD_EN(2) | + FLD_FLD_EN(1) | FLD_FLD_EN(0); =20 /* * Get the number of active data lanes inspecting the remote mbus --=20 2.43.0 From nobody Thu Dec 18 09:57:47 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 7F70B33D4F3; Tue, 16 Dec 2025 15:19:14 +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=1765898356; cv=none; b=MCR4y5rcpymDSvBjkWTjVYR1xFKk2LB+N8ESKv84urfdNhSrROXtcWPU35AqeJyKTIIWtm1N+Z6azn5hKGGSM8Y+vdN771q9uFvp1fv6ieoVi46TZiUbX/tryudt7dyWHhWDLeGankhtF3s0IB6UYarDJX4O4Ifr18cDegyBc94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898356; c=relaxed/simple; bh=oJTMzq1/AjVMQ8PbrqI2byVCzIoQUjjtUIKEjmzniEU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zk0GyrYjPlB33hEqXbbtsZ7doTzAstMYHXh50Cua0asHjAjukTg6SWrlvRkLOfatCRYhO5KJi6NXw6Vq+zMw5NVfQahVlQbyel+wSv+a7boEfUtWmPNz7tRIEtP9rz6bGqfG5QGHs32P+41xQqvVpDQgSydXJCV8cKPOKKgmCzw= 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=MlSRp2dA; 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="MlSRp2dA" 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 D597A11EF; Tue, 16 Dec 2025 16:19:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898342; bh=oJTMzq1/AjVMQ8PbrqI2byVCzIoQUjjtUIKEjmzniEU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MlSRp2dAc66xujn3Xc5tbAoPpCSdWNTlpKWZjl+DN9xE8jtrUMByRNqfAgDtmWR8Q XkwydvtoGehOMUdq6iYFeUvnODBX3SU7pG+UIUPeg5IV+CGXeYzaZ/vRJkJjBCsn2P LsMKMGPbRvI1pG8p4vCMMHnrywFBR5Hvk0Y8EcRQ= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:20 +0200 Subject: [PATCH v4 03/15] media: rcar-csi2: Move 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: <20251216-rcar-streams-v4-3-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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 , Laurent Pinchart X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2376; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=oJTMzq1/AjVMQ8PbrqI2byVCzIoQUjjtUIKEjmzniEU=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhjcfJYxlxouDjt0jTrZVqKPKUTTHnGRbe5q azFVysG0H6JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4YwAKCRD6PaqMvJYe 9SGlEACjKpoEnw5joRmdVTHRYQUWmRgIo1j0JlNyzZiXoLC7g4uAS5JWQc6H7TuC9dwjKf2RplA RarVjHJht6vZ6kkW2CTesYMHfsAYfDnmW/TMUdLiiLoIMCUZ2pTOWCrLNE3fQLzS9PbrVyxytsA yVGRF2QMgQTE17jUZq2aslui6Fp8brXMTsn0TYgCSpbxWCsC0T5FkywlxM6mXtcSicpv4ZLpmWr 32uJSMgTGqj3Mm5fsZTAcuH6qr/GL2Cs8uOYURWDRMHI1PhtgcmcOAl95mG+ON5rOO7Cfc2umLD oMk5RBCIBaRJ+X7w/HrgT347bMnEJUy9vvECHIPUnyFK0gV/5wUtYWwUc6QEpudROSqRARKU/nz yxyqhJpQuD63514YK476+T6T08VjOsvA5Dja5L6lviv+KeORKUyN9eD6xvNQcW6LxmmoLBxkr1/ 9vBt+MNX9O2p7RnHmZ9QC2IboF9FHbZgOCW4fif7TJ+TnjiqDsz4FzpdYmxawI0IlTi11MrWAp8 DQBKALvnDctU4GLdEz/RwFeDkSykEfSoZwkmWX5h+mXqcDfbtlHwie9TYqohfWRudmKzvQKe4Bs c1G7xxcY4ZO8cjejJSVQSdUz3YEBVc4hYQgnBoSNZvj7KdK2oOzSk1G8wI18bjqIn+Gyl+RN6Zf Pw2AKuKOLPRFNxA== 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. No functional change intended. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Reviewed-by: Niklas S=C3=B6derlund --- drivers/media/platform/renesas/rcar-csi2.c | 58 +++++++++++++++-----------= ---- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 3cd35adb6803..8032fa4f7a8a 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -956,35 +956,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); - - return mbps; -} - static int rcsi2_get_active_lanes(struct rcar_csi2 *priv, unsigned int *lanes) { @@ -1032,6 +1003,35 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *= priv, 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); + + return mbps; +} + static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { --=20 2.43.0 From nobody Thu Dec 18 09:57:47 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 4300B342177; Tue, 16 Dec 2025 15:19:17 +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=1765898358; cv=none; b=nC0cdmhMB2CofcZJnbZa5Gqkr4tysv290gYXy6/6aLCRkRD95uR3LzW2cAsb31PD8rqzTNr0eJ2hU5cFcj7W6L6pF2baoxiru88xbtl/+mvxPs4q2s9qA6k/p4OHkyuJ3n3GgUuY8QgzlqD+rmUYk0WsrSI7a78005fB6JNGzH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898358; c=relaxed/simple; bh=eTBBPNaGXVujuMVaMDyD5WAUtGtB3Iz2GSBQlnIJYdY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WQv6FcalUHiOzN3hOw5SpqN7yuIu5l9QQHTHRVfJLH61s2Ksgckd6MXnmZ5bYm0fAAQk2rOO9iGI5xOaURu3u/nA6uVpUXtAyRh8PJ3nrxQ+4onN2iLA1Xm2Gyxq+ojP3XpckZfdz9DFAOMK9pNQiMJ8XICesVtNvR/8fQqFr1Y= 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=MS0UJZFk; 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="MS0UJZFk" 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 9C5B213D7; Tue, 16 Dec 2025 16:19:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898343; bh=eTBBPNaGXVujuMVaMDyD5WAUtGtB3Iz2GSBQlnIJYdY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MS0UJZFkhlk3j7YTmQv5TImlKS0mrcPiQ061E7GwT06QT+PNVo5XUcufn8U42npBt vFgrS2gGRPS2bRi0Ncxb/1PDvlhAg2xvasgdpWmnwpiA6wq8wg9Ct8PKIirPdRAARC +7tlxJTNuTAzCybI5W6mO3DMLEJrordR4uFh74gQ= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:21 +0200 Subject: [PATCH v4 04/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: <20251216-rcar-streams-v4-4-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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 , Laurent Pinchart X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=3857; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=eTBBPNaGXVujuMVaMDyD5WAUtGtB3Iz2GSBQlnIJYdY=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhkgD6rLA7SSCmy2aKo44xPgGosGbJfSWVCB LUr5X0qMAiJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZAAKCRD6PaqMvJYe 9cMAD/9IZFMHVRxJwWvgnsz+Wo6Xb/i2LullqTYqi9C6xUDqaykDXlPKNbva0R9nZRfEphYAALd GGTidC+1W9c693/zENHEZru7MKRsasd5JpzdzcCqlvEYwwiVAQ7yqPaFLdaOxMxW71lWYogPe2E 08C/ZFkBSrKHeKiSiCW5IV4u375bsIpzX0kGLR9H6vsMS1TWHfQMhoHA9EClomZ2VsLf/RHwcqx OHWjm+U/iQuEALPeRZ3zt6WnuhXWn63d5UeiPDW2cIqut/GI4scpU3c1nOHMzuLDjvJF6bKvWTP /qVArA7h4eaZALJ1Ng3knUs4FJWnHT1mL0KnYrSDJDqo59Tvx8J9lKLuI+5+U4VAfztuog9MAhR P+iM24Xg9MeL8g/8Vas/pVdpQuGeSEoT6s3cQftc6Srsljcd8SB46LVdGyC8gS/qd8vnxMfEdLl WBlkJ8Bvy0w5m482oRBx8Sm2zmfh6ZIv/cmewyDhobcBr0tEjMYqGVoXqEvoLY1suonGBnUYnnZ Lt7tQIwSb5bYrTnM4kL2ybhSz/yHvTX/s4vcVvTOGupkKreDF6H8g7mankOeywb5QHhO4o7TiBi zV7XZ61B1y6rsKa9XNOUMov0qFFJm9dp4JkG5eWZZRjuHAgSParPrtrWjgCvAe0tYePN3GQdOTt VUopRJubrc7mj3w== 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. Also, in the future when the legacy (non-link-freq) code is removed, there will be no need to change rcsi2_calc_mbps() parameters. Signed-off-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Reviewed-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 8032fa4f7a8a..a2a87c5bfd7c 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1003,13 +1003,18 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 = *priv, 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; @@ -1017,6 +1022,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; @@ -1093,7 +1112,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 @@ -1475,23 +1494,15 @@ static int rcsi2_start_receiver_v4h(struct rcar_csi= 2 *priv, struct v4l2_subdev_state *state) { const struct rcsi2_cphy_setting *cphy =3D NULL; - const struct rcar_csi2_format *format; - const struct v4l2_mbus_framefmt *fmt; unsigned int lanes; int mbps; 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 - mbps =3D rcsi2_calc_mbps(priv, format->bpp, lanes); + mbps =3D rcsi2_calc_mbps(priv, state); if (mbps < 0) return mbps; =20 @@ -1732,23 +1743,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 Thu Dec 18 09:57:47 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 E5CED34D916; Tue, 16 Dec 2025 15:19:17 +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=1765898359; cv=none; b=IkS8lHfT7B8rMMFdyeC2dQt6blyueaUbkawZ7ZlhvQz0py4qSLGhH8dylkZ5GRb90mqMrCca/Tfif6+kowWwAPS0H+o/JS9qWdy2Kcv/tjoUyjvtjRvl3SA8AU5//c8SdY/BDyWCiB8MNOiUZ5H7+m9p2rBzDGDVHU4eZZfZ8eU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898359; c=relaxed/simple; bh=NL9eNhiG2nuGrT5ZCLL8BloiD5r1HsSyMJQi7O2DGME=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pQy+Qx1FdPY1q/U6GZknTBifqizmLaI3KWnSn/H8NY9xM0r2vygBFTIJQOT7zDRXD5AXipFFbpIJZWIeithsawX7TghyQdgGauFBD9qF1nfF3EL2LUF74/TM5NpwhsE5Y2nFLrWhmdxPBiMxBf4/TuScbT/ZzI6TPnhvu9gR7GM= 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=vSolm9hy; 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="vSolm9hy" 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 5FB071449; Tue, 16 Dec 2025 16:19:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898343; bh=NL9eNhiG2nuGrT5ZCLL8BloiD5r1HsSyMJQi7O2DGME=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=vSolm9hyI/rCTxNzjN7i9EIXWeLBgH12ocNwqVn5Kqi27h6ufvjCPryzPVlIEW2Cp jeFrL1806xxl96gCE8Z0a4zQJXA9ci++lUBH03uhUYUUpEcZDA4QySM4jM1re7TI8N W0ZU9fsFl5wZNnY8kTBJLKlMKOd2EcfiriZ4ly4g= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:22 +0200 Subject: [PATCH v4 05/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: <20251216-rcar-streams-v4-5-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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 , Laurent Pinchart X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2953; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=NL9eNhiG2nuGrT5ZCLL8BloiD5r1HsSyMJQi7O2DGME=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhkhowJ7KiEjs9aotzL0mwEdH1J1i4K1thDi DfvWyBXFpaJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZAAKCRD6PaqMvJYe 9XtrD/9q4JipqUq9il0Zt1YBb4SorY3h/H9wVCZk3VflvVCb5x8/IwMIsfPKu94ijcHC+DP5egK Q2TztKZECoMNo7KNW4enLhpDPW2x/qQCYVfuvAq3mSy5OnksmYghD7hGuRKXIIYjZWHsXXkv6a1 NPhevO7a8r6wAmwGLRTxyttqwZ0io56pa5uI6wj8hCiZDKNZEFz60em6MmwEmZGITLohbc0umCG KtX01J7XkChZfJdfKet02VTqi0S7W7MAiAjQlVMxrs1iNBYJlGgwP9SUuEfghbeKaFNsb+2om22 y+aKu2GyVVUdHeR3EvvhxttqMvvkdRvjBa2LFwFPtkVYDRYVQn4y5E7rbVZDOnQ0e3Xbgau3PV1 lThR2ca847xsx8bfnexLEB+V1yZt2FwRMokrbofm5NQy7yvyjT4g90ozCMJ5BbMH8k9A+f2gqCl amyRyrHl4+mbpVCt8cCmKjt0975OD8WvmRSIAWZVAUFmmPZoheDLJ2FCfZD5QEQVWrfJl5YS6BN wXe7an6Q9fBiEnuOnJm4us0aX+BsKU7eIMOtOPq6tiv0vsdgvN+wPs2PiUnKgbuYwzkqRD3+3fZ ZNc0vT7x26GtrmFXdFE8nU3tO/3ttIlw8iftpiqT8NTqH/aUq5wfdAh90VI+tl3OsX13KxeqKSu juLZjJZT/E4fE0w== 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 --- 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 a2a87c5bfd7c..7305cc4a04cb 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1006,15 +1006,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; @@ -1022,28 +1017,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; + const 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 Thu Dec 18 09:57:47 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 72BC834E777; Tue, 16 Dec 2025 15:19:20 +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=1765898362; cv=none; b=B1G1t5PzNBjRs3lPq3/LuVXY/DdhARDsRhpI6smEoZGEh2fqi4FiQ2xpgdKREPavhpwb66HDgo5XWRMFUd4856sZ14hWD0pABNF62P/tJWFA55kBQNKsM+f7dsBlT15xLk4TuSn7kXVfPxCDSFImsy8e4lKHjlGnqKBW76KcFqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898362; c=relaxed/simple; bh=NXxg8dc++C6T2yPC5ibNd10O+Fdr2Je6EmEHn/xWzTM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Mz9nmYILzzMnIfkfMq8+O8eMX/MLekokHq8th/7PSwRc04X/X6rXStiHCz74iTxpSvSEGm2n/vofobV2ZSvXzHvASzGhD5JP8nwEnPpco7qKerLcvn0DsdVW3uJQg8lM9yFa7+m6O2t8iqA6vFbzYpETmngTVOZsbDJqKyOAJBE= 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=Jv5jzw00; 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="Jv5jzw00" 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 23D961486; Tue, 16 Dec 2025 16:19:04 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898344; bh=NXxg8dc++C6T2yPC5ibNd10O+Fdr2Je6EmEHn/xWzTM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Jv5jzw00pLSwbb6p+E/SZxNy7MWyOTp7+TepUYIZkHnhfOZEsQ2nMJOLcIbsk/wPJ 8WQoi/NMp7JswLhCn3j4nqf7fK84OiROBFeT5+mFeCXVEAU85rrDMnf0qfbtg3xCEi 7bN25gsj9cqx5TKGGQT+hBoS1x474tSZ3QJjskGw= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:23 +0200 Subject: [PATCH v4 06/15] media: rcar-vin: Link VINs on Gen3 to a single channel on each CSI-2 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: <20251216-rcar-streams-v4-6-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=2436; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=NXxg8dc++C6T2yPC5ibNd10O+Fdr2Je6EmEHn/xWzTM=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhlhArPZcgtCHRFNvwLy4RmAhl0chl5IDvzT d5bdu6UzueJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZQAKCRD6PaqMvJYe 9VxWD/9PmtPCcIfLsBh8KAo+Of8yiHy7VVMA7y0OqUw7JuJNq0SOXE7gS4UXDZHW21z8AyfPwCt upbDcCZmXFydPOC6B6KGlz8wwzEk696HLQ5DQwOMteY+PGFgHMjKrirMVLxlyXpqR/LhZ1/+nLq MGuqmsNwk1XNG/T0Sz+saAqSlqUEaQS62HIzVpyaFsUZHhGzVClk0IneDHYGHW+Tk5g0m1oqyhh /N/cBYg0kMa/EFrsxwtyELQFDLV0hZWRfH23CIt63FGj6iwF6FHzwphE2/Os9GnoiLP3tZlV792 o1pOWYtL1lLs88TWupthCjb1wcvGesXPprZzvtfrecqn7CHgSYkQnjIyHL289PSDhVTzAtC6ty5 q0PqCWu/XaUW07fvNkuE3cphgxajofS9UUoLEkJOJx8e6FTb+NlIBcj9v+QWkrZSEE/MuBwUw2Q 0ZbNpnZzBeWnrOZF9btqaOquowGbf0cF1VOYPQfMNRqqmDAwTAseaikMfn5e9DoFNH/tMru/vJU khpdrEPuZOenW0QFBIW0yfsIA3ipLhlKPpLOOTEuRlzqZjiB2FH2i78VOvo0o6mccClK3CwIsf3 3wioF3YosT1KaGRzHjkyTvTVcPZ4sS6PkJZPEVWxMwAsxdFCoeMlUJuUDRdB7ixokJRVPjTQlUW fORksQO9JaLcmPQ== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 The stream routing will be fully configurable when we add full streams support to the rcar pipeline. Thus there is no need for the user to be able to link VINs to different CSI-2 channels. In fact, allowing e.g. VIN0 to be connected to CSI-2 channel 3 would be wrong, as the hardware doesn't allow that. Change rvin_csi2_create_link() so that it creates media links only between matching VINs and CSI-2 channels (VIN0 - channel 0, VIN1 - channel 1, etc.). Signed-off-by: Tomi Valkeinen --- .../media/platform/renesas/rcar-vin/rcar-core.c | 27 ++++++++++++------= ---- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-core.c b/drivers/= media/platform/renesas/rcar-vin/rcar-core.c index 100105b620e3..acaf22d1f450 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-core.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-core.c @@ -673,23 +673,26 @@ static int rvin_csi2_create_link(struct rvin_group *g= roup, unsigned int id, struct media_entity *source =3D &group->remotes[route->csi].subdev->entit= y; struct media_entity *sink =3D &group->vin[id]->vdev.entity; struct media_pad *sink_pad =3D &sink->pads[0]; + struct media_pad *source_pad; + unsigned int source_idx; unsigned int channel; - int ret; =20 - for (channel =3D 0; channel < 4; channel++) { - unsigned int source_idx =3D rvin_group_csi_channel_to_pad(channel); - struct media_pad *source_pad =3D &source->pads[source_idx]; + /* + * The channels from CSI-2 blocks and the VIN groups have a set of + * hardcoded routing options to choose from. We only support the routing + * where all VINs in a group are connected to the same CSI-2 block, + * and the Nth VIN in the group is connected to the Nth CSI-2 channel. + */ =20 - /* Skip if link already exists. */ - if (media_entity_find_link(source_pad, sink_pad)) - continue; + channel =3D id % 4; + source_idx =3D rvin_group_csi_channel_to_pad(channel); + source_pad =3D &source->pads[source_idx]; =20 - ret =3D media_create_pad_link(source, source_idx, sink, 0, 0); - if (ret) - return ret; - } + /* Skip if link already exists. */ + if (media_entity_find_link(source_pad, sink_pad)) + return 0; =20 - return 0; + return media_create_pad_link(source, source_idx, sink, 0, 0); } =20 static int rvin_parallel_setup_links(struct rvin_group *group) --=20 2.43.0 From nobody Thu Dec 18 09:57:47 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 3D7F134FF4A; Tue, 16 Dec 2025 15:19:21 +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=1765898362; cv=none; b=i6JB8sV/ekKYMoRKpSRK60s0LOLiVh9gCZ5qBhoUzzDrlEcnhoaR4MTsjsfKAdl4sAN9P2JaaX3h70h2zp60U9K3AHb0swfIC2dh7dzf0XT88+XQb4yjtsmPtyb8BE6DoHyl6ChxFuJUkztg4OmMenCEDEbhlna10RSs9IHfbBU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898362; c=relaxed/simple; bh=E1CJ0rQnAi0EUDChncm+qXC9IRTJno6m1t3x5jgRLOo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LPQ4Rjs70lsGJL+6gKX4aA2cyZG/8xf1XiiYyPV7JYutTbK4jst1Ac528FpLP0KuMjZOnemSIDuKBSRXRpatjsFkKdAmqTecWevEQWhCoz/2uLcqygxMbIUU/HVNynlLrGmOB6p0lBlvzqPpNcId1fAs7+7UN3Gt3w60YUD5jVQ= 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=G7GsIRG1; 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="G7GsIRG1" 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 CAAFC1552; Tue, 16 Dec 2025 16:19:04 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898345; bh=E1CJ0rQnAi0EUDChncm+qXC9IRTJno6m1t3x5jgRLOo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=G7GsIRG1IpkLsiRj/eQDz3jMvgCNpvhRfgEPI3e5I9lLGDjfOcnyTUViuBB9+m8Ti LFQCgJf00gUrbDVDn/MJrRnBiD644yRWELBzYMaVAjqrw3N9AJPGqytAiJ9CzPTVMy /zScey6ZbLmGeBzBWowSSLWcAsPxSu/pdj0fk9gM= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:24 +0200 Subject: [PATCH v4 07/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: <20251216-rcar-streams-v4-7-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=2882; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=E1CJ0rQnAi0EUDChncm+qXC9IRTJno6m1t3x5jgRLOo=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhlHlHgo9ICb/tIn7YtdZO24bxLNHEOyRmrJ k62qgaXQwSJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZQAKCRD6PaqMvJYe 9e88D/9RfDElh1M02pZypkhFHz2LbfT5qFQmXyqPiuwCpgdC+9C5/LdmNTvHfIMbp2AMAYlvvx3 lZ1r9wNSDKAaXo0V/cuBnVR5MSvKL5huKVTwTA0gYWx9Fp1kMWxyQ4N7CIT79lTBWQJO03GJlKq 8vRCbd7fSi4k8fd2xK5+GEOwz/zvlArNXuHB6KAOFRsfxckZZtHRx0MTYgxg+CT3pnnmLovFjAg JrRHSyR/SK/E1mBcG2Rm+7v+efgS9zf7tVtyvTH0j7sgOsTP1q8CdtxnpSCfhn63DPC9bzWR4jy B68q0+ROwneyxjSaEekQoK2bIQO92ZUdzoOmfVsS5vwL65ng5AEojuarRNT76EZgFc0bNEhvj4w mGt4ZVBE1gcNdgymsE7y2OVixhzErrpE9pCfzWh15SCYhMk8u6pJ2vU2u8yJZukJ3ZNi6Qn9Uc4 S7XmQzVXOdY6aZ0havBmKcZa9g0eo7uAfMxqr0hp/oLWxPdiGMDOrkU3+iXEVE1qJvgk4isb/E9 owuNrKvYWaEE69exDIyQHWLvIfFOYopR5GxpmYEYA0UeqWAlbzwab3V9qePwrorHG9xfMvqd677 ZmzCBjfjNFGcsdAF26z6ozqFCFoexTl4kiCMN1OWe1QRPWy0roeyTbbLsP3BOaVpRR6/7LEUBH0 Tu9SpwT1/rILGlw== 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(). On Gen4, a side effect of this change is that if the sink side devices call .enable_streams() on rcar-isp multiple times, the second call will fail. This is because we always use stream ID 0, so the second call would attempt to enable the same stream again, leading to an error. In other words, a normal single-stream setup continues to work, but trying to use the current driver's custom VC based routing will fail. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-isp/csisp.c | 27 ++++++++++++++++-----= ---- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp/csisp.c b/drivers/medi= a/platform/renesas/rcar-isp/csisp.c index 8fb2cc3b5650..58a9a3bd9f75 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 @@ -291,7 +284,7 @@ static int risp_enable_streams(struct v4l2_subdev *sd, u64 source_streams_mask) { struct rcar_isp *isp =3D sd_to_isp(sd); - int ret =3D 0; + int ret; =20 if (source_streams_mask !=3D 1) return -EINVAL; @@ -305,9 +298,17 @@ 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) { + if (isp->stream_count =3D=3D 0) + risp_stop(isp); + return ret; + } + isp->stream_count +=3D 1; =20 - return ret; + return 0; } =20 static int risp_disable_streams(struct v4l2_subdev *sd, @@ -315,6 +316,7 @@ static int risp_disable_streams(struct v4l2_subdev *sd, u64 source_streams_mask) { struct rcar_isp *isp =3D sd_to_isp(sd); + int ret; =20 if (source_streams_mask !=3D 1) return -EINVAL; @@ -322,6 +324,11 @@ static int risp_disable_streams(struct v4l2_subdev *sd, if (!isp->remote) return -ENODEV; =20 + ret =3D v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, + BIT_ULL(0)); + if (ret) + return ret; + if (isp->stream_count =3D=3D 1) risp_stop(isp); =20 --=20 2.43.0 From nobody Thu Dec 18 09:57:47 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 A6C7B350A2F; Tue, 16 Dec 2025 15:19:23 +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=1765898365; cv=none; b=HNUgvjQQHoF1dv9icZXCY2YjUkw025/VoC1HwQ9stosgwadsUDROQRc7AD+WI8sx1MDpGoUUg+P7aR6PJtSFwMDAQJDpUkorOjp+e03aUr/VO1wjY1IQFeIHHAKWCnLKp7a2Re5JjH3r13/Ns1wdnHidmhZENHwr61QSVykdaK4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898365; c=relaxed/simple; bh=e3GDDap0IFU4kE62sys31KdPbj/6dEOb3CokA1RneYI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TsfXW0NfvPiK+7Ka1/uWr0RhAIzJDFTS5/CvwPttGFA2NO1MJGmWGfI6t/APzncwNfDzZN9R2GjuYk4aWOIznbBRZ6+iii6sbJEHcibGP6BV02Sn9Ij2f3awXR9fpPH5ODexo/J/nRU2yasRLtV3m1XvwjBONmZ7fTbT5LP+BLk= 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=s5ZcdMJq; 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="s5ZcdMJq" 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 7F93E1574; Tue, 16 Dec 2025 16:19:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898346; bh=e3GDDap0IFU4kE62sys31KdPbj/6dEOb3CokA1RneYI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=s5ZcdMJqW88F+0YjvHT9wcRev7LXK6dVXigaJsbTk2zik+rxksv4fNQisD73jx8D8 bHKPV+tCNsZacFH7CR52VpdLysrCoNoZY/n8fDx5o5aBWABQQ2AsjLhhh6j2LlzpgO cjgLnZRxvejCr5oMhNM8AV30SVKs7ouuhuWtf3ZM= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:25 +0200 Subject: [PATCH v4 08/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: <20251216-rcar-streams-v4-8-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=2831; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=e3GDDap0IFU4kE62sys31KdPbj/6dEOb3CokA1RneYI=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhlTZtOJmBZcspYN34xm+5YkRuAKXZJXdsqZ O9W3LgusJGJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZQAKCRD6PaqMvJYe 9fOPD/4k66rEnZx1bcltQsDxExxiRvg+1E7N6vSbdZwdDdoAfcAPh97dyUxTdwGMDQknjNgsLJ7 uPmSR7rBe1hPfqJOpperYQRfzsvh6Il09IaGmfXPJwAkGFL+9x3ulRhWKjJH71uU53CtrD9Di7x gHpIhobnx2q7cHzj1NkN6ajTWTpEOLllUnNeKsF8sic+pll/0O2nVvIASzsuY0BvWwRXFhGRbt5 sn4yt2q75A/QBcAjgAe20mzsGbqYrtorSzHKU0LdZsaHLeeHe13MXr6VO07WZMLRzRK5HTISjeE DDe6xkl+5XjKQhZaA7xD3m1hXJJ4s4DMpH461VrZ8U5vGoTfTiK1naczP1fY2ZYTo/vLrpMGclU DX7OjTraZNMAL/XJr3oJNEgxdj2PQ+oM3bpQDW328TElKxBrZp2QJLPp+vKuf8qCrUI+Iqlhrj+ +L2U8RFhAqOUQ2WQlw5GscsRw9CHaxFJsu6C8dE0pbGJdmXAq/9H1aiYypFacOgVMeVpyrdiQsh mFeCJN5y0b4Shh6F2jQsy+t4ibrHzHAzn/kkwlLyJ4Q8/QH6kSgAyu8yySSfNV7hIhAETft41sk lvT/+MJUoL/igFX3UPJ1dQaZS9ve5Gx4c9CM7wc/i6HFplVSBBiICTeBPlvNnJYVoHjsXDLjCy2 2UaJLDKkNmwc6bA== 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(). On Gen3, a side effect of this change is that if the sink side devices call .enable_streams() on rcar-csi2 multiple times, the second call will fail. This is because we always use stream ID 0, so the second call would attempt to enable the same stream again, leading to an error. In other words, a normal single-stream setup continues to work, but trying to use the current driver's custom VC based routing will fail. On Gen4, this doesn't matter as the rcar-isp behaves in a similar way as described above, and thus rcar-csi2 will only get a single .enable_streams() call. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 7305cc4a04cb..158fa447e668 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1822,20 +1822,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, @@ -1857,6 +1849,14 @@ 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) { + if (priv->stream_count =3D=3D 0) + rcsi2_stop(priv); + return ret; + } + priv->stream_count +=3D 1; =20 return ret; @@ -1867,7 +1867,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; + int ret; =20 if (source_streams_mask !=3D 1) return -EINVAL; @@ -1878,9 +1878,14 @@ static int rcsi2_disable_streams(struct v4l2_subdev = *sd, if (priv->stream_count =3D=3D 1) rcsi2_stop(priv); =20 + ret =3D v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, + BIT_ULL(0)); + if (ret) + return ret; + priv->stream_count -=3D 1; =20 - return ret; + return 0; } =20 static int rcsi2_set_pad_format(struct v4l2_subdev *sd, --=20 2.43.0 From nobody Thu Dec 18 09:57:47 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 70634350D42; Tue, 16 Dec 2025 15:19:24 +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=1765898366; cv=none; b=Jm4CgrRDqaMjyhWtB6iNNuTv4nJW3VFhvxND+35fsXEs6/CdVvO6LjPx1YMH1zJAxtSS9iTxB8GBTH9gourrvCBoCyWQO2/b7SOL/dmMPRFI7q8mk6J6FZQg9Ct0Gu0R0qIO3hvQ2HheUpj0OzyD9FQScCUxvrNFcemqiN/gdCQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898366; c=relaxed/simple; bh=nxSpWhGGdK1V6xX1GVzD1gr52EzJI9+8vNCGE5j99T4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HOD4Ys1QTiugVHqBw+vbBAEP9z4EYFcY6YiSInF+KrQTDtrZOe4Gb/kq+3UEajDc2lOa/IPBLWY/pMb+uT7drc1Dzg9YBqxAITTffNjaZIWybJEqfyIWKMYS10RD1acpL7Ko81uIdVFXEXO0yHR0bqnKVAFREO0bzPatkXbO60s= 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=r4VuiKWF; 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="r4VuiKWF" 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 32659581; Tue, 16 Dec 2025 16:19:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898346; bh=nxSpWhGGdK1V6xX1GVzD1gr52EzJI9+8vNCGE5j99T4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=r4VuiKWFNnPz6jYJgErqwiadlmlxMPK6Yfi82T8uo6E9WdOCX2IwDocXccsF6gkzg jVUVYQ7+M/L/U+to1erTbuMickYt5Wf0dU73PsYsD3cvap+J1egclJcgCdzDYLbCel ZQndiS6trZ6n5B5BcinVkibfJlxES4FhzG2iJpsU= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:26 +0200 Subject: [PATCH v4 09/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: <20251216-rcar-streams-v4-9-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=5121; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=nxSpWhGGdK1V6xX1GVzD1gr52EzJI9+8vNCGE5j99T4=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhmnvp5J3lJriY/qbXRy3uuuhVvpfbeB38do VMGVs/Ffv+JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZgAKCRD6PaqMvJYe 9QpYEACUZNq10+JVDlalQaP9hyieJNSEu2ReyA/+xRZMXX/WHK7tDu2yhrpwUe4Q1LJSe4aNCvZ cT48SLdACmzVCnM6ggqah49N+wweI4sDJC7RHgqRjnLk4JyB8jQyHzqLhk6Ivoct3C7A+4TiWVa MEmKbIkqpWH4Csd28505rAzeDj2smqCRnWCNu6Bd3J0MGGHzqXp5p0PSyBmRXP+ic4HHJoRy0Fj ZA3fu8RNQS4fRmcsXq4PISbWX9oo1Aru9O7hDGhNnENibPh6EzvVlx0TjVAR89esX4FvcoEIoN1 MVmijp48Yz8dqXslmqTp63OVU3PG72DHzAFCiHZYem+Qzz8ceB4bZWJROve0TKmaeH0N8+0OtAI AukK38kqP8DYFlJqsSaPXhv/p6hBOtJ6IEAngfdFIGzoUJlhm1UvGg4/cZ90Ensur8ztZ0FYLqM aiIFR/oppxcKi0VKScYk0AdVnOZafSWMx1qK2D5sAlBTC2RPiUSKRG0jHfxisqicfl5P6xngVZJ GzyZojVpMVxC5L+vVe2b267K7YwJRb3u8KN2B1i4pwA2hh9q4BUuUH9EfYDvbexazqLASrALv7/ pQZ6j0cYncBvO9MJAFmyR1WBFUjoJi/cJltvy6sDR42HcqChWUQTR86rmIGUsUKuaCAKVB+VmrB Vm/fIkD7ZLLajEQ== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Switch to Streams API with a single hardcoded route. For single-stream use case there should be no change in behavior. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 64 +++++++++++++++++++++++---= ---- 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 158fa447e668..ad62c95c8f9a 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1023,17 +1023,24 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, */ freq =3D v4l2_get_link_freq(remote_pad, 0, 0); if (freq < 0) { + const struct v4l2_subdev_route *route; const struct rcar_csi2_format *format; const struct v4l2_mbus_framefmt *fmt; unsigned int lanes; unsigned int bpp; int ret; =20 + if (state->routing.num_routes !=3D 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); + route =3D &state->routing.routes[0]; + + fmt =3D v4l2_subdev_state_get_format(state, route->sink_pad, + route->sink_stream); if (!fmt) return -EINVAL; =20 @@ -1062,6 +1069,7 @@ 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 v4l2_subdev_route *route; const struct rcar_csi2_format *format; u32 phycnt, vcdt =3D 0, vcdt2 =3D 0, fld =3D 0; const struct v4l2_mbus_framefmt *fmt; @@ -1070,7 +1078,16 @@ static int rcsi2_start_receiver_gen3(struct rcar_csi= 2 *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); + + if (state->routing.num_routes !=3D 1) + return -EINVAL; + + route =3D &state->routing.routes[0]; + + fmt =3D v4l2_subdev_state_get_format(state, route->sink_pad, + route->sink_stream); + if (!fmt) + return -EINVAL; =20 dev_dbg(priv->dev, "Input size (%ux%u%c)\n", fmt->width, fmt->height, @@ -1892,8 +1909,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); @@ -1901,11 +1917,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 the format to the source pad. */ + 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; } @@ -1925,8 +1950,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, @@ -1939,10 +1971,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 { @@ -2599,7 +2634,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 Thu Dec 18 09:57:47 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 D1B91350D52; Tue, 16 Dec 2025 15:19:26 +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=1765898368; cv=none; b=bQLw8v7qRuqvg9s/DU7V85FzLKZtT4KVbEWse71BXmPa0ixgtQFXQJeXRMX7zjEOIGMqe/qNGqSgmFEjN7zP2Gp9UzMoMVfoz3pCxDtTtp/uQy63ASM93CyCUjPk3tz+q3jxdCV/0aNyNy/kqe0fQmDKVAfywuYZHyf95cZWTww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898368; c=relaxed/simple; bh=mZWCoESvX+k2ae2+IKwq0Qo52nPIskYlapwxCMGA4K8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SZzQRVUPBalA+vVpgKl3d++WFB5yHjkoeSzLtIQ2FPC5eR8okpidgtqPGxXiqnf6bWkYKpC8NJn5R8Zfhgqv8BpGpCGccjik+IXUg7qaRuQUVkm5WZOfUw7ur8VhPkomNYWFZyx8mfpYaww5iHTj+ncL7JGdTez6DU3kIvp1QW4= 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=tJIu2sc6; 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="tJIu2sc6" 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 DC9E91693; Tue, 16 Dec 2025 16:19:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898347; bh=mZWCoESvX+k2ae2+IKwq0Qo52nPIskYlapwxCMGA4K8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=tJIu2sc6e925ip15/dp4eMmRALPOMD1cSpcKpDeaBi4TTuPKSEjJsRxvugSvyvagZ rWcpFrPF843Nf06z0mbtzjwgFmLjdlE5IGite7mQPDwVpRdHfUvMyhC8Noqf0KIyq3 qF8Oym3RvYF11+Ljd1FwhjUsCCZ6FlTLiqh1j81E= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:27 +0200 Subject: [PATCH v4 10/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: <20251216-rcar-streams-v4-10-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=4413; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=mZWCoESvX+k2ae2+IKwq0Qo52nPIskYlapwxCMGA4K8=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhm/a0/PYdUHllsTHM7Abd6iT/AQMGZZZlQt /98Lty2XVKJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZgAKCRD6PaqMvJYe 9Sm1EACe8bxatwkmtAfyjRKpJCLZW51Pc12/wKyMs5xr6Br5UInbCzukYCzhYGzukPDtlgLfTEf J2puGdsdFm4onYJjC1nf1m5m3N1hc3LHIhxdgXc1pg04yn/LBTGdkjHW6R0kknoWYg1M19JyAf5 nkWiNw3DEPpbOJq6ALfymFTvKqgajzowia04k3UC0WaHXulxzongwgZHq5qXS3HMPJQXVFb46N2 Gxi+9CnpDDjkEdttIM9r69pZ4BAj7YqwIMcB+ZnWtf/Qf0u021tJcAhT8v1KutDDiiLkCWJ3652 +Qdg4gSrnQKIhGjaprGRhZK14wcRLu6ByhA4IH4f3H9VJfYfI75gmWW/kS+8436svj9t7itX1Rr oXHwVTgNsfg8Uk96kiffdp+b8hNwVyAXk72GKieyGt+IjgiElkXNnjp8Sk/wS0CFTvKkTMzhE+f mpDFExCO7PsMkEXSe02Fs7B/W1KHdVu87ZbbfXyogYARWQp2kI09XEhx6nhZZQ2S62A455Yalu9 htrDBH8mYK4II8Xgi5oRVM85nm+jFq8oJz6mLb1w5NRDXMXEaKjwrhSPVAjfXPzOIwdjx90NEGR hdQ5xNfi054XMzsGDW9FNkENVCbRGoJLp8E25DsqcikRJBlk03fzahnWtghHWXxmUDEMfkehO2M yAYg7tOLovjl5pw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Switch to Streams API with a single hardcoded route. For single-stream use case there should be no change in behavior. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-isp/csisp.c | 69 +++++++++++++++++++++= +--- 1 file changed, 62 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 58a9a3bd9f75..8ac45516aa39 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; @@ -216,13 +227,20 @@ static void risp_power_off(struct rcar_isp *isp) =20 static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *stat= e) { + const struct v4l2_subdev_route *route; const struct v4l2_mbus_framefmt *fmt; const struct rcar_isp_format *format; unsigned int vc; u32 sel_csi =3D 0; int ret; =20 - fmt =3D v4l2_subdev_state_get_format(state, RCAR_ISP_SINK); + if (state->routing.num_routes !=3D 1) + return -EINVAL; + + route =3D &state->routing.routes[0]; + + fmt =3D v4l2_subdev_state_get_format(state, route->sink_pad, + route->sink_stream); if (!fmt) return -EINVAL; =20 @@ -341,7 +359,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); @@ -349,10 +367,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 the format to the source pad. */ + 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; } @@ -369,6 +397,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 */ @@ -526,11 +580,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 Thu Dec 18 09:57:47 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 AD095352FAD; Tue, 16 Dec 2025 15:19:27 +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=1765898369; cv=none; b=pq66VvkiEWZPy+MDn0cV+CpoXCSZo1B8Tb+pmCefnpQfzK9c04amnuZU6679hqm+HuOyVwkkH5Xlm/IKCAPdrzJ3d3d3h/HS9wC78TdIIo0N12MFg7ikmTkfq5Xi8IIl/P+JG6JyR+myFv3dp5OsbWYsC/CGT0rP/cL1YHXhOW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898369; c=relaxed/simple; bh=dhK3uD+Ut+8LJFD1lnLJkekf7X3cpMpIVzZnITUPmuc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MGJDMcmgyUKwEhtNRgBXV0DZAQ+qoPFJvlpOnjYkVjr1mArSPaJrTiMVdFlO5rbdVHuBkkadHEtkogcFgJ/nT4ItYibTKI7S1IbUilXABOmv8MUsB2CjU6cG5UrIbo3VOKLwt3juzABobTo3i5uMw8/QMgY8l+xw1gjXW2/+hLU= 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=jAIvc0ID; 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="jAIvc0ID" 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 92EAB594; Tue, 16 Dec 2025 16:19:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898348; bh=dhK3uD+Ut+8LJFD1lnLJkekf7X3cpMpIVzZnITUPmuc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jAIvc0IDr3Mfyv2X7rdmDZUw2ln3/D2Yqr4nFZQHb9wS9oDMReTm0Nhj0FIh8+GCM V0irtkeN55O3HR/rSA/MN3z8kcF9QphRd4Kkmm/mvQEFfODWE4GP7qJA5BtuNsPQY8 UycidPQPE6OgGClevBWDA1yt/r4zUeKu06+n28uM= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:28 +0200 Subject: [PATCH v4 11/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: <20251216-rcar-streams-v4-11-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=2753; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=dhK3uD+Ut+8LJFD1lnLJkekf7X3cpMpIVzZnITUPmuc=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhmNVeW0hlujPsjS4BTqkBrTm+M2BMWWfUz3 /owcFNl71aJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZgAKCRD6PaqMvJYe 9T87D/9dqArUf0CC4gfOtNWsTEgsBaai1JTpwPzdFZuQwOvxP1YeaEy+U4iVdbOHoNUCzXRIX9d qs1yu8/7tg7vI0j/6dFeIApQ2C1CjO9LVUXmVsPLdnjR/KNi9im82RnFfd4JYOtUJfBqxldobmQ J5VSKGTbeXSHf71sx2wx4pwyLhz2dQwQhEMlmcF68haAX6iMgq60jXG867bctBrv9jWuI5DfCPg Hh2JvQbjM4VVlDEtegTbTeYiRIVx8hrJTY/u1Fw9G4wIC/9tM2hDiRLG7hMYVlJ/9N9Bdw6xIEU 9gqgM8bJnUfTeTsdranmjtqrP+xaUBoYHGPIGaRjWEg6vB71RMm2kytb3xRilCpgXXde6ql5gTy XQYnH7aqFRTZVGwbMNSGf7fAbwDLj1oRZZMd95OLXY/OdOA0icRy9h20auW1FkvkFwgWyE5Wbq2 GqSmKlOuRJZgpocHdmbqDbiSCG9qHiLPeZmThoYwdiuxZtzs8FC33CcT1NCisT4hKS9c0s0GA/H ltwZ8phjVOYG+6YwFw2m0Fa2EdmKHgHUua+HIXHCqOTe7ZVePCad1lCDxxgAbH8PRDf2pqVSTMh BKoIPHMYxztH57VBoIikn5F3mefJp39Dg9BQwBMVYs2NtWBM0kmxtQxdiCeGKvg4qcXyOPoLbEm xhUN84EF3/osEzQ== 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 --- drivers/media/platform/renesas/rcar-csi2.c | 70 ++++++++++++++++++++++++++= ++++ 1 file changed, 70 insertions(+) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index ad62c95c8f9a..b8baf7c65e90 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1935,12 +1935,82 @@ 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) +{ + struct v4l2_subdev_route *route; + 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); + + if (state->routing.num_routes !=3D 1) { + ret =3D -EINVAL; + goto out; + } + + route =3D &state->routing.routes[0]; + + if (route->source_pad !=3D pad) { + ret =3D -EINVAL; + goto out; + } + + fmt =3D v4l2_subdev_state_get_format(state, route->sink_pad, + route->sink_stream); + 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 route->source_stream; + 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 Thu Dec 18 09:57:47 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 3B40535504E; Tue, 16 Dec 2025 15:19:29 +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=1765898373; cv=none; b=JSurgUewi5Yw6sp8mSUt2ywgjI+rgCKb4kYbuaOx/kjRypAyP/3wAMjQ3GWqjxlY54UK/PAK/Tyv4hvNcMsYKTZFaQw+g+XPH3LCkaDagUNGXOEirYVIGfjFmbfeunkg78sCoe9oQLMa2vueoG31ypGX3wOoONxqQ7cWKaoAy3U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898373; c=relaxed/simple; bh=Iff4ud66u5yMU9jO70xyyuEbjXflyaiIAtTzW1C/x5c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SprTVnr92Orajp03YDRGPYbhLq2odMgCIHMSMKoCZ4rqhucWigFgAfwjeyNwUose+Chej8uYPvzPs0FlQ02NU+MmlEfXbow0TuO0IqHtteZLztTCQfYKgf/Fd6eZ6nHSTcNpmKwCorbnk+aAC9Ju+QZJffnsfuN7fXO3uHJxNY0= 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/LqkaL9; 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/LqkaL9" 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 4FCE416A1; Tue, 16 Dec 2025 16:19:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898348; bh=Iff4ud66u5yMU9jO70xyyuEbjXflyaiIAtTzW1C/x5c=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=X/LqkaL9etm11VBvglSuzW+lXJn8K6N65VIrPinPSvDa3UaaYzDeqytu7O50OyQO7 +onNgAee3UDKyQF8TfkXopSFkwoVkvLP3ximJHHFHcKemGZhQCtdYyAEqtZnMElsh2 N5e9hoRQV/Qeab0j526m4DiWqKQsTgIHAPjZ4WvQ= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:29 +0200 Subject: [PATCH v4 12/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: <20251216-rcar-streams-v4-12-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=4963; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=Iff4ud66u5yMU9jO70xyyuEbjXflyaiIAtTzW1C/x5c=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhnRlBDL0n92fTnfACD9/Y4EbijjZDhgVQIu ur7sZUI8auJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZwAKCRD6PaqMvJYe 9ankD/9nAMciVIxG8eU+6QZ6QGgkXC+Ftd0mOGYh+lBxZG89eGcR9uwZYmD1J6dM8qLNpPBorsL rLmku+qneH/7QLC0B94bexZr1gko4+6mCwOEcuUbwVwbhg6yI07Hnt/izhG6BDYlbRnmlCwCJVA j1wpXEePajQMNnQDDAZTG6ulqClmqdGJBn9OzCaWj4Ke/9B3i/Kv0EBe2ubyOffLOnS/mRSf0W4 EPzjYrOS8axO11p5gMLTa4tJ8itEB7txNWeteL4s9gGm97GHMPyS6bqnfQSBFjVQIGl1sqiwr9v C+soN+GdVU6NDyOgdd6t90O+Br3fP0O9xQ34eoxsBJBhGAqvla4rDPYjHMJmTdWxgUP7hlC+CZ5 8jPW5D90th/ePM2+WI5J+aHCEeeyTCi898MpH5Rxuu7cYOZoGKp93thx7eU5lKLYsgkrbS+mgAI xizyq7jYz9MK7NZsBTP41EmpS6cb/ipq3NxXRZZQT3EuAaxAH+MfoFhSrO2+L67rVN37Sa5IRuX +hino28JgvN4OXMG/HJWdK+LofYC1YHcCy/cKNlQ6a1/Ow3EzbbsXh/j8XtPHdQPnMxL7wwAFGG bV9r+aEbffY9lNEwik54e/136jaIyf9nIq0gcCjX9bu7qQq68FhXgIX8zb/S5ir1hOx4rCJW6Mr CNtw1GvSOZBubSA== 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 --- drivers/media/platform/renesas/rcar-isp/csisp.c | 110 ++++++++++++++++----= ---- 1 file changed, 74 insertions(+), 36 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp/csisp.c b/drivers/medi= a/platform/renesas/rcar-isp/csisp.c index 8ac45516aa39..18d63731b6c0 100644 --- a/drivers/media/platform/renesas/rcar-isp/csisp.c +++ b/drivers/media/platform/renesas/rcar-isp/csisp.c @@ -42,6 +42,9 @@ #define ISPCS_DT_CODE03_EN0 BIT(7) #define ISPCS_DT_CODE03_DT0(dt) ((dt) & 0x3f) =20 +/* ISP has 12 channels, of which channels 4 to 11 are connected to VINs */ +#define ISPCS_NUM_CHANNELS 12 + struct rcar_isp_format { u32 code; unsigned int datatype; @@ -225,31 +228,82 @@ 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_subdev_route *route; - 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 - if (state->routing.num_routes !=3D 1) - return -EINVAL; + ret =3D v4l2_subdev_call(isp->remote, pad, get_frame_desc, + isp->remote_pad, &source_fd); + if (ret) + return ret; + + /* Clear the channel registers */ + for (unsigned int ch =3D 0; ch < ISPCS_NUM_CHANNELS; ++ch) { + risp_write_cs(isp, ISPCS_FILTER_ID_CH_REG(ch), 0); + risp_write_cs(isp, ISPCS_DT_CODE03_CH_REG(ch), 0); + } =20 - route =3D &state->routing.routes[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 source frame desc entry for stream\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)); =20 - fmt =3D v4l2_subdev_state_get_format(state, route->sink_pad, - route->sink_stream); - if (!fmt) - return -EINVAL; + /* DT Filtering */ + risp_write_cs(isp, ISPCS_DT_CODE03_CH_REG(ch), + ISPCS_DT_CODE03_EN0 | ISPCS_DT_CODE03_DT0(dt)); =20 - format =3D risp_code_to_fmt(fmt->code); - if (!format) { - dev_err(isp->dev, "Unsupported bus format\n"); - return -EINVAL; + /* 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); } =20 + 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"); @@ -263,25 +317,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 Thu Dec 18 09:57:47 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 6C742350D42; Tue, 16 Dec 2025 15:19:31 +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=1765898373; cv=none; b=X6WZv2SVsmMnCvYEN5MvIzs+ckrz4Kffz4x7xVBPFAOcBdPZ+Y55K90CjtCLMR+Qnv5tExHTfns1X2X5M/2OQsYQRzRMKFLr8ZpHXDOLLcS2uW38Yf66y1nOlIvdnJDP0FcCea+1hCpkIrWS8pLgC20zeeqyW48C7V4qQmcg+7s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898373; c=relaxed/simple; bh=nvIzLSbZyKpJWhP1c6rVu/jXt148ekDke77qvQG6ysg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GGWXa2zvc7MB+f6WYrswnCYqhURNqfg+bGwtrwyod16igBX0AX/vtLC4TLtlG47+9JulvTyC53z2WTUsGMWo3fGPoGM4Zx3MMuF91ExrYx3N87f9SNcBC3B+rHe0uizfE/z+DwjcgWDIqmw2HFkad61YJTFK6+d9cRgqvGok3rg= 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=lVDYTEQq; 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="lVDYTEQq" 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 095CC177A; Tue, 16 Dec 2025 16:19:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898349; bh=nvIzLSbZyKpJWhP1c6rVu/jXt148ekDke77qvQG6ysg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=lVDYTEQqL0bcym9UYi7ccrd7Piiu/Lks6LJ+3m+oyudZbty2M0FLA2Vnzyeav2Ve7 2pCvMoHn8lYhZxBKJyhhQTj6Y4ydAnf8BAsxh4qxplPC3oDk1i9QUomJRhKl9fvmAN IoBY9Vfb2X4SH3gpIb/PUSJ4MDsgGV4HvrL+PwMc= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:30 +0200 Subject: [PATCH v4 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: <20251216-rcar-streams-v4-13-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=5032; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=nvIzLSbZyKpJWhP1c6rVu/jXt148ekDke77qvQG6ysg=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhnJ7ISHw/kPdc2MFFXCsOVbJdUuMsR/Ykvl lzUIgG6f3uJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4ZwAKCRD6PaqMvJYe 9QSAD/9J5wgcCoYEOM+05zG6zWOFiLUg/TBC0y1CV6hbOZJF5XWZN5/GvN8bVF/RO0AZWYroZKF 5FgPzNtecsj/Vnwuc4oewLL5VmDzmUUTX3GbiJJu6JlZxmSEMKa7OVR7i7hYemwixSvGFKOjGv2 F3D4G5zWfebvzXdy29kEI2DAYtbXClkPXFZD/qwRrJurkR0/AmuDDkCgGgZMcxtK1MxX4+IaqML zoqTA02DeiPZj+DUVvOfBa09ZE96+iDEe7IH7PMpbv6cyZDOfUX5RoDf6cd4Ur2GrWeOiWyv0w1 GLteBEP9T+4ZV9CtO8V+hgCtxLZCkY0/EZL26wSnZgaydF8F2y75kBfVoH85Rw6MVlLQ6555KeZ TThdvNuYQjeDLsMYKsmLtRq+UjI6N6INUud8LMd0SLHvaUzbvxHxBzjJ3k334XZ4IqYj8LHwK5D WB8vq7pBE1Jr45pG9Fy+gWWrtmmAdbBemJElmW8o1FV7ny5ABYufuZ5kjXa1mmLcRh7XQrOHM/I rGR9u14kd0cxH4zAg+6oEBBIjm+4uLsN4TNX5lDslTGkgmvbmTbsYSJiUy7Q4+uCjgPLS39NLPJ /wlo3tSw5CS/RoXB3XVmXIwW0oLPvX4bUBbq/cbCZfTavKCNNtOIkx0fOQMQg7osvxtGJTPkLKR Ctib1swqiUEqEOg== 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 --- drivers/media/platform/renesas/rcar-csi2.c | 115 +++++++++++++++++++------= ---- 1 file changed, 75 insertions(+), 40 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index b8baf7c65e90..93f25fb3b82e 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1069,62 +1069,97 @@ 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 v4l2_subdev_route *route; - 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. */ + ret =3D v4l2_subdev_call(priv->remote, pad, get_frame_desc, + priv->remote_pad, &source_fd); + if (ret && ret !=3D -ENOIOCTLCMD) + return ret; =20 - if (state->routing.num_routes !=3D 1) - return -EINVAL; + if (ret =3D=3D -ENOIOCTLCMD) { + /* Create a fallback source_fd */ + struct v4l2_mbus_frame_desc *fd =3D &source_fd; + const struct v4l2_subdev_route *route; + const struct rcar_csi2_format *format; + struct v4l2_mbus_framefmt *fmt; =20 - route =3D &state->routing.routes[0]; + if (state->routing.num_routes !=3D 1) + return -EINVAL; =20 - fmt =3D v4l2_subdev_state_get_format(state, route->sink_pad, - route->sink_stream); - if (!fmt) - return -EINVAL; + route =3D &state->routing.routes[0]; =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, route->sink_pad, + route->sink_stream); + 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) { + const 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; 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; + } + } =20 - vcdt_part =3D VCDT_SEL_VC(priv->channel_vc[i]) | VCDT_VCDTN_EN | - VCDT_SEL_DTN_ON | VCDT_SEL_DT(format->datatype); + if (!source_entry) { + dev_err(priv->dev, + "Failed to find stream from source frame desc\n"); + return -EPIPE; + } + + vcdt_part =3D VCDT_SEL_VC(source_entry->bus.csi2.vc) | + VCDT_VCDTN_EN | VCDT_SEL_DTN_ON | + VCDT_SEL_DT(source_entry->bus.csi2.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; =20 - if (fmt->field =3D=3D V4L2_FIELD_ALTERNATE) - fld =3D FLD_DET_SEL(1) | FLD_FLD_EN(3) | FLD_FLD_EN(2) | - FLD_FLD_EN(1) | FLD_FLD_EN(0); + dev_dbg(priv->dev, "Input size (%ux%u%c)\n", + fmt->width, fmt->height, + fmt->field =3D=3D V4L2_FIELD_NONE ? 'p' : 'i'); + + /* Code is validated in set_fmt. */ + format =3D rcsi2_code_to_fmt(fmt->code); + + 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 Thu Dec 18 09:57:47 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 710313563EE; Tue, 16 Dec 2025 15:19:34 +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=1765898376; cv=none; b=jFzrlV1cv6LLafYqIUjnqTkSGqPxh55OHRWL8tqh6EX2E9Udvfy7YkZQvyauA/0sXH7DX+Ccuz3uAG8m5obzGm7MtFMfTzABjW40fcngnDjYlISl8G0a2vxA3FDw8P+RNipt0e0r4bOr9ygGbqRsGN9g6QesrkmbLR5WaHN50xM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898376; c=relaxed/simple; bh=G7vewekPSB7oSmo9S8uf6r8JWQlmethAcjjPRfWZ67E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ng4Sc6vz/ZG8YnYIYva+3r6Zbl9K2XECblO5jLeRv+N2gL79Ne5DEnUGfWZ6pnzOwatkry8dR7Ba9xOWfvaYVzD4KtqmlsnJQmUrkS0Ip+oodmw2rio43WRF6J2bXPmCy1ze9TpifcNfb8+vo+iBCqcl7qwyp7IIMDP6tn2PDQI= 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=N9W/Lnqn; 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="N9W/Lnqn" 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 B767E18C6; Tue, 16 Dec 2025 16:19:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898350; bh=G7vewekPSB7oSmo9S8uf6r8JWQlmethAcjjPRfWZ67E=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=N9W/LnqnpUIFCqwUwJbZE6bT7VKkawCmPJoCClGmQTyS+aZPYGC5GpNbSrbbxLyCC gormYPgbcKIhF0A0tAaCQQKUus1wyLEBqjMc/oD7V9GHzWF2WNSxmDIasSo8c/gR52 UIDhfq78uJQc+Q/l0tCightCoNQbYhkJQS1FJAk4= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:31 +0200 Subject: [PATCH v4 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: <20251216-rcar-streams-v4-14-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=4411; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=G7vewekPSB7oSmo9S8uf6r8JWQlmethAcjjPRfWZ67E=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhoQmkZAyhMgX0eyfIczoeEOvulPyragiWUJ f84fB5jfMKJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4aAAKCRD6PaqMvJYe 9b2VD/4oadDgDwoKICdOT9MrIoUTF/DOepId1aX2UB6tT5c4bOGK2WrXXCIw/QTl/ablvADNJK+ R5XgE0Ay3dBJk3rBBUDZSYuUnjpYgXk57h1rQJhb3mBpiotiwbnPmcOmzjNf7cUdNn75UZHhTKD uM50+I4oxRILnM6ZASgxPrzr3/t/BqAuHhqDICuvhWTwPZiI91yvIB+Huet1nw57XI7vjbIFLQo +x6rLz30P1hIBu/5T3r7ZV5pYa+uDGZi1RDkkTY/TTPLAiNdRGy8vGyJcJeb6PEPElz33tZN7Pa 5ASIM6a6vAh4kIx7npFykVSxp+AziO671w4rZxoQg/6zDU3NnxTNpENHUtLXrJE6kCXSCkGyvKP ksWWrWzJDf3JZx14QtN+dkJLORNbkRe1C9zc496YC9fRNkC7Vca7R4+2qv9G2ydSKuOHGAAkFqB 0099pBRcGHgHS9QWfJU59zjwAWkWGnfG5DwylhHtDLW7WF8/7WXNzSrQ6ez6TZuGkA3gDN2WXZ9 Nqwr6qDvdMcLsqT+tf00VDYSV7kcGoCgk5Tt9A1CPApttlpxnbHsfgfo8gtkKo8YB7q6U7RphY1 XKLeMOmEAUYGUVSFZyUQoPg32mk/8Kj2sZ9XGihq6uxkPt2C2P7Hnv5bI15QKhrVvp7B+WgOdrf 05sz3VtmFtazY1g== 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 --- drivers/media/platform/renesas/rcar-csi2.c | 75 ++++++++++++++++++++++----= ---- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/pla= tform/renesas/rcar-csi2.c index 93f25fb3b82e..51d381cc647f 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -702,6 +702,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; @@ -1887,10 +1898,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; @@ -1901,8 +1910,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) { if (priv->stream_count =3D=3D 0) rcsi2_stop(priv); @@ -1919,19 +1933,22 @@ 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); + u64 sink_streams; int ret; =20 - if (source_streams_mask !=3D 1) - return -EINVAL; - if (!priv->remote) return -ENODEV; =20 if (priv->stream_count =3D=3D 1) rcsi2_stop(priv); =20 + sink_streams =3D v4l2_subdev_state_xlate_streams(state, + RCAR_CSI2_SOURCE_VC0, + RCAR_CSI2_SINK, + &source_streams_mask); + ret =3D v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, - BIT_ULL(0)); + sink_streams); if (ret) return ret; =20 @@ -1970,6 +1987,34 @@ 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) { + 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) @@ -2045,6 +2090,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 @@ -2065,17 +2111,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 Thu Dec 18 09:57:47 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 3BE083557FE; Tue, 16 Dec 2025 15:19: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=1765898376; cv=none; b=DYelev38fiZ7ChAa5OQks0aTDzIVHk87CH7JDKjhgBiHfxkD2Tp49RUMCNkF7Pc5/2raJjRVJ/FgBXDvb909sgzL6TaOSBF6No87FcUrgmUG4eGu75XsNRqyk7P41SzZNlb7KReLZj8HRn72g2EkvjbGQjq4O6oU01aPUs6YRik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765898376; c=relaxed/simple; bh=embxSZM+qI3VcYvBtFLYUs5JuQl17I6GNG7H3/7KSKk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RTpb+y328F0cyg61Eby8PCUf6XbjytAxgal9YrnBIeFUaS4WSNHlVRc6AwQcS7jScMN7Zn6BOlzM1fsfuocxOLOIExum7mZtE4MyxN9OfXzI9gk1TJjrU7ENr0ONKoraVImqQHXTkiF2Zkdg/Qc5JNEIE7Z5QV/6eVi1fnZrGcM= 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=TBjQBq+4; 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="TBjQBq+4" 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 6F40F1039; Tue, 16 Dec 2025 16:19:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765898351; bh=embxSZM+qI3VcYvBtFLYUs5JuQl17I6GNG7H3/7KSKk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TBjQBq+4or6n/nSO+jEVj7LwZ9ksYdZgSJ2KN6f9tHO+ItDgpYPcjuHArsv1/Lovc DCdh5NfJ7aSLg9WUc+L3dq92u5K7rzd9y/KlL8dvW2NsO6M8My7SogHzTw1jI2xKi8 3Q58UttrH1sA8RozF6Jt5HpRQbjjfpwmkFOTRxLY= From: Tomi Valkeinen Date: Tue, 16 Dec 2025 17:18:32 +0200 Subject: [PATCH v4 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: <20251216-rcar-streams-v4-15-f28b4831cc67@ideasonboard.com> References: <20251216-rcar-streams-v4-0-f28b4831cc67@ideasonboard.com> In-Reply-To: <20251216-rcar-streams-v4-0-f28b4831cc67@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=3025; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=embxSZM+qI3VcYvBtFLYUs5JuQl17I6GNG7H3/7KSKk=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBpQXhoFnYlyJ+7FEPa75Ugjmyncb5cxJh5ELs0+ MEZyVbUzruJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaUF4aAAKCRD6PaqMvJYe 9cFPD/9wUvpNXft/YhboOyMy4dYdGX9ZLDab+34wpK+O5Ym0V1vywbTd+0hqIj+VLFI1gwukb3l /1T1O7QN92UstdTBduQmDyomxZgveYD8bsue7nYtxIfqhirGOk8KMqDCe8v2VU6Ets7GNQdhGiJ PSCMfOvnszQtCE/fkv0HrAJmfgwI+ofm6AbyEFyx5mJ9D+3s15r7ASkmzXfTesd2A4djkD2UwJF i876y7VwBtmx6Gvp0xty4/G6BROp47B18YiZwSaiEEjc5URX2xCEWUw7ZCSR0Sa3qnKc2WaNMhJ lSFX633FnuQ0k6lctGmSxHH8XMN1Orp8Knwgohx8g7Wl958WLaqwQZhSLHgGeDMXFBuM2VuGiC0 dvSuwDk61DMFE3QZHJWdz6PVIIph692C+6p2P0cqJu/NR66dpoT8zl00M8LWyVRCozJAQMABS7L zZFqZD+WFJvOmZqZz7TicJTBva8xE9FXBfG5quZUhpPN3xLy9HblclycqlUk3kVT69UWAPZNOIa fViUayiJ57ne9qta2aboqFQm3uej153tis0zTYh/XrWcaPCc9hbtUiEQiTtV2iGz7GKZHEF+W1g RBJaPJYy1mvMMfdoNR7GnjbCDNZPx2Z7D54BtMWFqurZ3QHyoWQTQQ2LvO1xxTrFQB7tTY14Ydj Oq0gnttRacVv0xA== 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 --- drivers/media/platform/renesas/rcar-isp/csisp.c | 39 +++++++++++++++++++++= ++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp/csisp.c b/drivers/medi= a/platform/renesas/rcar-isp/csisp.c index 18d63731b6c0..e4b9a6204815 100644 --- a/drivers/media/platform/renesas/rcar-isp/csisp.c +++ b/drivers/media/platform/renesas/rcar-isp/csisp.c @@ -340,6 +340,7 @@ static int risp_enable_streams(struct v4l2_subdev *sd, u64 source_streams_mask) { struct rcar_isp *isp =3D sd_to_isp(sd); + u64 sink_streams; int ret; =20 if (source_streams_mask !=3D 1) @@ -354,8 +355,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) { if (isp->stream_count =3D=3D 0) risp_stop(isp); @@ -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; int ret; =20 if (source_streams_mask !=3D 1) @@ -380,8 +387,12 @@ static int risp_disable_streams(struct v4l2_subdev *sd, if (!isp->remote) return -ENODEV; =20 - ret =3D 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); + + ret =3D v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, sink_st= reams); if (ret) return ret; =20 @@ -423,12 +434,34 @@ 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; + + 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