From nobody Sun Oct 5 01:50:08 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 56B462DAFA4; Mon, 11 Aug 2025 08:21:08 +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=1754900470; cv=none; b=uMFC7vE1As1mHxuYylA/vybwn0gSdvTpBufd/y9aQiFkHaJxg3XIHjAFqOsQHbfWR9PT9PoPtnYUmFdc1ktelVCuSbRmwtm9qlaxMT0FXKI9zoF6IXxSCZyv8Om6v0YipdWzSY/0rLKEWTTdz0ui1IFVWZkP4W/9Adb5lhn5cX4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900470; c=relaxed/simple; bh=lSS0pVF3EOA0nBZI3FcDMTVEXoMTYUKovgqydt6TVsI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p8Ux6ifUaSPLnJOSO55h48tHPCfNGETDUEkKkp0sokIqGNOyMSHoGv1aJg0gnQ5oJDQ0M6GMHvy8pGEk5YThrZnBLLS0HBhscUoF+3qNbz0YblUSh00/XgvEmooZYDz7OVBaATRPoNosQz+/ssK+VaIA4no0HJVeO1jySL8Qwgw= 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=seF3dSQo; 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="seF3dSQo" Received: from mail.ideasonboard.com (unknown [223.190.81.143]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7FABA82A; Mon, 11 Aug 2025 10:20:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1754900414; bh=lSS0pVF3EOA0nBZI3FcDMTVEXoMTYUKovgqydt6TVsI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=seF3dSQoBjX74vy5mVKNoLvyrTTHsNrwH8baVzg5n1KbrciSRA0EJW7/06ure09vl 5UEVKFClT/kyPSwpqKxvsIBD/7dPY/+uhPwPPBLr6KL1Klvev/0guKAzzIE35W4t7z eyZTXZ9Gd9kND2pVWu4CHmJZVzCmf7URSV4Z89zQ= From: Jai Luthra Date: Mon, 11 Aug 2025 13:50:13 +0530 Subject: [PATCH v4 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: <20250811-probe_fixes-v4-1-aae22290f1d0@ideasonboard.com> References: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> In-Reply-To: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> To: Mauro Carvalho Chehab , Tomi Valkeinen , Sakari Ailus , Maxime Ripard , Hans Verkuil Cc: Devarsh Thakkar , Rishikesh Donadkar , Yemike Abhilash Chandra , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , stable@vger.kernel.org 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=lSS0pVF3EOA0nBZI3FcDMTVEXoMTYUKovgqydt6TVsI=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBomafR5kZMz2l1bibxR7ZCJc3WSGz4jeaAjPKYw hEv81mtcIeJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaJmn0QAKCRBD3pH5JJpx Re3UD/95lkZpTM0yyJyxS4R63XtIQgq7aTl1uuqpYLqo8zDP6OOU1qfyelyqYS3qwNGPxcuUd5u Bqc4AJrmRewTHOxlz2tez9bbxrGmsXPmjrI4wMB8SHWmye9ldR1kReSUc0hL1zUKTJvFMUxJOXd Unid4/gxXuCBCWuNso/Nyk+HhT6UI9qYAjxoKAQ2kE8z/FcSzah4vLpHb1uKxAyznKNHZD3p0tk gk3+ZW8rfdP3r/AbskOGfRmYKy1db4bzVurRFcatojAp2wtfn/oZ496jPI1lHbB/uV3GLOthio8 6BFJEooLLnlw4caSbYa+Zm8ZdS4m0kuDPfPCOpigtNqIh7EN0wAipOYlKq7NpXtsvqnrf25d0kc uDrmFOBJVK1SLHFogGU/FEuYkruBT+LkXiMKsyDkjBpl9tOHlyHZxevXTxwtpMycIXc2z3MFqDu MKuO79sJ3Iscq9qGQ43wlVTLg1acAHVpzGPcO5n/+h6/kCNoHqktFoYgJvTsEyV0TBGiyoLVe+0 e8o3SYObOE5ccCZDIPApAGnyae+oCgYh8nBx38y2ZCRxaFly9mODznRM3HCepUM7bQ+N+uzcu1m 4+W2bstNzvAmZFFVtxX1KSr7hOzOHup2tPOg5+pnfKbayc4JqNBZTYDx9P+2INQYbOf0bCi8DZ2 PSpYm7KWc4L4WmQ== 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 b628d6e081dbcb4dae06a236455228c168945660..6d4cccbe1fdea11f6aefd63a985= a9a3c16a7a9fe 100644 --- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c +++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c @@ -1120,7 +1120,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.50.1 From nobody Sun Oct 5 01:50:08 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 034A92DAFB1; Mon, 11 Aug 2025 08:21: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=1754900483; cv=none; b=F3Wp2vcPCyW/CeE0FQ6VkzlemPhAQCQweUG6LRzrsFcJYKIKgk10HUtZD2oMSPbydZ2x4t62mmDxF21DiAmMjA+hR9804NLjJl7EOE1jxz/hGrgfFwjmfwD0YrN8NxI5Rpczz+HCKiIUf4tuo0yaL47NuowU/SQK39XanQXhz/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900483; c=relaxed/simple; bh=4JaC67pewBjlRN9jYK99BP9039cjK2et04ZLp3t6VvQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ET6V6hQJAhqqUwMU4DIq/qhrFH2C/HxyRUoSuyMjZIj5mUiPV7q2yYI9SWd5CxP1Q/zc31VRrU+zNyMKo3XkfRtq1RIDEbyaGcg+JGDvuWqEbaoZ0f7NAWhDMisBTbEcJdCaPckQeMduzkooHIyskIMxg5p9mkLjGQCEDvtZ5e0= 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=bd5LrS0W; 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="bd5LrS0W" Received: from mail.ideasonboard.com (unknown [223.190.81.143]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6631782A; Mon, 11 Aug 2025 10:20:28 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1754900428; bh=4JaC67pewBjlRN9jYK99BP9039cjK2et04ZLp3t6VvQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bd5LrS0WUn6DgS13rvmHQ2BOu/SpNArsRU+jHrsRdnVMXDdiSoTPajv4LOQQlQgcD 4nE3Rc2KgKsPYR9kQSEObNzZh82MKQKZXChu1cWg4HYNpdNwTqTGRl9wbNNAzpoBrP ksx5gT2a0dDA3kNFITgn1yfzpnUbgrJsSqPxT7Hs= From: Jai Luthra Date: Mon, 11 Aug 2025 13:50:14 +0530 Subject: [PATCH v4 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: <20250811-probe_fixes-v4-2-aae22290f1d0@ideasonboard.com> References: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> In-Reply-To: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> To: Mauro Carvalho Chehab , Tomi Valkeinen , Sakari Ailus , Maxime Ripard , Hans Verkuil Cc: Devarsh Thakkar , Rishikesh Donadkar , Yemike Abhilash Chandra , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra 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=4JaC67pewBjlRN9jYK99BP9039cjK2et04ZLp3t6VvQ=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBomafShpECaVuFVnQOwJ9PVwOIgtN3AitpZhvqA mcP/A12pEyJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaJmn0gAKCRBD3pH5JJpx Rfs2EADHCvSnPQ2Uycu7HTTCBBt4oePwTbOkwndYoz3NuPSd3U4vmwHRDzAFz6HS6QWQUWrv/ga Y9sQCBxcRtWL0eze0pEMETKlWEZvhiwL4Mr37AYGO2mJxrwtQXFg5k3xEZHfjevoTRugwiZ4DKu FOKjCtZ2GfzRzE0g6TccmxDiWiTZ55DeE44b9x4rh8Ct0SeE35qV2VTNRq98l3LKkbHm3MdR04j CBIca81is88d0jQ/ATCUSR+JSC57lNQ+vZGhJyZzYm2fCVRWt9Unvgyr20rN9nxEvfcO3a13w6e AS2G4xicXm8PPWrXLgmbEZnN3bhEprrLSolQnWwKGMNMvyCqWzeR6UcBc0C/ml77c3TY/KzJSpT dBAJeZG0y5zaRZACJzZ0AkQFWzJOpU4Iow0LyjsLDKH8DDNnB/TFfz/NuWCAzPGPVfLOkHI5qaz VpQ3Gv7SewtPLE1PxOQ5TkShuOQvdEKyC+CkAF1qAEy7L2mRx4Nu+/SvPP5gw81EFM2lRbwxKO5 QvhTpybptiKu81aU8ONI+iINxn2vM2lEPdoYz7B7F4kSuFrWn3AGg8odD/kagfFPBfSLSlg6cyj MkxHie5Zg2HmfQV2tABzQSIARQ8rRCfqOUwWdLYJtMr8dE5gpD5plcezAv+wICoOndxPYqvCpc+ oSM0aTKXiqlFY+g== 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 6d4cccbe1fdea11f6aefd63a985a9a3c16a7a9fe..daadb870514602bd59519d6cd29= 66a9ff56794fe 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.50.1 From nobody Sun Oct 5 01:50:08 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 81FF62DAFB1; Mon, 11 Aug 2025 08:21: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=1754900497; cv=none; b=r0bLpXjp7X/x2tPDOd9iSNloDw3G8WCzMyfWumWqwrBSnCS4dpkfPplZUgLAITO27d8l9JqdDB30XpMAAt3DFZ6Jh2v7X88D52w7KPqCA7RpyCinWtY3eTvAbrwH0/GXojZhLFjuOQkN454GLkLvtq6PY/8tHbUkDCU2XXf/ggI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900497; c=relaxed/simple; bh=LkrAuDMyLBPzFqnNHQvajGJmFRMtYG6UoIo++14XmsI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=V1SSv8gFXpxeD+L9V8YOhpCTKB6qGj+hp/a/CGSwE64A5MQ9+vOk/r87p6sVHind6DfkIiqMa5Xmavfs39ROCIiF/IwVCR/3Voob8BnOOTDVoDSlcS11V6CFEz3p9EZI05cbTnoQCue+Dms114PknrXr9GAd/88Kvn/qMi4ky+o= 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=WKtDHaf0; 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="WKtDHaf0" Received: from mail.ideasonboard.com (unknown [223.190.81.143]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D6CC482A; Mon, 11 Aug 2025 10:20:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1754900442; bh=LkrAuDMyLBPzFqnNHQvajGJmFRMtYG6UoIo++14XmsI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WKtDHaf0stEuaAqVyPiuT5OfzLiyLT+qURVjciOFiA6lmlYfBY4PazIKHGMEBT9v+ xa7DIDJmWfO/MAKddmG/nIdgAFp5iHeSGN/mqomVE90t/cIDSrqTOM2yGmEa5WUtYl 8ZPpr4xd5fJV7/enjlxJ0FhZ/GdOg2NW/gC0aKrM= From: Jai Luthra Date: Mon, 11 Aug 2025 13:50:15 +0530 Subject: [PATCH v4 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: <20250811-probe_fixes-v4-3-aae22290f1d0@ideasonboard.com> References: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> In-Reply-To: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> To: Mauro Carvalho Chehab , Tomi Valkeinen , Sakari Ailus , Maxime Ripard , Hans Verkuil Cc: Devarsh Thakkar , Rishikesh Donadkar , Yemike Abhilash Chandra , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , stable@vger.kernel.org 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=LkrAuDMyLBPzFqnNHQvajGJmFRMtYG6UoIo++14XmsI=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBomafTSPL37suDBn1Tg7wE8UkBPskzQUhqLdHCN 8cZOP6zxC+JAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaJmn0wAKCRBD3pH5JJpx RSioD/9YmcsezCHjvreA9MCRvzf3a08Yu+93FIm1kZaH2YPzVWkg88C9pzFTGBKjUM2zrYMCwBd hx20WMgO7XE9uc+khQibag40FCkP3Hhds7sAPm62B4zhFRfT3fWrIcxEjjQZ4ib61sEdpkQrfBA wqug+elMB1vZWSQhWrGNC8Gh6YvznkVQLR/yfUzW6Vht6w0vE9mCeCJn6EjFx+zAAKTr+GqWFE6 2DibZiPvcpkyc12nKVwoxPz0Rs8sJgvX38EbO+KvkflKUs+T/WNwpO6izitgNU9axHGW7FucItk pkd3mDzmGE+8kPhG6D7YnFO3uroMCiu3hfHuFBsPf+eUPlFUUojeGdUgH0moaK3f4liUS3ixYAK DmQmNzf5vQ7/EYD1USCQ68mRji/GiMLOohbNVE28fAq3eOdT8Q8dCU8uGVeXRrqasYdEh9Q0H9S Bh2Lw4u+T0HMD72jZl+Z524PCiUsT3YTN9NrDKNByKHjgrxLK7nYkk6bG6TYjWOAt11ooZt1Amu o07jEEpZz/XC9Fwx6wVi+RKosE049WY5obc0zQOqNN7BffxPgI1lA6DSCfGGKX+iiWyf0AKkgBN W/EFJ5BFp0hmfvIc/2RUVkXN2wFqQKly5WuP+JVSHqGsbIAF37jTECUIDmR7a213IwlEp7/tdVy fvyXabw026pjw8Q== 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 daadb870514602bd59519d6cd2966a9ff56794fe..09e5618de7dd0cdd5bf42083804= ff7ca53f0973b 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.50.1 From nobody Sun Oct 5 01:50:08 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 5C4702DC349; Mon, 11 Aug 2025 08:21:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900510; cv=none; b=WWODpjuYCVd/fqqFzeDug9b/ghLqyKhUYmJP1A2Nx5MGDDuv4KQPXM5GbC29VxCq6o7K/POmjS2Lpow3cC83EuD/m0xvZq1/fH74l5E1R4N/0BWTThdu+B14dGvtX9eV8QUmLWDUfWvEPBTAqlro37FLbOcDaPmWgcGr0hpNHi0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900510; c=relaxed/simple; bh=Vks+ayOIH/1sodpGYur+BQ8OULCen/e02TyguQxrnf8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l3IbCzmT9jjw6wdhw8e5HDqj21tQnPzK2lPpDvQGibHAG31OsvfWKvvrTt8n0VZnnkKOnKP2vthmGUMAW+58liS3aYOpp/LQ3sa5IYOKg2plhyB0Us6mFoeIvwjRbdITIoLx/nZQrs8VqoDF4At4W0rXnGwXhJnMHy4bMTEWWso= 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=axyVHtwM; 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="axyVHtwM" Received: from mail.ideasonboard.com (unknown [223.190.81.143]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id EB2E882A; Mon, 11 Aug 2025 10:20:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1754900455; bh=Vks+ayOIH/1sodpGYur+BQ8OULCen/e02TyguQxrnf8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=axyVHtwMyzwkxsYzrINbhPKNLVV4on7OYoSNshDYObTn6CfkPTo0ld0k+zZW+8btt IrwAdcSMZusUnhiG8plukKSLYK511rI8KVad4jVOoisHbcJBeYGFQdVSmB7h7jqW8U DgwTI/Fr4pabZw+4MNOWY3dIsMaRt+osUL4W94G0= From: Jai Luthra Date: Mon, 11 Aug 2025 13:50:16 +0530 Subject: [PATCH v4 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: <20250811-probe_fixes-v4-4-aae22290f1d0@ideasonboard.com> References: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> In-Reply-To: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> To: Mauro Carvalho Chehab , Tomi Valkeinen , Sakari Ailus , Maxime Ripard , Hans Verkuil Cc: Devarsh Thakkar , Rishikesh Donadkar , Yemike Abhilash Chandra , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra , Changhuang Liang 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=Vks+ayOIH/1sodpGYur+BQ8OULCen/e02TyguQxrnf8=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBomafU054IODBuJfcZILLR625hKxpmsfteVoKX6 oi22vzKbS6JAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaJmn1AAKCRBD3pH5JJpx RZeXD/4qy/JtL5zqnMURKJMuI3bCfbdz0lrGGVm1QSWbcEHRvf+v503zfFfefBh48IxT8EjtOZ1 BOPYr3zesmzP9AMwx4k3oTpe4yEym1xHAbvOoqhkSRyVj/yah/1rCYuGHjf9spK5/gxndomUCRX yECNxTTkjkEyuUQorhLraGnkD7vnj/ww4U51zVS+H0UYswQ/+tzHXf9jav+S3w11A6ZYoTt5xVN M/1JCuVDgc4Qsd+j+FYtgztJaTAMGX3E5Us6HRir67Dk9I721x88hW5aSSvJGGIiH2jFIVH7DN/ nOosBpormDm0XdAkwmhKpmKDXzq0cPdiWbdK//PCK1kglz46PcXrLLu4gm0aTAmKt7pA95Buz8Z k5Rmrw3/KBsmZzlbNfXLLDDVXLNmSF/3sPYUzzuFj7i4wKUzkqOrfvRmjj6X2+gXk0qVP0jnbgP O4gMF3GZ0/96JphSK81WK/bHgQ7qOjyLM1xfFOiR88WTFsjSQ2Zz/rOLCk6mkr1fNRPDkc80q29 ZsBaKX4ljfMeAgs2wV+j7Ka/zjPhVAjP9U8rGYxPSnNnTU5nXzu6wr0YM6rAEQjjNiajFZ+Dr8u ditVKIGl3cdC0rkjk/xay/WSEZQoZZ5NcsC6okErgZ2HZ6ckopjVq7ty1VvvbHFO6Ya5iBry+aw hVA569laCPJ1GXQ== 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 7f1ce95cdc3f13e29b3892cff89f21ee0d71a168..c232047487852d431957434c4c9= 7f84dbb66acad 100644 --- a/drivers/media/platform/cadence/cdns-csi2rx.c +++ b/drivers/media/platform/cadence/cdns-csi2rx.c @@ -595,6 +595,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.50.1 From nobody Sun Oct 5 01:50:08 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 5C2462DAFC0; Mon, 11 Aug 2025 08:22: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=1754900524; cv=none; b=S0eIViCjcbLvvVVIw0JiazMXgPxIRgoehK09xmJEuQpnIifiij0cBrxLtfDebarhx/yUO2BIP9DXsEJYMPFj0pfpMtMu1VZGEXmTyvcHu0OXcXPQm306rpEp56Pi76H4E45u5DO35bFCJWaWaqpvZWDXFaGh0zG+uNz9hPKIOko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900524; c=relaxed/simple; bh=jzbVzOZLbFJDdM45eNJhA5bxMSlCDO4muvB/sqqj1Lk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MFtMwqqVp7I3MXX6gJYqtuNkzx6zUyvX0bOIpNbIteVH6d/7McgzHdDGb8iROj3xcTQjpjeUZnEaT2RfSuFiE+toYjHENOVyhqqg7fLKjb1upatJfcwnfawOkdQXz2G8tK9tq44KAwE8ZVaSFqWVrna3HqcstWZXAYQ4mn/QyRE= 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=L4Z/ZBz6; 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="L4Z/ZBz6" Received: from mail.ideasonboard.com (unknown [223.190.81.143]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id CD86E82A; Mon, 11 Aug 2025 10:21:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1754900469; bh=jzbVzOZLbFJDdM45eNJhA5bxMSlCDO4muvB/sqqj1Lk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=L4Z/ZBz6auHujdIXox6h/SGKYy+voT6IEbOFa4Kbyl6bB6pjzvkSTYeCs0AKrZw7I tTQRkGrl9TDzhZGaCyQFXvgbY9ktbJ0oxVThE0NU7/0ZPOIYG8D9+T1msTdwUc3gGF eQBrLEL2Udv8EfNlR6PdryzchU9JG80RPBb2QPxU= From: Jai Luthra Date: Mon, 11 Aug 2025 13:50:17 +0530 Subject: [PATCH v4 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: <20250811-probe_fixes-v4-5-aae22290f1d0@ideasonboard.com> References: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> In-Reply-To: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> To: Mauro Carvalho Chehab , Tomi Valkeinen , Sakari Ailus , Maxime Ripard , Hans Verkuil Cc: Devarsh Thakkar , Rishikesh Donadkar , Yemike Abhilash Chandra , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8193; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=jzbVzOZLbFJDdM45eNJhA5bxMSlCDO4muvB/sqqj1Lk=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBomafVSOoPtqbUqxjyhE/38aSgVucG8S2gFHay1 3XTAE9wnoiJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaJmn1QAKCRBD3pH5JJpx RaOmD/9BVbfsJc8gswHB1M0+W+CoDHk134KBip5XUu7ym/xQ0A51iKXmNe6SG23075VvR7cieNu 2TEo6Zf6Wat3pyzYd56TecjYjn5sSjJwtJypuaKnf2jz+DmA0RFkfWNosInSfKjb/xo+rfy4E8F 8tkusXrF8vBna5fAvKq/uibag6MCJvqnU3MCntHrADShmC2RL4FbmwxgJJkPjDqXs8b9TWL9SB7 eCNOeSsHvZp8yky61A8Ug4xb7vFOGcLslednCJVOgJKIaNalwtCq+/ji1NPOmy3Yn/KMpaetaLN E3SVWP5C1o7Krx6MrQ8UaRuwJEMdHswzq8CmpCG6obv7W82Itrv+SbAttlf055PuP6fWU8inaaP LEJLxuZdzWqnjG+gLhYsy8fcTBVs1k4d8uUJ3P9f1vbF7g9+kWdBjKroE0XwoyG7/fJpHrfYG/o kEp+1m/YucYLNLAZsAtqMhO1L/kcJMkiXFj5xfx2uT0PTOYYS3XqdbPZv73gMH/xecEgfvabmzQ DqA5sRFHxvPPKShMiSpnfF9AlHsI3hJOtK2YfdK8zCGB90j8cMnq8kw+wjV0zvmRaES4vucA7WJ XSeK+feAaEWTuv39ePx5F//PPn8rnk5bcLmDRKsUa3OhB/iWlLuqP3Eg4aJwOdeXL2MF8T0oGAX 2tpYZYF8grrdi6g== 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 | 74 +++++++++++++++++++++---= ---- include/media/cadence/cdns-csi2rx.h | 19 +++++++ 3 files changed, 76 insertions(+), 18 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index fe168477caa45799dfe07de2f54de6d6a1ce0615..eca3bb8b35926db5114d92c50bb= 59b90b6ad2d90 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -5354,6 +5354,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 c232047487852d431957434c4c97f84dbb66acad..828b4ba4301d3e96c73f7695a7e= 254ae5f681060 100644 --- a/drivers/media/platform/cadence/cdns-csi2rx.c +++ b/drivers/media/platform/cadence/cdns-csi2rx.c @@ -5,8 +5,10 @@ * Copyright (C) 2017 Cadence Design Systems Inc. */ =20 +#include #include #include +#include #include #include #include @@ -17,6 +19,7 @@ #include #include =20 +#include #include #include #include @@ -52,7 +55,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 @@ -87,7 +92,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_event { @@ -132,6 +140,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; @@ -149,22 +158,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 void csi2rx_configure_error_irq_mask(void __iomem *base, @@ -370,7 +379,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 /* @@ -569,6 +580,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.50.1 From nobody Sun Oct 5 01:50:08 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 35E592DAFDE; Mon, 11 Aug 2025 08:22: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=1754900540; cv=none; b=CbhTb2dcDEKUq9YtJ3VF/5kvoG5Jfadg6jg2n6s8BRlOoFnW6QKl5wpB1jpvo430V1WfCXc2A97yJi1WiTFLLCKM1nttwFjYsg4SiTO3AvwzqOvtZAOE2anaw4ItsNKTmIO4gqVRebvxQS5DROwqCTqNnqfAwK+Cgt/cQaJZIG0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754900540; c=relaxed/simple; bh=hGcQZ2d756xgNKBAlc/ruGO39a1ClaXWjzXopLbReqI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N2HyWZkarohK1AUbJmPSnObZJ67CEQuANSPB4K/hmH5sOLz9X5ZyssCSTbL+SIRaYWflVKz39/Xjx9C/fSRaU8WtGtQ3Pgd+b2ccWTAT+L47NkvhZTIZIYqFDNUeRew6OjXHPNScxwnLjerYv9BTwTyzjUuS/x5lQjqoH/E2dZA= 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=LrwlnojY; 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="LrwlnojY" Received: from mail.ideasonboard.com (unknown [223.190.81.143]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id ADD6E82A; Mon, 11 Aug 2025 10:21:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1754900483; bh=hGcQZ2d756xgNKBAlc/ruGO39a1ClaXWjzXopLbReqI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=LrwlnojYOFQR6GkJKAYOU86vUdSLKq3zzvqrtWuUzDHpJVf1gcraSrz++ye0Or93u D1y2s0mBJKtIdxDpSsSrQWzQkSBii/Vdj9kDeK2SkOqksbFn1ujixmyW1UzL6RUgsO SOjXMRkwYJ6nB5/mqGVEwchO4yHiiBR03bTvaMWw= From: Jai Luthra Date: Mon, 11 Aug 2025 13:50:18 +0530 Subject: [PATCH v4 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: <20250811-probe_fixes-v4-6-aae22290f1d0@ideasonboard.com> References: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> In-Reply-To: <20250811-probe_fixes-v4-0-aae22290f1d0@ideasonboard.com> To: Mauro Carvalho Chehab , Tomi Valkeinen , Sakari Ailus , Maxime Ripard , Hans Verkuil Cc: Devarsh Thakkar , Rishikesh Donadkar , Yemike Abhilash Chandra , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jai Luthra 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=hGcQZ2d756xgNKBAlc/ruGO39a1ClaXWjzXopLbReqI=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBomafWbvrY9DaZDB00CbqZd4w6C4bz8FeZrPEJQ j90iDyj2JGJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaJmn1gAKCRBD3pH5JJpx RW70D/wJa5scURKc0l2ViG82LbGhdfW0kup74dKWlzmwkri2QgTIdRL2KMTWjT5ScASfCYUktYK 4GRQ63bFwYjCA2mhqXMKFIhUfQ2xb2TPWzEf2NljVT99Q4cAiVidSjA0BzoRFuvAiEU0cBcfq/0 XYIXtBmmsHobpNr0hCAP8zF3j4KsBu2gx1LjYqFxREpexYN9G3JYCZyHHuruIV1uO01xtAiYg/3 Y7Ocii/1SjWXK36Jv11Au+091vZuWc0L7/ex04quk+pl2LApi2CVse83UchN3wSG96YC5fVCcLO Hf4YFR5jmvAPg3w2I2KcL3YAuBj56hhAOB03lmjrD7+kOe8U+8uwKmO+ccUtpkoWA0nSLmb3tG0 20YwLdyK30F0zWw4EQstwBLrfVArmvndLP/7+2+CJN7A2wI7+nsbIG09kDsq4XVBDC8g7Gclx8Y QZQRNQQNxQE8QWJp0cNCQbjM09T5KaPvjWK9FerWJ5ueuMvGQUuutFeQb06Sarzcfrs9pDvBiJv Cz4GY2EMGCw/jelp+16MXqz6xz9UtYL8l5svbQEq5ZTCanqGatSvkvXsQ/V32sIMLij296b6yVy CzwBqXI4ehiBUrx1d0f9R6sklVvG8q7eKxGBk0zjwQGqugJsAjvN7FP37QFPzaMYcBRxEny6DiR G067sk0mm1NyNcw== 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 09e5618de7dd0cdd5bf42083804ff7ca53f0973b..b5980778183944217a03d23075a= 0bcef4c424f90 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.50.1