From nobody Wed Oct 8 14:20:58 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 936BC13CF9C; Fri, 27 Jun 2025 01:06:58 +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=1750986420; cv=none; b=KbtDvDBzU5RdUIA3zxMVYckBvQT/NaH5VGcRKorIz4+bxKsItb6rAWi1adrtyyizrt6hnR5DI9B7qPiiQTU3re5MPmvQ2RSwMNRfIseMaAyaV4Q8raADFeGzKrzsYCVL5jTAW5yzVX2NpgzCi+4sduTKuxI2EMewl5ioN5wleLI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750986420; c=relaxed/simple; bh=Zq7v0gOeQXkQkde+V7LMQ81ffBA100iMe4A2PEOeEwk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XVFh6MhFoDFgJSKyKlWL8n3nsNpCdEkdQ78djjjyBjwb0B64bHGs9U2J30BE+46LBtfNWP+d/Ut0+NKvSUGtEzqCJEQOY4hKF2ellFv064ak9P+4M9KypZ4kHO0ZG2uDr8xjVrYZr7LiTrPVDt5P4PYaNtkp8iO9GPwcTj4OyTo= 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=XK3Uf5id; 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="XK3Uf5id" Received: from mail.ideasonboard.com (unknown [IPv6:2601:602:8100:c320::cf66]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 869F7819; Fri, 27 Jun 2025 03:06:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1750986397; bh=Zq7v0gOeQXkQkde+V7LMQ81ffBA100iMe4A2PEOeEwk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XK3Uf5idArEWhABvGLbM6eTYKIJc51z93QzGx1GtUBmD5m0Cze4QklQCYeZQYzWwA Ze46fzqGUP5glsZhflA2nlTCExoyGjsnYiu377ozSjKVv16n/1eOSIJS30Zh/bZs1c iZg0kKLl7+XnjqAbS8TeCW1bH4Xx+/dVvKGY71yg= From: Jai Luthra Date: Thu, 26 Jun 2025 18:06:06 -0700 Subject: [PATCH v3 1/6] media: ti: j721e-csi2rx: Use devm_of_platform_populate 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: <20250626-probe_fixes-v3-1-83e735ae466e@ideasonboard.com> References: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> In-Reply-To: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> To: Mauro Carvalho Chehab , Hans Verkuil , Tomi Valkeinen , Sakari Ailus , Maxime Ripard Cc: Devarsh Thakkar , Rishikesh Donadkar , Vaishnav Achath , Changhuang Liang , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , stable@vger.kernel.org, Yemike Abhilash Chandra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1261; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=Zq7v0gOeQXkQkde+V7LMQ81ffBA100iMe4A2PEOeEwk=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBoXe6i3eBfV9htvJJmPj7KXwDePE15oiiMykWW4 JO70cbSwamJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaF3uogAKCRBD3pH5JJpx RdJwD/9z1rTJBlcbsqs7y/ph5e6mapggVbhuQaDn7CT5U5zo3k0GgsJbY8U3c4bICfJZ4aIRgoa dcfe0cJgoAr/h76HLyplUzqEm0HvnxXJ0ne/2R6a7lAu6yibe9TkXTpCQ1+3Tvv08JpH2gx6sxT tN1s34CwEa30aCZY1hl86Xi9XijsH05vtgytbMAk7zIKX4wlZlkJ6GTH2OGFViW5R5cohOLoX5t 3OhkKheXqdsFQLE8pMKo6QIPPjFr00nD6aX4tM0k+pcFthig9gZkyatZI+fGUMkqZoccvq4f4GC Hf5Fqr6MsMhQj5Se8mbGL2gebNy6yyiu1sSpbYituDdoolEOvoHIkV0MRleMdSnBYJZCRsn3Xby 3k9OZYJ5kqmnhIx8iFJGLu/qTCu8ANJGtzjcQSJIFcIXeRrgzXwg0yvaogatZVJyxae7co8O6SF /TXvG3uLI4lGVwukzsbPf3hScTl/lgadBUHNhz7Qe7atf7ajbp2zctJr9uDIijMp04pzYl1uDGV 3deFhI9ARlu2rXIChBwUPQTlqKX31YmSL9Z2sBHmmWL0G75+57uctsw6ZirI04abHtJT6CKry/t DBuBFdQTD2vIM7QwVrSqh0iE8zLcbUQTsP3bIj43Wij7c3QePvfvnhb5CnpFtygHcrEbuQzcAiq jhuPte6CAr//S3A== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 Ensure that we clean up the platform bus when we remove this driver. This fixes a crash seen when reloading the module for the child device with the parent not yet reloaded. Fixes: b4a3d877dc92 ("media: ti: Add CSI2RX support for J721E") Cc: stable@vger.kernel.org Reviewed-by: Devarsh Thakkar Tested-by: Yemike Abhilash Chandra (on SK-AM68) Signed-off-by: Jai Luthra Reviewed-by: Rishikesh Donadkar Tested-by: Rishikesh Donadkar --- drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c b/driver= s/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c index 6412a00be8eab89548950dd21b3b3ec02dafa5b4..a066024bf745450e2ba01d06c0f= ec4e6bdbfa97e 100644 --- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c +++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c @@ -1118,7 +1118,7 @@ static int ti_csi2rx_probe(struct platform_device *pd= ev) if (ret) goto err_vb2q; =20 - ret =3D of_platform_populate(csi->dev->of_node, NULL, NULL, csi->dev); + ret =3D devm_of_platform_populate(csi->dev); if (ret) { dev_err(csi->dev, "Failed to create children: %d\n", ret); goto err_subdev; --=20 2.49.0 From nobody Wed Oct 8 14:20:58 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 C4C4F1632C8; Fri, 27 Jun 2025 01:07:02 +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=1750986424; cv=none; b=jdFrSVwwMx/QV7Vnw4scGrWyXsENvpRjWCixk2AIls9EzLpCpLmmtpd+87TKzIhbAb4gfilJmr4GzNA/UoD/6ZIdfJWbYEr0zrXUuESPyJdbf1bOglda7hCSICjnVKhwrSJVX+n58wWbzXz5I33cI+8TYnOO79ucSy4XbEEjxEg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750986424; c=relaxed/simple; bh=2vWSNHuUpMRiryGCLy/F2v3+8H8OmoT203YQpwm3I+g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Hyn6C+4nLXJf2GN2L8SJFLjlc07lirEqd62vqsrsWLCnvV2ouWZGn6DKw3FOApoQi+DcxJt0CxWJqezzYemquZ+kIWJvJborxEij8Kt2I55mXjNOSTewgrWaHwh3NyNd5wut1pTP1S6moDbeDqra4ExtJJvDV/5xTenQvY6+/Po= 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=mRwQgX2B; 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="mRwQgX2B" Received: from mail.ideasonboard.com (unknown [IPv6:2601:602:8100:c320::cf66]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 0C53B73B; Fri, 27 Jun 2025 03:06:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1750986402; bh=2vWSNHuUpMRiryGCLy/F2v3+8H8OmoT203YQpwm3I+g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mRwQgX2BWdSpaqBjp7ZYA5bsodaOmpgAsYJJXc70PTNwvcE4fpbono7b3Izb4Ur5p ptMtO6DJ6TnxX1RqYHHku+tkLBkBx2gaC69L+uRMElrEY1EjfZEqSPwhr1iv7MHwHH TabNBnuZlUzolXadefLu7OxYe5YarZXxO6PunPb0= From: Jai Luthra Date: Thu, 26 Jun 2025 18:06:07 -0700 Subject: [PATCH v3 2/6] media: ti: j721e-csi2rx: Use fwnode_get_named_child_node 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: <20250626-probe_fixes-v3-2-83e735ae466e@ideasonboard.com> References: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> In-Reply-To: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> To: Mauro Carvalho Chehab , Hans Verkuil , Tomi Valkeinen , Sakari Ailus , Maxime Ripard Cc: Devarsh Thakkar , Rishikesh Donadkar , Vaishnav Achath , Changhuang Liang , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , Yemike Abhilash Chandra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2001; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=2vWSNHuUpMRiryGCLy/F2v3+8H8OmoT203YQpwm3I+g=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBoXe6jMDU5e4a3ftkFw1Z0Dxh/M3yGgtslSRoeX 5BwE3TR7QeJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaF3uowAKCRBD3pH5JJpx RUhQEACfy7zPosiVhXvRkLC2J99M78ZqE/JCssfhnOi1V3k5rkZPJKGOThJXgRw9543ncb5XzxO h6Z3+gDSkiKcZvmOt6BxfWuAXYgEbbyKoKJUZa06L9ZQAJzougI3nC/saINEh3RdlnHR9lC5Fd5 T8OmWYx8ymO0Qvbhln1TEV8KoqZk3hcUoPz38wJ5hX/94eVxa9HeUDympK56oRLn0zt7iOkJr2O yridqTeJ+GylgXo1XQBet113khNKRHrqYJq/K/plhkcpyF5eKajoiL5SbT/3t/oyhNbpzY9dJOa dNurwxKVG3hEjRQ6s+kiOeqRR9qkmcZiBGgxj90FG1U8G+TZ10Dj/XKDXMoyqFd4yg5c1wn9y1R 9f1bmhb5lXHG/6hdqlLfNsVRshFzxUPsrlqsrb0YSMSKivirReuFWY9lrVDeF948F3wIzlfeR8j gRQ8MIBgsFrEACkniJbhyIQbWbpx1M1e4zJC57jF7biq0dsH8UDv/tY83S9yQ9hUVIEBd2pBxCM B7fNA9/0ias0qIqJypK+WpVOhX/NidXhLKdTBnxoR8xwczFFbJg+Ydl6vf/0/U/FdDgdnt5DxOE kMZB+TY/xvm3fiBES1NiBpJYiIj3+i6jAG/qyoVxdZjfvhM7FXxJlb4erf+h62v/kBWTI6QuNPp tgr2RkGmWeutq1Q== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 Simplify notifier registration logic. Instead of first getting the device node, get the fwnode of the child directly. Reviewed-by: Devarsh Thakkar Tested-by: Yemike Abhilash Chandra (on SK-AM68) Signed-off-by: Jai Luthra Reviewed-by: Rishikesh Donadkar Tested-by: Rishikesh Donadkar --- drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c | 19 +++++++++------= ---- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c b/driver= s/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c index a066024bf745450e2ba01d06c0fec4e6bdbfa97e..6d406925e092660cb67c04cc2a7= e1e10c14e295e 100644 --- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c +++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c @@ -13,6 +13,7 @@ #include #include #include +#include =20 #include #include @@ -450,25 +451,23 @@ static int ti_csi2rx_notifier_register(struct ti_csi2= rx_dev *csi) { struct fwnode_handle *fwnode; struct v4l2_async_connection *asc; - struct device_node *node; int ret; =20 - node =3D of_get_child_by_name(csi->dev->of_node, "csi-bridge"); - if (!node) + fwnode =3D fwnode_get_named_child_node(csi->dev->fwnode, "csi-bridge"); + if (!fwnode) return -EINVAL; =20 - fwnode =3D of_fwnode_handle(node); - if (!fwnode) { - of_node_put(node); - return -EINVAL; - } - v4l2_async_nf_init(&csi->notifier, &csi->v4l2_dev); csi->notifier.ops =3D &csi_async_notifier_ops; =20 asc =3D v4l2_async_nf_add_fwnode(&csi->notifier, fwnode, struct v4l2_async_connection); - of_node_put(node); + /* + * Calling v4l2_async_nf_add_fwnode grabs a refcount, + * so drop the one we got in fwnode_get_named_child_node + */ + fwnode_handle_put(fwnode); + if (IS_ERR(asc)) { v4l2_async_nf_cleanup(&csi->notifier); return PTR_ERR(asc); --=20 2.49.0 From nobody Wed Oct 8 14:20:58 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 5E3141632C8; Fri, 27 Jun 2025 01:07:07 +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=1750986428; cv=none; b=LTjm2Kt/6WN23JcDG8QlEFCf2cHwBEP6z5QrbHDBIEDUitGnbY3GkB8w36CuxnqF8z1m0cSB9jSrYlcgxl5s72UHvxk2CeLlgMLWxg3xqsNdt60bESxWg9/Lj3fetaIoLcc0n4B1bpJK7MTnrTPspi94i8rkHdsZKYrwmifUTYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750986428; c=relaxed/simple; bh=uIQBuDztOh0KbG5p5tRdVxlHuwJDscliEGyVXWCao5U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=taggMfJCeHu+ZF46kuUp2FtNR7Nhe+L9QyYxqjcmhquDoOimwofBmU2c8z/haMqFb4dTlCVmq4T2Z125eT0nW0YkvY1Exoer5mlXgH26SsKZFRK8lgs4TjoNNLmocvAS6ecb2hNQG9EsaFWvM1pVcPwxtqYdQ22C2xn0w7+zgLs= 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=H5vdS7SM; 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="H5vdS7SM" Received: from mail.ideasonboard.com (unknown [IPv6:2601:602:8100:c320::cf66]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8B88B819; Fri, 27 Jun 2025 03:06:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1750986406; bh=uIQBuDztOh0KbG5p5tRdVxlHuwJDscliEGyVXWCao5U=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=H5vdS7SMyFIeRgwY7yElpVlD+Hurk6FBJr7/fvIDrfxUX9KI58qpN30+H28tJ+j4x DtMbtuU8+3wHXyABDeudusxysPEB915VPkVurdctdj21Gn6hKzmbSL/ckb/T2kdPIX iS+JWCfGAdMfXCfewC+wzgB+XVPaeiVhgVK9GYhA= From: Jai Luthra Date: Thu, 26 Jun 2025 18:06:08 -0700 Subject: [PATCH v3 3/6] media: ti: j721e-csi2rx: Fix source subdev link creation 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: <20250626-probe_fixes-v3-3-83e735ae466e@ideasonboard.com> References: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> In-Reply-To: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> To: Mauro Carvalho Chehab , Hans Verkuil , Tomi Valkeinen , Sakari Ailus , Maxime Ripard Cc: Devarsh Thakkar , Rishikesh Donadkar , Vaishnav Achath , Changhuang Liang , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , stable@vger.kernel.org, Yemike Abhilash Chandra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2038; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=uIQBuDztOh0KbG5p5tRdVxlHuwJDscliEGyVXWCao5U=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBoXe6k5GUDpmaVP5y6jVnavf4FTrqWgHNw6iU+c AHBbfxF9lqJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaF3upAAKCRBD3pH5JJpx RSSSD/44ZBfFl4TvHgDmJnVdlWv7Ys4W4HgmXm+7JEYDNGo8Kzw5NVNmY7oYJlL3ZWZeXFP1Ma5 Ia+Bh6njY8hh9s/2Ev2IcSOkPSBWzaw6GVmX2ix7ioygDoVaIh6f0YRrlFuiDV+RbUgzyqfbf85 sjr+Wiu3e8EoK0WtqeJmIq+jGvpCFVam8q68FhiJTJ4XzHoOMgFpIottXfJipVwKQ6u2fQXWbaw wN6V+WZ4w/RyRfzgGRvtwW+oOyn9bkYN1PbpqBmZAK7Zw9Euh6XlT7t4o98X0fj1FBbrP6XO+ar 3hVAJ2vAZAA/maoGd4sHHDYVvQcyNvabzo4sbCjGtjp2T2O4oKwu2GspNjfjsxTzX1B8dmjJXo5 aMjusopIhzKOgdwcJmpxuV4aNaPAo8o9o7QT1d/1v/gXHvu+FAdxe1RoSH7k/mnhx4khJFWGyGG zLEYQVzCS5tsvKSCF3bb/9vYV5iAPH2sXYNlGz6zSPuL5gED1H/DAUD69WipfSzfgzF681AzrJs kN2jNXUc2Iyh21GIeu2bZp+bXWDlLaoNpkcTrzfF/DdgNDtRyBpMUM7TxwKJu0n3GMRMYk1Gufd atkRRDLHZSIMKpyviEG8mPIM7KlSNV8QDvxw6RCi3KhVKH1zuvxUtCKew1ST7QXwCa/y5smxWTd IOda6twekkVzvmQ== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 We don't use OF ports and remote-endpoints to connect the CSI2RX bridge and this device in the device tree, thus it is wrong to use v4l2_create_fwnode_links_to_pad() to create the media graph link between the two. It works out on accident, as neither the source nor the sink implement the .get_fwnode_pad() callback, and the framework helper falls back on using the first source and sink pads to create the link between them. Instead, manually create the media link from the first source pad of the bridge to the first sink pad of the J721E CSI2RX. Fixes: b4a3d877dc92 ("media: ti: Add CSI2RX support for J721E") Cc: stable@vger.kernel.org Reviewed-by: Devarsh Thakkar Tested-by: Yemike Abhilash Chandra (on SK-AM68) Signed-off-by: Jai Luthra Reviewed-by: Rishikesh Donadkar Tested-by: Rishikesh Donadkar --- drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c b/driver= s/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c index 6d406925e092660cb67c04cc2a7e1e10c14e295e..ad51d033b6725426550578bdac1= bae8443458f13 100644 --- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c +++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c @@ -53,6 +53,8 @@ #define DRAIN_TIMEOUT_MS 50 #define DRAIN_BUFFER_SIZE SZ_32K =20 +#define CSI2RX_BRIDGE_SOURCE_PAD 1 + struct ti_csi2rx_fmt { u32 fourcc; /* Four character code. */ u32 code; /* Mbus code. */ @@ -427,8 +429,9 @@ static int csi_async_notifier_complete(struct v4l2_asyn= c_notifier *notifier) if (ret) return ret; =20 - ret =3D v4l2_create_fwnode_links_to_pad(csi->source, &csi->pad, - MEDIA_LNK_FL_IMMUTABLE | MEDIA_LNK_FL_ENABLED); + ret =3D media_create_pad_link(&csi->source->entity, CSI2RX_BRIDGE_SOURCE_= PAD, + &vdev->entity, csi->pad.index, + MEDIA_LNK_FL_IMMUTABLE | MEDIA_LNK_FL_ENABLED); =20 if (ret) { video_unregister_device(vdev); --=20 2.49.0 From nobody Wed Oct 8 14:20:58 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 9CC501991CA; Fri, 27 Jun 2025 01:07:11 +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=1750986433; cv=none; b=C5QOhX9ufTLdbYFoAvATZcNe15ultMe7dcnPBWwmY/zy+zEK152XH1HiWxVE9+9iofvb2ucBRrLCkwb/pASBH5BiTwBHHpFgitXmYCPnTP1HPJBHrcZv/4gpBmeckbszC02dq1d0fRJtzMvT7fefhZKJqAZiQuEffHPGdxq3skU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750986433; c=relaxed/simple; bh=SQdp7YKEv7n75y2nsTB+qjQFaLoOz3nxRazSiLXyvo4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=acWlKSfW487avblRBEk6FNJsEOf8kQaYbJarO6xtrgR6zRp1iANbfA3GDnFWwUfMsF3QksIlrVc0bFtW2zfLLas2aqzZi3PKErXozTe11NbbNkKZdHrJ5akO7noOMqU7txe1vm9MQRZBsqt/7blAGNjyYK46a7BPmQtkS5ofJ50= 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=NPBrF11L; 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="NPBrF11L" Received: from mail.ideasonboard.com (unknown [IPv6:2601:602:8100:c320::cf66]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D87CF73B; Fri, 27 Jun 2025 03:06:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1750986411; bh=SQdp7YKEv7n75y2nsTB+qjQFaLoOz3nxRazSiLXyvo4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NPBrF11LvyKCVyuQtjT88mFI5TGywd9ln9HeuSJevAEKRmD4a/yn8og+I4D5YZNN3 g3UkhQEXRiHt5i8EG8c3nerAn5wtdYrOJeryovrFiy/aF6FSR9u25TrQ1IW+ZBDgbw n67wnFQE3Mjg6yN7HV02eQpx9bUVMTd7vuss7T+8= From: Jai Luthra Date: Thu, 26 Jun 2025 18:06:09 -0700 Subject: [PATCH v3 4/6] media: cadence: csi2rx: Implement get_fwnode_pad 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: <20250626-probe_fixes-v3-4-83e735ae466e@ideasonboard.com> References: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> In-Reply-To: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> To: Mauro Carvalho Chehab , Hans Verkuil , Tomi Valkeinen , Sakari Ailus , Maxime Ripard Cc: Devarsh Thakkar , Rishikesh Donadkar , Vaishnav Achath , Changhuang Liang , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , Yemike Abhilash Chandra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1135; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=SQdp7YKEv7n75y2nsTB+qjQFaLoOz3nxRazSiLXyvo4=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBoXe6l/9ORJZOjvFHRBS5vLdMCCPYNcGRhyMHr8 GEHKywQC3SJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaF3upQAKCRBD3pH5JJpx RXN7EACwnDJlcdj+YH1MdfyP/CMhQYjLkpSZx9RuU/D+EoMetirM030pRdL71jXvnwU21baJ/Dw pUwI37v/eJ4zkO4E8Fle48QDWIM3dMHYJHPbpMs5nNAFQ8KeZNFbJzENMWckbxMAzgCR9dI246V 5CM6XM+4gqWbSNU/MeTnzY7buwbhoFk8bfcSXxEQJKZ+AzQ1ZpjItOtaKHFWklXUP14QMAH5WMg M+kLkVBBUnw6bK04hmHLgs1EAHIf3FSpM3Cz4n2Q7kaNssdEYEopMY3SDzY/PiqV6AG5SId2ZDZ l08nHHlJkKM8JKmfWrDPtsvLVPW2c25wTnyO3GCvd/oHUOn+GjUmfN+VoAzb36F8e43GsprmUTj 8VO4/VXSDJKAputrDmgHz8HmrAC7VBk1X9RTvy49U2gbp8EJW2KYd5r/v5s6ILY0Y6ryDOccLwy WV1CxB0yLWcmkkZdoA1q39pGcu9u3bYfW7fJ398XcWi/Bo449w/l+edI7dGfw2jjQMfPUiT57HG 8n6w8YEoo8Z8OYBrzrx62ZUZAWZ03SmHqHn4vBrwrwW9EgfLuCzNstpba2W3E7KMk3L0wiztIb7 E+AqDTwxwknF3vNNrXso0iPRJ1479b29mJRujaBPkzomQKAD/5Xr7jRw3G4IAUAEWcITBHyW13m YlEZXu4FpqjB2bA== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 Use v4l2_subdev_get_fwnode_pad_1_to_1() as the get_fwnode_pad operation. Cadence CSI2RX maps port numbers and pad indices 1:1. Reviewed-by: Changhuang Liang Reviewed-by: Devarsh Thakkar Tested-by: Yemike Abhilash Chandra (on SK-AM68) Signed-off-by: Jai Luthra Reviewed-by: Rishikesh Donadkar Tested-by: Rishikesh Donadkar --- drivers/media/platform/cadence/cdns-csi2rx.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/p= latform/cadence/cdns-csi2rx.c index cebcae196eeccc65548d2c8e14bcba4799415beb..608298c72462031515d9ad01c6b= 267bf7375a5bf 100644 --- a/drivers/media/platform/cadence/cdns-csi2rx.c +++ b/drivers/media/platform/cadence/cdns-csi2rx.c @@ -479,6 +479,7 @@ static const struct v4l2_subdev_internal_ops csi2rx_int= ernal_ops =3D { =20 static const struct media_entity_operations csi2rx_media_ops =3D { .link_validate =3D v4l2_subdev_link_validate, + .get_fwnode_pad =3D v4l2_subdev_get_fwnode_pad_1_to_1, }; =20 static int csi2rx_async_bound(struct v4l2_async_notifier *notifier, --=20 2.49.0 From nobody Wed Oct 8 14:20:58 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 B70FA149C6F; Fri, 27 Jun 2025 01:07:15 +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=1750986439; cv=none; b=XI2vsAd+qKmRoWNKyXU1xYwYWWvj7mgCvzgB+QN/1qiMrKKuRO4L9M3G85vbt7zMCQGbbCK/7QWGAdA+z29GFF2BBx2BdtfTWLxVhiMpkLgTakPi8XqKUDlvja5fXyz2zZGi7RFV9ZEf806sEfDNhDOIlviFKr4OYlPEpccab7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750986439; c=relaxed/simple; bh=JYZxRd0pBC2id3BgE5miqwLdMjIE0vJMuRQlJq33F+Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pvrG44U9QGySBS/vWx1W1zSjwhezDq29xPPxN/SIcD1FixHhQjnR2mmg1/uhIxlwo3PimSTx/dK7rz6z4mKd17RYsx8E8SYRaph9u7zrlgD224fRYKrRrALJDIixaVsgo2qugbyITctMbaJ/yRV8q4J6nsNPYtB7fpfhegxnhy0= 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=Q/A69MPp; 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="Q/A69MPp" Received: from mail.ideasonboard.com (unknown [IPv6:2601:602:8100:c320::cf66]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DFD7A6BE; Fri, 27 Jun 2025 03:06:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1750986415; bh=JYZxRd0pBC2id3BgE5miqwLdMjIE0vJMuRQlJq33F+Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Q/A69MPpRZyb6TpbTtvf6GK/y6EOkF3QB56WIPsHDHeUwJ1Hf0K2h2EHFMIa5Cnk2 kc84O9Q9fQcaDOz0zA1I/HC5yLjhMysLaSwaB1ZuuMO8R1YiWfeEWu5iycdih5AT15 um6eyru/f4OEF5tx1+EdeRpmG9GFDLIeMSc7ms7A= From: Jai Luthra Date: Thu, 26 Jun 2025 18:06:10 -0700 Subject: [PATCH v3 5/6] media: cadence: cdns-csi2rx: Support multiple pixels per clock cycle 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: <20250626-probe_fixes-v3-5-83e735ae466e@ideasonboard.com> References: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> In-Reply-To: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> To: Mauro Carvalho Chehab , Hans Verkuil , Tomi Valkeinen , Sakari Ailus , Maxime Ripard Cc: Devarsh Thakkar , Rishikesh Donadkar , Vaishnav Achath , Changhuang Liang , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , Yemike Abhilash Chandra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8107; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=JYZxRd0pBC2id3BgE5miqwLdMjIE0vJMuRQlJq33F+Y=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBoXe6m9kDJIUTferUglO4kND7vkObMb0+Rl/6Ej JNr92fAQriJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaF3upgAKCRBD3pH5JJpx RcQZEADJwOQ7cU6vPZw1z3AcqM0nnD2W30PBOpQNmW9ThEVUXRE4ANGHc7KwkN/ASqECALL8WDt WwAyZEd2uLLWeFdkdBEx6vLHPk4zzbkhtye2FSWiJc+cHtKbJfzPuEK7QzEDnDnOVX2xewDfEUd 5/lqNc3IWVgyiDqhVTDqqDHMCrPR1zrsk2D3H9Qs9gruYwPZnswaxzYMm/YXQuYL/uOTvgvTEci 1ayiNBPmcIdSLEkDtulR208fTqAwEcNHB6Gd2SuxKtmWSViHeYugagefr1YBsfELzfFnWS/3V42 i50R0ZKcUbKgY8B0m5dZ9IFyh0bEZ9qwXz7qMHQERBKrnFmrTxnAmlSNLLD4gEdXg7jGc4BMI41 vAn5LxHv5x8AwxaCmp7aOdfcn9ZA2gU7vI2fUN3f2arjjANq+KjTpFfNVC8d8VDnATynMSznfCH MsJufz48ZiTw0VAFwr8tfOxV309972RH4PtELc/96CySmkTK6csDKTmAk3ovkKCbM8uhumczlf1 tZ2WqtPLoMT8c6EYH7tp2lMDh5HqHO7LH7sWQGQoQv6XHGqg9aNGVsi7+h4y/reJmoHVWtBS3PB eLjuFZA1uBckB8j/QNntrs72//BGmbCb6naUY8DCcB2RG1D2Fpz2/oRXG9YyXdh7FJxUyIxFm+J Df2evm0DXEnKsug== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 The output pixel interface is a parallel bus (32 bits), which supports sending multiple pixels (1, 2 or 4) per clock cycle for smaller pixel widths like RAW8-RAW16. Dual-pixel and Quad-pixel modes can be a requirement if the export rate of the Cadence IP in Single-pixel mode maxes out before the maximum supported DPHY-RX frequency, which is the case with TI's integration of this IP [1]. So, we export a function that lets the downstream hardware block request a higher pixel-per-clock on a particular output pad. We check if we can support the requested pixels per clock given the known maximum for the currently configured format. If not, we set it to the highest feasible value and return this value to the caller. [1] Section 12.6.1.4.8.14 CSI_RX_IF Programming Restrictions of AM62 TRM Link: https://www.ti.com/lit/pdf/spruj16 Tested-by: Yemike Abhilash Chandra (on SK-AM68) Signed-off-by: Jai Luthra Reviewed-by: Rishikesh Donadkar Tested-by: Rishikesh Donadkar --- Changes in v3: - Move cdns-csi2rx header to include/media/cadence and update MAINTAINERS file - Export symbol from cdns-csi2rx.c to be used only through the j721e-csi2rx.c module namespace - Other minor fixes suggested by Sakari --- MAINTAINERS | 1 + drivers/media/platform/cadence/cdns-csi2rx.c | 73 +++++++++++++++++++++---= ---- include/media/cadence/cdns-csi2rx.h | 19 ++++++++ 3 files changed, 75 insertions(+), 18 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index a92290fffa163f9fe8fe3f04bf66426f9a894409..10600895fd5c8fdc8cc86bb86ff= 003ffd04ab8f0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -5251,6 +5251,7 @@ S: Maintained F: Documentation/devicetree/bindings/media/cdns,*.txt F: Documentation/devicetree/bindings/media/cdns,csi2rx.yaml F: drivers/media/platform/cadence/cdns-csi2* +F: include/media/cadence/cdns-csi2* =20 CADENCE NAND DRIVER L: linux-mtd@lists.infradead.org diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/p= latform/cadence/cdns-csi2rx.c index 608298c72462031515d9ad01c6b267bf7375a5bf..819f43f1b3a09f3ccd6e944345c= 56241069bc8c4 100644 --- a/drivers/media/platform/cadence/cdns-csi2rx.c +++ b/drivers/media/platform/cadence/cdns-csi2rx.c @@ -5,6 +5,7 @@ * Copyright (C) 2017 Cadence Design Systems Inc. */ =20 +#include #include #include #include @@ -17,6 +18,7 @@ #include #include =20 +#include #include #include #include @@ -52,7 +54,9 @@ #define CSI2RX_STREAM_DATA_CFG_VC_SELECT(n) BIT((n) + 16) =20 #define CSI2RX_STREAM_CFG_REG(n) (CSI2RX_STREAM_BASE(n) + 0x00c) -#define CSI2RX_STREAM_CFG_FIFO_MODE_LARGE_BUF (1 << 8) +#define CSI2RX_STREAM_CFG_FIFO_MODE_LARGE_BUF BIT(8) +#define CSI2RX_STREAM_CFG_NUM_PIXELS_MASK GENMASK(5, 4) +#define CSI2RX_STREAM_CFG_NUM_PIXELS(n) ((n) >> 1U) =20 #define CSI2RX_LANES_MAX 4 #define CSI2RX_STREAMS_MAX 4 @@ -68,7 +72,10 @@ enum csi2rx_pads { =20 struct csi2rx_fmt { u32 code; + /* width of a single pixel on CSI-2 bus */ u8 bpp; + /* max pixels per clock supported on output bus */ + u8 max_pixels; }; =20 struct csi2rx_priv { @@ -90,6 +97,7 @@ struct csi2rx_priv { struct reset_control *pixel_rst[CSI2RX_STREAMS_MAX]; struct phy *dphy; =20 + u8 num_pixels[CSI2RX_STREAMS_MAX]; u8 lanes[CSI2RX_LANES_MAX]; u8 num_lanes; u8 max_lanes; @@ -106,22 +114,22 @@ struct csi2rx_priv { }; =20 static const struct csi2rx_fmt formats[] =3D { - { .code =3D MEDIA_BUS_FMT_YUYV8_1X16, .bpp =3D 16, }, - { .code =3D MEDIA_BUS_FMT_UYVY8_1X16, .bpp =3D 16, }, - { .code =3D MEDIA_BUS_FMT_YVYU8_1X16, .bpp =3D 16, }, - { .code =3D MEDIA_BUS_FMT_VYUY8_1X16, .bpp =3D 16, }, - { .code =3D MEDIA_BUS_FMT_SBGGR8_1X8, .bpp =3D 8, }, - { .code =3D MEDIA_BUS_FMT_SGBRG8_1X8, .bpp =3D 8, }, - { .code =3D MEDIA_BUS_FMT_SGRBG8_1X8, .bpp =3D 8, }, - { .code =3D MEDIA_BUS_FMT_SRGGB8_1X8, .bpp =3D 8, }, - { .code =3D MEDIA_BUS_FMT_Y8_1X8, .bpp =3D 8, }, - { .code =3D MEDIA_BUS_FMT_SBGGR10_1X10, .bpp =3D 10, }, - { .code =3D MEDIA_BUS_FMT_SGBRG10_1X10, .bpp =3D 10, }, - { .code =3D MEDIA_BUS_FMT_SGRBG10_1X10, .bpp =3D 10, }, - { .code =3D MEDIA_BUS_FMT_SRGGB10_1X10, .bpp =3D 10, }, - { .code =3D MEDIA_BUS_FMT_RGB565_1X16, .bpp =3D 16, }, - { .code =3D MEDIA_BUS_FMT_RGB888_1X24, .bpp =3D 24, }, - { .code =3D MEDIA_BUS_FMT_BGR888_1X24, .bpp =3D 24, }, + { .code =3D MEDIA_BUS_FMT_YUYV8_1X16, .bpp =3D 16, .max_pixels =3D 2, }, + { .code =3D MEDIA_BUS_FMT_UYVY8_1X16, .bpp =3D 16, .max_pixels =3D 2, }, + { .code =3D MEDIA_BUS_FMT_YVYU8_1X16, .bpp =3D 16, .max_pixels =3D 2, }, + { .code =3D MEDIA_BUS_FMT_VYUY8_1X16, .bpp =3D 16, .max_pixels =3D 2, }, + { .code =3D MEDIA_BUS_FMT_SBGGR8_1X8, .bpp =3D 8, .max_pixels =3D 4, }, + { .code =3D MEDIA_BUS_FMT_SGBRG8_1X8, .bpp =3D 8, .max_pixels =3D 4, }, + { .code =3D MEDIA_BUS_FMT_SGRBG8_1X8, .bpp =3D 8, .max_pixels =3D 4, }, + { .code =3D MEDIA_BUS_FMT_SRGGB8_1X8, .bpp =3D 8, .max_pixels =3D 4, }, + { .code =3D MEDIA_BUS_FMT_Y8_1X8, .bpp =3D 8, .max_pixels =3D 4, }, + { .code =3D MEDIA_BUS_FMT_SBGGR10_1X10, .bpp =3D 10, .max_pixels =3D 2, }, + { .code =3D MEDIA_BUS_FMT_SGBRG10_1X10, .bpp =3D 10, .max_pixels =3D 2, }, + { .code =3D MEDIA_BUS_FMT_SGRBG10_1X10, .bpp =3D 10, .max_pixels =3D 2, }, + { .code =3D MEDIA_BUS_FMT_SRGGB10_1X10, .bpp =3D 10, .max_pixels =3D 2, }, + { .code =3D MEDIA_BUS_FMT_RGB565_1X16, .bpp =3D 16, .max_pixels =3D 1, }, + { .code =3D MEDIA_BUS_FMT_RGB888_1X24, .bpp =3D 24, .max_pixels =3D 1, }, + { .code =3D MEDIA_BUS_FMT_BGR888_1X24, .bpp =3D 24, .max_pixels =3D 1, }, }; =20 static const struct csi2rx_fmt *csi2rx_get_fmt_by_code(u32 code) @@ -276,7 +284,9 @@ static int csi2rx_start(struct csi2rx_priv *csi2rx) =20 reset_control_deassert(csi2rx->pixel_rst[i]); =20 - writel(CSI2RX_STREAM_CFG_FIFO_MODE_LARGE_BUF, + writel(CSI2RX_STREAM_CFG_FIFO_MODE_LARGE_BUF | + FIELD_PREP(CSI2RX_STREAM_CFG_NUM_PIXELS_MASK, + csi2rx->num_pixels[i]), csi2rx->base + CSI2RX_STREAM_CFG_REG(i)); =20 /* @@ -458,6 +468,33 @@ static int csi2rx_init_state(struct v4l2_subdev *subde= v, return csi2rx_set_fmt(subdev, state, &format); } =20 +int cdns_csi2rx_negotiate_ppc(struct v4l2_subdev *subdev, unsigned int pad, + u8 *ppc) +{ + struct csi2rx_priv *csi2rx =3D v4l2_subdev_to_csi2rx(subdev); + const struct csi2rx_fmt *csi_fmt; + struct v4l2_subdev_state *state; + struct v4l2_mbus_framefmt *fmt; + + if (!ppc || pad < CSI2RX_PAD_SOURCE_STREAM0 || pad >=3D CSI2RX_PAD_MAX) + return -EINVAL; + + state =3D v4l2_subdev_lock_and_get_active_state(subdev); + fmt =3D v4l2_subdev_state_get_format(state, pad); + csi_fmt =3D csi2rx_get_fmt_by_code(fmt->code); + + /* Reduce requested PPC if it is too high */ + *ppc =3D min(*ppc, csi_fmt->max_pixels); + + v4l2_subdev_unlock_state(state); + + csi2rx->num_pixels[pad - CSI2RX_PAD_SOURCE_STREAM0] =3D + CSI2RX_STREAM_CFG_NUM_PIXELS(*ppc); + + return 0; +} +EXPORT_SYMBOL_GPL_FOR_MODULES(cdns_csi2rx_negotiate_ppc, "j721e-csi2rx"); + static const struct v4l2_subdev_pad_ops csi2rx_pad_ops =3D { .enum_mbus_code =3D csi2rx_enum_mbus_code, .get_fmt =3D v4l2_subdev_get_fmt, diff --git a/include/media/cadence/cdns-csi2rx.h b/include/media/cadence/cd= ns-csi2rx.h new file mode 100644 index 0000000000000000000000000000000000000000..782d03fc36d1fc06fddab04c4f8= 081af62c3766f --- /dev/null +++ b/include/media/cadence/cdns-csi2rx.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +#ifndef _CDNS_CSI2RX_H +#define _CDNS_CSI2RX_H + +#include + +/** + * cdns_csi2rx_negotiate_ppc - Negotiate pixel-per-clock on output interfa= ce + * + * @subdev: point to &struct v4l2_subdev + * @pad: pad number of the source pad + * @ppc: pointer to requested pixel-per-clock value + * + * Returns 0 on success, negative error code otherwise. + */ +int cdns_csi2rx_negotiate_ppc(struct v4l2_subdev *subdev, unsigned int pad, + u8 *ppc); + +#endif --=20 2.49.0 From nobody Wed Oct 8 14:20:58 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 6946D19EEC2; Fri, 27 Jun 2025 01:07: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=1750986442; cv=none; b=uVqvzsLfvFRJIytrEtJy0piyM06tPVbrrCMxqimiX2I7cI/0q3mY/icJxEefu9r2sProje9FAGquGumr0lcWrRUCRG18qzt1X7RLPMJZYS6zkSQcXIML8y4efi6c/7SwAwmV0NVuQCLA0tSjs3K1RjqXasRVbqYk3jRdpV1dTQk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750986442; c=relaxed/simple; bh=4R5N0PI9UZQ+i5uRNE5ZyANWHo+7XVAg9OA23ozkzKo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MlWvdyeqTTJsZjnkyqIeZXx0aM+Z2GIRJqtWVHTmOItKyTuCFK1C6hOe60pAlKOFJhh6I6vZseUGfAMV7yqWD9OIZLmIIFNUsYVzKjDISqkT51humOU1/60015Q53sfgYZDgA4TtmNd7c8cHn2rRG6jnnIl5QWy4B9Pyd501LDs= 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=auejeBC3; 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="auejeBC3" Received: from mail.ideasonboard.com (unknown [IPv6:2601:602:8100:c320::cf66]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8429F73B; Fri, 27 Jun 2025 03:06:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1750986420; bh=4R5N0PI9UZQ+i5uRNE5ZyANWHo+7XVAg9OA23ozkzKo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=auejeBC3u36fR/u0LkcvYWtPZTG444ezhupvCjyCj1MyUsrD0XWHnyigdXbK9twQN vPe+rUPFe4IGtCMB+xiMCsvfzyGRHTHftAPHz8czlgP3wP4EO9awhL6f9HvZducqsO mp4GfIlQ8O3kTtCtCy2IqkJRC00ITOLZ6R9pa2L8= From: Jai Luthra Date: Thu, 26 Jun 2025 18:06:11 -0700 Subject: [PATCH v3 6/6] media: ti: j721e-csi2rx: Support multiple pixels per clock 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: <20250626-probe_fixes-v3-6-83e735ae466e@ideasonboard.com> References: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> In-Reply-To: <20250626-probe_fixes-v3-0-83e735ae466e@ideasonboard.com> To: Mauro Carvalho Chehab , Hans Verkuil , Tomi Valkeinen , Sakari Ailus , Maxime Ripard Cc: Devarsh Thakkar , Rishikesh Donadkar , Vaishnav Achath , Changhuang Liang , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , Yemike Abhilash Chandra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4928; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=4R5N0PI9UZQ+i5uRNE5ZyANWHo+7XVAg9OA23ozkzKo=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBoXe6nJj1oSx/xQSv/wwhSJ+up+dnzR5GoQgGea pJCkFLtr5+JAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaF3upwAKCRBD3pH5JJpx RdbFD/98cQ60vXxhfilhRUXSw6SCz0tl+TPyWRJtN3NRPVLi08FRdq+wWhp2xChmRqoDedp5HyH yV+WpkdgvMmIy/9m652AeZk3bKOBKWaFf8/iO8bgisQpC1CCFj3Se9GEcKd7oTOO2IPhDNbIpXA ovxKufnZnrFY+k9icBaYFiCcW23ca6tlKttAAMHbCbxUFs1b//rNlo9uxPQTEeOkN+Dlh65eol5 QaiIUNSF15j551IbSPAbSZp6fPsZaZTEmxjP/7NpAT8XoLEGKMZk4vuHO5PFwioarvXZIUPVDX7 oVFag/6hbACkHIp972ZG3WSle3xcRoL6xabDlaCmm+98MBWthw6h4nJp5SwZQ1JTxCgED1IjGtN /ENTB5pbN/zUQxefGfVQWG72VtJo42xhamavOYFvAaZQrR5gBpXv0JtgyFskNk8WJnYvlK1lIxD 1+tSnb59f+UEW84LGlGP+8Xje/b49HtBqnWxnfaNaR+wCGRzMi6bp91xBoWMwQcCN+oN2r49NN8 DHl2ALUVWgUsZWaVq3WwCq8H+kWmL8D14rUFirg+SQANlW7LzGT8V09wx7jO7OA9ORkbpd0oAHP /h12W+EhP9zUvvcES62YOpj8azW6Y3voHfXNyS7Ei6/leIUaFjVFCfbuLOGe2HnB/XM6ObTtIJN WXNb+94t71mPqPw== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 Add support for negotiating the highest possible pixel mode (from single, dual, quad) with the Cadence CSI2RX bridge. This is required to drain the Cadence stream FIFOs without overflowing when the source is operating at a high link-frequency [1]. Also, update the Kconfig as this introduces a hard build-time dependency on the Cadence CSI2RX driver, even for a COMPILE_TEST. [1] Section 12.6.1.4.8.14 CSI_RX_IF Programming Restrictions of AM62 TRM Link: https://www.ti.com/lit/pdf/spruj16 Tested-by: Yemike Abhilash Chandra (on SK-AM68) Signed-off-by: Jai Luthra Reviewed-by: Rishikesh Donadkar Tested-by: Rishikesh Donadkar --- Changes in v3: - Reorder declarations in ti_csi2rx_request_max_ppc to be reverse christmas tree - Include cdns-csi2rx.h from its new location at include/media/cadence --- drivers/media/platform/ti/Kconfig | 3 +- .../media/platform/ti/j721e-csi2rx/j721e-csi2rx.c | 37 ++++++++++++++++++= ++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/ti/Kconfig b/drivers/media/platform/ti/= Kconfig index bab998c4179aca3b07372782b9be7de340cb8d45..3bc4aa35887e6edc9fa8749d995= 6a67714c59001 100644 --- a/drivers/media/platform/ti/Kconfig +++ b/drivers/media/platform/ti/Kconfig @@ -67,7 +67,8 @@ config VIDEO_TI_J721E_CSI2RX tristate "TI J721E CSI2RX wrapper layer driver" depends on VIDEO_DEV && VIDEO_V4L2_SUBDEV_API depends on MEDIA_SUPPORT && MEDIA_CONTROLLER - depends on (PHY_CADENCE_DPHY_RX && VIDEO_CADENCE_CSI2RX) || COMPILE_TEST + depends on VIDEO_CADENCE_CSI2RX + depends on PHY_CADENCE_DPHY_RX || COMPILE_TEST depends on ARCH_K3 || COMPILE_TEST select VIDEOBUF2_DMA_CONTIG select V4L2_FWNODE diff --git a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c b/driver= s/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c index ad51d033b6725426550578bdac1bae8443458f13..c710c8c5ca2fd6b296443612af9= 6f8640a37c552 100644 --- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c +++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c @@ -15,6 +15,7 @@ #include #include =20 +#include #include #include #include @@ -29,6 +30,7 @@ #define SHIM_DMACNTX 0x20 #define SHIM_DMACNTX_EN BIT(31) #define SHIM_DMACNTX_YUV422 GENMASK(27, 26) +#define SHIM_DMACNTX_DUAL_PCK_CFG BIT(24) #define SHIM_DMACNTX_SIZE GENMASK(21, 20) #define SHIM_DMACNTX_FMT GENMASK(5, 0) #define SHIM_DMACNTX_YUV422_MODE_11 3 @@ -40,6 +42,7 @@ #define SHIM_PSI_CFG0_SRC_TAG GENMASK(15, 0) #define SHIM_PSI_CFG0_DST_TAG GENMASK(31, 16) =20 +#define TI_CSI2RX_MAX_PIX_PER_CLK 4 #define PSIL_WORD_SIZE_BYTES 16 /* * There are no hard limits on the width or height. The DMA engine can han= dle @@ -110,6 +113,7 @@ struct ti_csi2rx_dev { struct v4l2_format v_fmt; struct ti_csi2rx_dma dma; u32 sequence; + u8 pix_per_clk; }; =20 static const struct ti_csi2rx_fmt ti_csi2rx_formats[] =3D { @@ -485,6 +489,26 @@ static int ti_csi2rx_notifier_register(struct ti_csi2r= x_dev *csi) return 0; } =20 +/* Request maximum possible pixels per clock from the bridge */ +static void ti_csi2rx_request_max_ppc(struct ti_csi2rx_dev *csi) +{ + u8 ppc =3D TI_CSI2RX_MAX_PIX_PER_CLK; + struct media_pad *pad; + int ret; + + pad =3D media_entity_remote_source_pad_unique(&csi->vdev.entity); + if (!pad) + return; + + ret =3D cdns_csi2rx_negotiate_ppc(csi->source, pad->index, &ppc); + if (ret) { + dev_warn(csi->dev, "NUM_PIXELS negotiation failed: %d\n", ret); + csi->pix_per_clk =3D 1; + } else { + csi->pix_per_clk =3D ppc; + } +} + static void ti_csi2rx_setup_shim(struct ti_csi2rx_dev *csi) { const struct ti_csi2rx_fmt *fmt; @@ -496,6 +520,9 @@ static void ti_csi2rx_setup_shim(struct ti_csi2rx_dev *= csi) reg =3D SHIM_CNTL_PIX_RST; writel(reg, csi->shim + SHIM_CNTL); =20 + /* Negotiate pixel count from the source */ + ti_csi2rx_request_max_ppc(csi); + reg =3D SHIM_DMACNTX_EN; reg |=3D FIELD_PREP(SHIM_DMACNTX_FMT, fmt->csi_dt); =20 @@ -524,14 +551,18 @@ static void ti_csi2rx_setup_shim(struct ti_csi2rx_dev= *csi) case V4L2_PIX_FMT_YVYU: reg |=3D FIELD_PREP(SHIM_DMACNTX_YUV422, SHIM_DMACNTX_YUV422_MODE_11); + /* Multiple pixels are handled differently for packed YUV */ + if (csi->pix_per_clk =3D=3D 2) + reg |=3D SHIM_DMACNTX_DUAL_PCK_CFG; + reg |=3D FIELD_PREP(SHIM_DMACNTX_SIZE, fmt->size); break; default: - /* Ignore if not YUV 4:2:2 */ + /* By default we change the shift size for multiple pixels */ + reg |=3D FIELD_PREP(SHIM_DMACNTX_SIZE, + fmt->size + (csi->pix_per_clk >> 1)); break; } =20 - reg |=3D FIELD_PREP(SHIM_DMACNTX_SIZE, fmt->size); - writel(reg, csi->shim + SHIM_DMACNTX); =20 reg =3D FIELD_PREP(SHIM_PSI_CFG0_SRC_TAG, 0) | --=20 2.49.0