From patchwork Thu Apr 10 06:48:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14045944 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 4275220409D; Thu, 10 Apr 2025 06:49:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744267784; cv=none; b=uPSvAbltfRbD7QKdyI26x21z5PH4pfB21ks+AXImeE//r30QZYjBXvd3PjMOKaFlqvf4Jitpyrpa1EjJT2nZROzi4P7ypb0NbC63WaVARvtjxbtA3k4i3E+CuCzbdg+WBslHekraJ2RTgA1Nyl2jgRZRlBLSp5yGvLjNHM/hEtU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744267784; c=relaxed/simple; bh=8yoaM0B8HudLZSm5REmErvky9Qnf6koLsVNTwqxtdAU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=I6WlHaDPZlyc7EPDPZ6sXWzIJwM4b0wycGfx5rveMrPVWKHZRfZZon1PdGcVkooT5XzjgveAefsDZ7jZkSrlKHgAd2MQxsalN6Wu2lbr/Jj0DcNnhtqaJPeQrTnm8TXnLIEgyjWj5OkWmclBAWN49icZBRpj2VyzChsrisSDRX8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (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=FJA3QV5c; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (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="FJA3QV5c" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:389d:1fcb:c0f8:ff7c:208d]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D2D42EE4; Thu, 10 Apr 2025 08:47:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1744267663; bh=8yoaM0B8HudLZSm5REmErvky9Qnf6koLsVNTwqxtdAU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=FJA3QV5cx6YwyEnPYiyeMks19B74sSXjCpURwLWzSTOQZbPcQNbK5fnzQNDym+Ws1 xe3n4+WMp1BpPdF1575qXz/aIK7C0pvvlxQdBMRZ4rAdW0eAKgqx48XkzfXgWbQ2hm TXL22QMYjBoMSbReW9AHMPL3DPZSerT9nFtx1lg8= From: Jai Luthra Date: Thu, 10 Apr 2025 12:18:59 +0530 Subject: [PATCH v2 1/6] media: ti: j721e-csi2rx: Use devm_of_platform_populate Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250410-probe_fixes-v2-1-801bc6eebdea@ideasonboard.com> References: <20250410-probe_fixes-v2-0-801bc6eebdea@ideasonboard.com> In-Reply-To: <20250410-probe_fixes-v2-0-801bc6eebdea@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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1185; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=8yoaM0B8HudLZSm5REmErvky9Qnf6koLsVNTwqxtdAU=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn92n3jv68vljTAj1EhTrtlmn3r7QTgOANT87QT gGqrR59Su+JAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ/dp9wAKCRBD3pH5JJpx RZ1zD/9fk1tfKH+RW1s1FBMIoybn6usRjSo2LUdbM0hraZUxeremvfZiGF4mMa0KCwcz5bssNtK 8JggxNfrds9yH12+/rSJVW49iAPpJCMx/NJJyFEVBrNP784JJKk3HmjF3DiY9WMZVpS1yH8HwzC e814Zah7RRkYaIDvnfRbma1/pMCCVvfFOvm1iSEuQgaK4HMEzvMd7BQghuRFefYtYMmsnnEwSas Wco4Fm3T9z8UJmtrP4Eh2yK7g6zPekp1kTNKXs43qkZUdZg+KRe9wL5KbeHk926b/84yixc54IE Mw3QgnOtltkothxHykMJ76kS1sHuqe6bOwrWXRSDbjYLW1gpLTZ0ZfTsobRjsqqkKPhl8XdTtTY Qz/MHCQQ05/81NkKhC5IEAA5iQTxQFWIqonT/Rpz1kGW8LIi3WcE3JyAcHccC8Sk5QrDEnBiyHP EHoov/xHj6pcEQWjTp5piKBMgVFqhe+zAw6OsQ4IopRLcA85bYpc7d1OLwB0DsS6FqoehlR7atL 69O/ntsS1/8PESqVqPs9xkn0YntcSyC11uZl7AeaKSmvLaHvy1MQ116a9jbuUZHy4U99603QLVG +j8aJAmu8JZDyHv2hRjSG4RbnIpOER7fbBFr4xUdPpqDHtbLXVXAMc/M4yi7aH/r8fKceOvmvBS 15ge6Wq2eBY89Sg== 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 Signed-off-by: Jai Luthra --- 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/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c index 6412a00be8eab89548950dd21b3b3ec02dafa5b4..a066024bf745450e2ba01d06c0fec4e6bdbfa97e 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 *pdev) if (ret) goto err_vb2q; - ret = of_platform_populate(csi->dev->of_node, NULL, NULL, csi->dev); + ret = devm_of_platform_populate(csi->dev); if (ret) { dev_err(csi->dev, "Failed to create children: %d\n", ret); goto err_subdev; From patchwork Thu Apr 10 06:49:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14045945 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 E14D11D5143; Thu, 10 Apr 2025 06:49: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=1744267790; cv=none; b=fjAeiPlHnjFJWJ/Gff0rJZWnc7ewCEMJz2wdi9RfAHPMbFTGCKzuaOMNCIOz/2MEfbj4p3O9ydWFFrX8Hg41gAcF0U7Q1l9kGIkgDW9/vZkZiuKNOTjPpTnxm+7wpCVzHPfNhfeuKbfC9JYXFryYkcAKYG2z74E8UDn+mzlNrDk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744267790; c=relaxed/simple; bh=Qmh6mblMPaKUFpH+6loOYkLwSxCVt2hNWZhCNqv1ojs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k2n3kMr7G/SoTR6zcEClWTWvHyNkZz298xudjuKltP2uz3cJIKVaZ4iCWB2IbX7LqYpILSz6EUE8PvYc62gnIbwK/GlhH7U1wyTdbrrtFsRKF14VIhGcRCoCvBTjbjJKvi9tpp2osWBlrfdnaVcYPFakeP+2VjrtRW9pAWeyBH4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (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=LoXQ87V2; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (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="LoXQ87V2" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:389d:1fcb:c0f8:ff7c:208d]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C7BAAEE4; Thu, 10 Apr 2025 08:47:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1744267669; bh=Qmh6mblMPaKUFpH+6loOYkLwSxCVt2hNWZhCNqv1ojs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=LoXQ87V26TjCoAP0Zyg77KBuyawJ8fJwnF5+wK8U+Vl1gW4soNZ8nlhEiP+WTtFO3 ZvPJMQbbdztAo/LqyshtKSK6c+zKqMKbmdGKaQOLSyKtiUJEU44maC5BLjjMdYrqPN WuyMpQ85PMcR2Xa+9H4X/iERBUG7DS6rC/S0jKCU= From: Jai Luthra Date: Thu, 10 Apr 2025 12:19:00 +0530 Subject: [PATCH v2 2/6] media: ti: j721e-csi2rx: Use fwnode_get_named_child_node Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250410-probe_fixes-v2-2-801bc6eebdea@ideasonboard.com> References: <20250410-probe_fixes-v2-0-801bc6eebdea@ideasonboard.com> In-Reply-To: <20250410-probe_fixes-v2-0-801bc6eebdea@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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1925; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=Qmh6mblMPaKUFpH+6loOYkLwSxCVt2hNWZhCNqv1ojs=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn92n3JSzLrDTKSmTlsu6K4vn3vcSvKyj09Eu0J t4u78alPSCJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ/dp9wAKCRBD3pH5JJpx Ra1oEACNhrTaNHHA+VsNdppXcFqScfJbsz42AWsmSrzbRjWd5O+YdtFgPaAh7jx6M6yeGCr1RUT W9WS16fDXPIGDU9RFu1dunif9A48hSBHozMCVjmeJXbROdTDvQLHneohNTmy7QQQxM7gTBkfeah 9Jy3DfaTFruKX1Fvn/hR0zg9MdUUv+F0i+0r8Z69FS3BbI4R5aHFJ8ZcOPUQIcI7DdmqGv5XO4f V3msA22ZN2AWkPPpTBAmt56udLJMOi2J0OFQm9cZTZFbnjmsY7x9fe1xm82z9lTWYeq/9iuXnJu gzrqsra2bhRU405mwxjaK9N+fL8PEs4sPOfugHx4nuIawlCgIIxt9HnzT73YBPc7XEXAsXJXlT6 N4YuEyfyLoYaz2SZXE5QUZBIJwQh5oiYQQtQV/BK3b5hjVeU7orpbcVb5Dkkoq+Qx6sJbCFT2fi r6kqnuTD2A1mBNBShDWHWs9II4Vy/aLqvA5EJZ4aU61PAcNQGRJ6ZWXI5hB+hu8/ORcYzv31e2U oBVWlqhNxvyCG6Yd6jS3lW59pprqqM/BVyfO/WWJA2G9ztHKmNOGJv/Ltx4e6wJj7H4rwt80iVQ 5/5CrpDAlqpNVKk6KlJNtTIUEZ5aO+5PNfQbgT0OXbIRYQpvOJtKFcgxxor9y+a314VEou4zjG/ pY6G0apCLfAe1Hg== 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 Signed-off-by: Jai Luthra --- 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/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c index a066024bf745450e2ba01d06c0fec4e6bdbfa97e..6d406925e092660cb67c04cc2a7e1e10c14e295e 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 #include #include @@ -450,25 +451,23 @@ static int ti_csi2rx_notifier_register(struct ti_csi2rx_dev *csi) { struct fwnode_handle *fwnode; struct v4l2_async_connection *asc; - struct device_node *node; int ret; - node = of_get_child_by_name(csi->dev->of_node, "csi-bridge"); - if (!node) + fwnode = fwnode_get_named_child_node(csi->dev->fwnode, "csi-bridge"); + if (!fwnode) return -EINVAL; - fwnode = of_fwnode_handle(node); - if (!fwnode) { - of_node_put(node); - return -EINVAL; - } - v4l2_async_nf_init(&csi->notifier, &csi->v4l2_dev); csi->notifier.ops = &csi_async_notifier_ops; asc = 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); From patchwork Thu Apr 10 06:49:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14045946 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 05A45204C17; Thu, 10 Apr 2025 06:49:53 +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=1744267795; cv=none; b=tmVdem4xzTk3dZlGHcYphB9nJGvuyT+3FVPTMGtDl54o/aIgz3XcZiX5PcXLxk3iYVGoBpkQ4Gr1L4ujkx0EKI/DumhOWajk0usEqBJzVx/D/gGnoR7Quf3jTahVvYVKaOpKj//L3aCizqrv/VXbsKX3k7L8L7NQImbhwKBEOmk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744267795; c=relaxed/simple; bh=4MJSk39sy9UrQBNk5KWmQcjTHvyHa4DM84YIW+K0a9w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YV1m1OxWtEsmCN7fQqKfpvqWA7h+1fSWPUMS4NOlFeLTEU+0Rwtw21cEVAMFFJNYuy+7uTMqVI8ntUbajd0k52YJtMguBN+dtKoioWVLkYKPt0RsPeVC09PHd8N55OH/flM+mtvMue3B7rfCXrCysySfK7Ze6eLdDkgAxEzPVx0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (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=MLjz7XME; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (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="MLjz7XME" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:389d:1fcb:c0f8:ff7c:208d]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DCE24EE4; Thu, 10 Apr 2025 08:47:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1744267674; bh=4MJSk39sy9UrQBNk5KWmQcjTHvyHa4DM84YIW+K0a9w=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MLjz7XMEEMsQ43axbfJu8EMOKH8a82VRBNtsvieoLwx5oyvUuli3mZSNOgd/MDWdo IE9kCLfOdsPFauS93FzE58KEQIxtPZtt2h1zY/w5cuGA9uklxhERuo3lB6aiMnJgag qK2BlzBiVV/ojrV/uNKZJR+Feug8KN5nrP2f/Dn8= From: Jai Luthra Date: Thu, 10 Apr 2025 12:19:01 +0530 Subject: [PATCH v2 3/6] media: ti: j721e-csi2rx: Fix source subdev link creation Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250410-probe_fixes-v2-3-801bc6eebdea@ideasonboard.com> References: <20250410-probe_fixes-v2-0-801bc6eebdea@ideasonboard.com> In-Reply-To: <20250410-probe_fixes-v2-0-801bc6eebdea@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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1962; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=4MJSk39sy9UrQBNk5KWmQcjTHvyHa4DM84YIW+K0a9w=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn92n3zvxxTycjjaPdDsUjo15N3YY4sZsMUtUWQ SvLj/g5ib6JAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ/dp9wAKCRBD3pH5JJpx RTLwD/9n+E3J4ejn7WDOa55/9mtuSlcMLtbtLAUPeNTLFlDHhX05WxElNTFMRX2SWIVs2yzzajB XOacNBHTUuXUk0Aqjcl1x/BUMIcgpJrkoSetolyEspEZNaFQHf4EywLIl5DCSWmbPVBLT1XcMe+ YEOcQPz7OJMcd7d9xEKr5I+MuC/UGMFJa2ajz9bHHEyhxfHmQUcE3Y6AkxShyu/XhaAU5b8/DON yXkwbMnvMbgt5LfGGlpUrG6LS/SOtdmju5AtT00Ubu0SSyoNFbsU5Z1sqPh7Vyz9HxnEPtWo0ll P3nx9Ff1VLlMSpHsYMKljfTbbw9rdf9wQhG13VurjtFeXvNeapjTDKy53AU7THDji2wGiT3Eccz OcPFRpKCKdUS9NlZofLwpWvzUvaejKgz2XBrTKWIxJnFDGH6HY5rPBLSH4ciRhDRD8KPAUhsVen FoBDF/K5D3EAFzimXxQhplWeKYSojhw2lEVZEne/X80doNzj2OLRMKY3CIwgBYdxlBT/wvOAuVx w9azpPeQlKgwj5QQTJWtYpWic2OnAJkje+IfFrFbH1LohTHQsVNS9NteNshtgYQnauNr1Q3xL3S dk4MnifEMOIbyfxGUkkVtlsKfoA8+4vL6mvYZknRkjBTTmdnPYKC+VUGJv3v8zbe+Oke3yo7tHG QKDo9Nq59HrJkbA== 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 Signed-off-by: Jai Luthra --- 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/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c index 6d406925e092660cb67c04cc2a7e1e10c14e295e..ad51d033b6725426550578bdac1bae8443458f13 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 +#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_async_notifier *notifier) if (ret) return ret; - ret = v4l2_create_fwnode_links_to_pad(csi->source, &csi->pad, - MEDIA_LNK_FL_IMMUTABLE | MEDIA_LNK_FL_ENABLED); + ret = media_create_pad_link(&csi->source->entity, CSI2RX_BRIDGE_SOURCE_PAD, + &vdev->entity, csi->pad.index, + MEDIA_LNK_FL_IMMUTABLE | MEDIA_LNK_FL_ENABLED); if (ret) { video_unregister_device(vdev); From patchwork Thu Apr 10 06:49:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14045947 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 63BCB20468C; Thu, 10 Apr 2025 06:49:59 +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=1744267800; cv=none; b=Ov5GND9CWNl5xGg2J2IgquzQhO4ZqO/KaZcaPqPWtUE7oTDv7ulnRh2OnbgSJG6DpEyl76RngizEKfFFKQGdGbabqW1OOY6WnXPe56GmBw30leOKXLo3GoJetxijoDhDY+BFhIoqCiKy7b5cm9rMjigcKgWwzSCVFT6/210SbH8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744267800; c=relaxed/simple; bh=0IDoVRF4Jk2o4J2x8325zn/PNl0hGSYENwFo90C+Dn8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KzKiIaf/dtjZfbayfcPeK0/uyk4p6aAIuSOwHJhLNd+av5r/mXP6AK1WsOdDF6KlHdATd0eAMDpOXHLtIvB317wN+vo5YY4kFJANKBsAX1soy9TTtXsOvrEd3P4Hu6EOcRkCBZvf7mwGJPefW+IB1oxsj5gqLLZFtlm4l1Byvic= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (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=l93D8+VQ; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (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="l93D8+VQ" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:389d:1fcb:c0f8:ff7c:208d]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id F3B4D11D9; Thu, 10 Apr 2025 08:47:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1744267679; bh=0IDoVRF4Jk2o4J2x8325zn/PNl0hGSYENwFo90C+Dn8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=l93D8+VQ5jB178X+5zZBbJIi0/no26MI1jXBfUquB/QTm0Sfv8QA3cME39w2jxpUn A2KK6NGUGw/vodPfvVtCILea5VPj6db0A/DjtynTATOKv3UFRSc6PSJtSxEPTfTSAr xkmbK5tRhcVHCGoaOZ3IQRq6ZNBA2aJQTHDN8WyM= From: Jai Luthra Date: Thu, 10 Apr 2025 12:19:02 +0530 Subject: [PATCH v2 4/6] media: cadence: csi2rx: Implement get_fwnode_pad op Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250410-probe_fixes-v2-4-801bc6eebdea@ideasonboard.com> References: <20250410-probe_fixes-v2-0-801bc6eebdea@ideasonboard.com> In-Reply-To: <20250410-probe_fixes-v2-0-801bc6eebdea@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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1059; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=0IDoVRF4Jk2o4J2x8325zn/PNl0hGSYENwFo90C+Dn8=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn92n3ugwULKDesfOvviG65xqGwPE1kALyvZ03t 0b9UWnMp1qJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ/dp9wAKCRBD3pH5JJpx RUCmEADMo4gTUm9RMK6HVBhPGTImqyOQCNQpTtZKMKQnEkjDUAKA0YZOe5i2nX0Ht+2EnvkBUQ8 EgZz2J8VaOSKLmj42sH+Tz0o/MGPjq1Eri6wdoqTXvIY4nKqDtm1XAVu2yS0F3kvR4sZ/hFN5Ms /iLBI5qn6Zl0fC/1YcOIg6ydFxKqIIkyc3tfQkAGd/I1aT0yoJR1InIwYknDgrfZv5kUuwYPPrC lT1Tdl++e593pN4XMWIf3SBn5ccBgfk9B5ctH8Ab87OeeRUGp72w6INlC7rALTaFLhKsfgM6cmz HUbHFy33QNr2HvjGV3GaH3+9UokDv+yq77qtp+tVXcEYSsjUxNatrHzXXvZEp/JnW7St+wK5OS+ Zu95gGwlUh/y47YLCP5okDSpvwcqY+L+xfCQlagF9kaoYFtaGFU1oCi//rdQSveHJDaHALcPJAI IhMmsCk34xwuxhdqKX9WFWPh7tX6HUSkHBlhPIVa+hTJ0YxXnD2qMcSfi9yXJ3oSpsNg8eGGXxb 0gMyLJvw4MHuhmFqQ8yhrRfOcCXyLi9tYXFuRKEuhbOd/iviYd0geXw/OkQXqNQXHA0rUI+SMkz 2XRGtpqsVJZax4dlwrTMLGcVyZPMhwje2lmv+2Bc0MEI9nbIuMPt4evaomLu68O0pFP94XnsMoQ cil/W2GZ82a7mjQ== 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 Signed-off-by: Jai Luthra --- 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/platform/cadence/cdns-csi2rx.c index cebcae196eeccc65548d2c8e14bcba4799415beb..608298c72462031515d9ad01c6b267bf7375a5bf 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_internal_ops = { static const struct media_entity_operations csi2rx_media_ops = { .link_validate = v4l2_subdev_link_validate, + .get_fwnode_pad = v4l2_subdev_get_fwnode_pad_1_to_1, }; static int csi2rx_async_bound(struct v4l2_async_notifier *notifier, From patchwork Thu Apr 10 06:49:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14045948 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 4DB1C20468C; Thu, 10 Apr 2025 06:50:03 +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=1744267806; cv=none; b=Odo5zCmDw/MCS94JQ9yPj1+lgZqBXvDjpeENBE/NrCTQzQMyGeOVDVN1qzrjNX+GrU2AdVbWsE1DcO7VZJV86OMXca1c5UVse4Ff0tB/vYts7eejFkTD3rtsWTn4FnTRbU2+Rvq0lGklOehFsqi1XQzrRIytjpyvcO9vpqSjj7o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744267806; c=relaxed/simple; bh=nCnnDofJha84+eIcewsfKIHBiGBGP2QkbQJkJ/ggr40=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U4WCvZ4V/e360SZ9Gl9m9nNB2+T4rhJ9IEt6ViyGINiH3dh6zDBel3BARb8tHZf5CsrbFMsLvn7HO9Diy44EcVAL812MwCacJs+Q4Du5HpFQsJrLgd3mB8aB3w4NX6POJ7QqAZSE9Id6puXfiU2jND86uh87813f8udEsLwwBSs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (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=FHx1PcZ8; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (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="FHx1PcZ8" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:389d:1fcb:c0f8:ff7c:208d]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 3255BEE4; Thu, 10 Apr 2025 08:48:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1744267684; bh=nCnnDofJha84+eIcewsfKIHBiGBGP2QkbQJkJ/ggr40=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=FHx1PcZ8RbQPBY0GRpLaWEWv3Fb4kOn706WM7rrO8oDI57yGIkQXOoAT7HDQ54tLs P2uATbIKOA0f0ccLrxApsefaKFvZa5RoS+4/mC4i3zVVDx84kwbsQ0so8h24e1tocH RNLBKlYY2dHgUh5gtC9Y2TZBCVwV3rCSpzcr4HYA= From: Jai Luthra Date: Thu, 10 Apr 2025 12:19:03 +0530 Subject: [PATCH v2 5/6] media: cadence: cdns-csi2rx: Support multiple pixels per clock cycle Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250410-probe_fixes-v2-5-801bc6eebdea@ideasonboard.com> References: <20250410-probe_fixes-v2-0-801bc6eebdea@ideasonboard.com> In-Reply-To: <20250410-probe_fixes-v2-0-801bc6eebdea@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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7258; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=nCnnDofJha84+eIcewsfKIHBiGBGP2QkbQJkJ/ggr40=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn92n4rYoJJ20IyA3AaDA7QvGnpIRBhVG+/A7ZB t7J1IwX6HWJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ/dp+AAKCRBD3pH5JJpx RVfeD/9YMsGbc81g2pDu2Gjjmp1y9cN036hObyjnMI9pczxKcKEfY1wlIlZOpRSBhMOreBDAlwE p9GdtFjZjizXVWEZpL1PvuDL1dy6tj9kvl79X8ZWfLRgPKNkrU8exR6S5jkqtOBpXG1v9k/Hfw5 XCRuZDgHL8C4jxIC4zFdC16KfeTpLstitw5yJ389323Oluwil2CzbeI+11rxYvduPCt8dtqC02i c5g8A4sUqFw4hXsSV6bGk4SPUw2JICJvf2HgZvftIfX3dsr1HN8taFU8JtJlM79AS6AcfrQjPV2 kzQ13KGccApHcRyWxh96mOzSoBBWVlwLS+/Z1bsc2mJFnSFxFSEm8iLNqzEtEz/UrcjUTT+qMAz cTgnjzfYSsU7msc50/HqiJLghQjPFZRMYpq5IqnpL/lTTfsE1IjUanEdDJp9kBAaBCiDGUNhE1l XELY6eCMbT+Ay3razDMQJKZrAk5ZuimqWWUMIUWOf+a/+1Z5U8oWAnOBn4a3z3zNnxwEKz9hFwA O771qkqco2aybe05TMbQsJrWyq0Fzp32zZNVGAjK5JUCm+XaUlQXo34nn0QLxfCsbIYb8fqAz3l XZ7fbmvW/LF5w3H9hmZop6P4OSo1oU4Zd90w0Dy3ZfzfJs4kqOuuJMEIVJhbq4Gp8CAmhYuVT+Z ZVbFokUSkIwlNpw== 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 Signed-off-by: Jai Luthra --- drivers/media/platform/cadence/cdns-csi2rx.c | 75 +++++++++++++++++++++------- drivers/media/platform/cadence/cdns-csi2rx.h | 19 +++++++ 2 files changed, 76 insertions(+), 18 deletions(-) diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c index 608298c72462031515d9ad01c6b267bf7375a5bf..154eaacc39ad294db0524e88be888bd0929af071 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. */ +#include #include #include #include @@ -22,6 +23,8 @@ #include #include +#include "cdns-csi2rx.h" + #define CSI2RX_DEVICE_CFG_REG 0x000 #define CSI2RX_SOFT_RESET_REG 0x004 @@ -53,6 +56,8 @@ #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_NUM_PIXELS_MASK GENMASK(5, 4) +#define CSI2RX_STREAM_CFG_NUM_PIXELS(n) ((n) >> 1) #define CSI2RX_LANES_MAX 4 #define CSI2RX_STREAMS_MAX 4 @@ -68,7 +73,10 @@ enum csi2rx_pads { 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; }; struct csi2rx_priv { @@ -90,6 +98,7 @@ struct csi2rx_priv { struct reset_control *pixel_rst[CSI2RX_STREAMS_MAX]; struct phy *dphy; + u8 num_pixels[CSI2RX_STREAMS_MAX]; u8 lanes[CSI2RX_LANES_MAX]; u8 num_lanes; u8 max_lanes; @@ -106,22 +115,22 @@ struct csi2rx_priv { }; static const struct csi2rx_fmt formats[] = { - { .code = MEDIA_BUS_FMT_YUYV8_1X16, .bpp = 16, }, - { .code = MEDIA_BUS_FMT_UYVY8_1X16, .bpp = 16, }, - { .code = MEDIA_BUS_FMT_YVYU8_1X16, .bpp = 16, }, - { .code = MEDIA_BUS_FMT_VYUY8_1X16, .bpp = 16, }, - { .code = MEDIA_BUS_FMT_SBGGR8_1X8, .bpp = 8, }, - { .code = MEDIA_BUS_FMT_SGBRG8_1X8, .bpp = 8, }, - { .code = MEDIA_BUS_FMT_SGRBG8_1X8, .bpp = 8, }, - { .code = MEDIA_BUS_FMT_SRGGB8_1X8, .bpp = 8, }, - { .code = MEDIA_BUS_FMT_Y8_1X8, .bpp = 8, }, - { .code = MEDIA_BUS_FMT_SBGGR10_1X10, .bpp = 10, }, - { .code = MEDIA_BUS_FMT_SGBRG10_1X10, .bpp = 10, }, - { .code = MEDIA_BUS_FMT_SGRBG10_1X10, .bpp = 10, }, - { .code = MEDIA_BUS_FMT_SRGGB10_1X10, .bpp = 10, }, - { .code = MEDIA_BUS_FMT_RGB565_1X16, .bpp = 16, }, - { .code = MEDIA_BUS_FMT_RGB888_1X24, .bpp = 24, }, - { .code = MEDIA_BUS_FMT_BGR888_1X24, .bpp = 24, }, + { .code = MEDIA_BUS_FMT_YUYV8_1X16, .bpp = 16, .max_pixels = 2, }, + { .code = MEDIA_BUS_FMT_UYVY8_1X16, .bpp = 16, .max_pixels = 2, }, + { .code = MEDIA_BUS_FMT_YVYU8_1X16, .bpp = 16, .max_pixels = 2, }, + { .code = MEDIA_BUS_FMT_VYUY8_1X16, .bpp = 16, .max_pixels = 2, }, + { .code = MEDIA_BUS_FMT_SBGGR8_1X8, .bpp = 8, .max_pixels = 4, }, + { .code = MEDIA_BUS_FMT_SGBRG8_1X8, .bpp = 8, .max_pixels = 4, }, + { .code = MEDIA_BUS_FMT_SGRBG8_1X8, .bpp = 8, .max_pixels = 4, }, + { .code = MEDIA_BUS_FMT_SRGGB8_1X8, .bpp = 8, .max_pixels = 4, }, + { .code = MEDIA_BUS_FMT_Y8_1X8, .bpp = 8, .max_pixels = 4, }, + { .code = MEDIA_BUS_FMT_SBGGR10_1X10, .bpp = 10, .max_pixels = 2, }, + { .code = MEDIA_BUS_FMT_SGBRG10_1X10, .bpp = 10, .max_pixels = 2, }, + { .code = MEDIA_BUS_FMT_SGRBG10_1X10, .bpp = 10, .max_pixels = 2, }, + { .code = MEDIA_BUS_FMT_SRGGB10_1X10, .bpp = 10, .max_pixels = 2, }, + { .code = MEDIA_BUS_FMT_RGB565_1X16, .bpp = 16, .max_pixels = 1, }, + { .code = MEDIA_BUS_FMT_RGB888_1X24, .bpp = 24, .max_pixels = 1, }, + { .code = MEDIA_BUS_FMT_BGR888_1X24, .bpp = 24, .max_pixels = 1, }, }; static const struct csi2rx_fmt *csi2rx_get_fmt_by_code(u32 code) @@ -276,8 +285,10 @@ static int csi2rx_start(struct csi2rx_priv *csi2rx) reset_control_deassert(csi2rx->pixel_rst[i]); - writel(CSI2RX_STREAM_CFG_FIFO_MODE_LARGE_BUF, - csi2rx->base + CSI2RX_STREAM_CFG_REG(i)); + reg = CSI2RX_STREAM_CFG_FIFO_MODE_LARGE_BUF; + reg |= FIELD_PREP(CSI2RX_STREAM_CFG_NUM_PIXELS_MASK, + csi2rx->num_pixels[i]); + writel(reg, csi2rx->base + CSI2RX_STREAM_CFG_REG(i)); /* * Enable one virtual channel. When multiple virtual channels @@ -458,6 +469,34 @@ static int csi2rx_init_state(struct v4l2_subdev *subdev, return csi2rx_set_fmt(subdev, state, &format); } +int cdns_csi2rx_negotiate_ppc(struct v4l2_subdev *subdev, unsigned int pad, + u8 *ppc) +{ + struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev); + const struct csi2rx_fmt *csi_fmt; + struct v4l2_subdev_state *state; + struct v4l2_mbus_framefmt *fmt; + int ret = 0; + + if (!ppc || pad < CSI2RX_PAD_SOURCE_STREAM0 || pad >= CSI2RX_PAD_MAX) + return -EINVAL; + + state = v4l2_subdev_lock_and_get_active_state(subdev); + fmt = v4l2_subdev_state_get_format(state, pad); + csi_fmt = csi2rx_get_fmt_by_code(fmt->code); + + /* Reduce requested PPC if it is too high */ + *ppc = min(*ppc, csi_fmt->max_pixels); + + v4l2_subdev_unlock_state(state); + + csi2rx->num_pixels[pad - CSI2RX_PAD_SOURCE_STREAM0] = + CSI2RX_STREAM_CFG_NUM_PIXELS(*ppc); + + return ret; +} +EXPORT_SYMBOL(cdns_csi2rx_negotiate_ppc); + static const struct v4l2_subdev_pad_ops csi2rx_pad_ops = { .enum_mbus_code = csi2rx_enum_mbus_code, .get_fmt = v4l2_subdev_get_fmt, diff --git a/drivers/media/platform/cadence/cdns-csi2rx.h b/drivers/media/platform/cadence/cdns-csi2rx.h new file mode 100644 index 0000000000000000000000000000000000000000..128d47e8513c99c083f49e249e876be6d19389f6 --- /dev/null +++ b/drivers/media/platform/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 interface + * + * @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 From patchwork Thu Apr 10 06:49:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14045949 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 3F84A20468C; Thu, 10 Apr 2025 06:50: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=1744267811; cv=none; b=jgin0lyJXcQ7vadbZTy8rE19naolKSlapww26iqSGbmim0OsIwcIbnNOmjFsjIHdHntvMe74fa2E3OulDSon51p/tAxxqMCaXH0OhUQf6eld7+DQiGGFGTR0A8L69mFmYw4mJ57bXcyBQLKpq2F+Q2us3tZW/RHSDrlEEuIdxfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744267811; c=relaxed/simple; bh=7CSFEhqIHstgVCRXuQHhQ+VWZRZj5jqLoBJkK2Okah8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nSEo+o0yBlrya6yd+im/gye4jk1bgS+kZdm2iVJ3s6sbbxBxUXRm/7Vr4/In1texQoPWy0zg3bsTfOH2XBIjDR4BhtgmQvJ9BaeKu9/smVAvjLrat/uTa06uD30RWdMJvyXiTiScDMrKekchNBxE+dqce7G5G/UvwpyACibGrQ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (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=UR+56h7r; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (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="UR+56h7r" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:389d:1fcb:c0f8:ff7c:208d]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 73C03EE4; Thu, 10 Apr 2025 08:48:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1744267690; bh=7CSFEhqIHstgVCRXuQHhQ+VWZRZj5jqLoBJkK2Okah8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UR+56h7rhH8+fhJhEPkLqIODKYRxxYgW6SZb5IdZoPT/Kaj8CaRdbfwtB0crQqZZk qnAdYUBmDl5JO1L89QhvTlD1Uw7hWHVjlJ4l+SOiYjx0aF12ZpxmEju7ogV9Sufuo6 L4e1Co/8SJI6d8PdiO4ZPWsHys5S3uegY3XxRRGc= From: Jai Luthra Date: Thu, 10 Apr 2025 12:19:04 +0530 Subject: [PATCH v2 6/6] media: ti: j721e-csi2rx: Support multiple pixels per clock Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250410-probe_fixes-v2-6-801bc6eebdea@ideasonboard.com> References: <20250410-probe_fixes-v2-0-801bc6eebdea@ideasonboard.com> In-Reply-To: <20250410-probe_fixes-v2-0-801bc6eebdea@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 X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4663; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=7CSFEhqIHstgVCRXuQHhQ+VWZRZj5jqLoBJkK2Okah8=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn92n4e+A2woCaYzS+8DXrNCUMIX+adStKKofAU oOAZmp0AV2JAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ/dp+AAKCRBD3pH5JJpx RRwID/9l5jxEg97SGAnZgGLD1cphoYNc7Jgsj5vOzmJ9bKAumn9sobr7Ty7cNttm6951TmeDDUf 5RSoZGpNNA+T+pV11VQWjVdRJYmUv3oXZ6jdhRNKsN/pkBZETrL+sncpFyV4a+9aMWdyBwR7CED CEfr+lbH2d+Q0oQIlNEYGZ9GrTGxTBcYIBJ9Kp7Y0nK28yZx9gire816DK1x1VKZL1Z5NjleWqo MbePTqwveWK1vYOwNgz7cQEcxaajQ90nvXVTgX6FVJ4Lk77tHBoaUVjLaQeHG0zO7jKAcXcN52o snQaxpQ8eoxlkASOsrqfG3fcBBW3JI6LWUco7at/rbawO3hw00MSd6HD/hCVeYaS3bAezYpNM8y KYjZjhEd2JJD6+RQS1vjPYSzXhvzBAvKuCEY0b094eNGIZWnCHPBIrmoI0swWavfFmXvYuknD04 i5oaeYb0hyaWbkYpT3TmE8O82UENr4KfUMI1Vmc3pRFViAWVcAGvQBoVlq0epkYNtlATSyRCuLb HKetun0QD2UMrRSyOL6Mh+frMJ2tCBRJ6ZCFdI2uYJ8UQi7fuS9/qkPnmcgUYQrnArC4PkCKsR1 NG2ZxeNEboj1HgHtn2seZ8EZCo4Z3YDd/IwwBm8D5IC/tIt15r/QN1E5BsZ65wgptg4mqh6A9WW IWuD5FUgKZZ5Vog== 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 Signed-off-by: Jai Luthra --- drivers/media/platform/ti/Kconfig | 3 +- .../media/platform/ti/j721e-csi2rx/j721e-csi2rx.c | 38 ++++++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/ti/Kconfig b/drivers/media/platform/ti/Kconfig index bab998c4179aca3b07372782b9be7de340cb8d45..3bc4aa35887e6edc9fa8749d9956a67714c59001 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/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c index ad51d033b6725426550578bdac1bae8443458f13..425324c3d6802cfda79d116d3967b61a2e7a015a 100644 --- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c +++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c @@ -21,6 +21,8 @@ #include #include +#include "../../cadence/cdns-csi2rx.h" + #define TI_CSI2RX_MODULE_NAME "j721e-csi2rx" #define SHIM_CNTL 0x10 @@ -29,6 +31,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 +43,7 @@ #define SHIM_PSI_CFG0_SRC_TAG GENMASK(15, 0) #define SHIM_PSI_CFG0_DST_TAG GENMASK(31, 16) +#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 handle @@ -110,6 +114,7 @@ struct ti_csi2rx_dev { struct v4l2_format v_fmt; struct ti_csi2rx_dma dma; u32 sequence; + u8 pix_per_clk; }; static const struct ti_csi2rx_fmt ti_csi2rx_formats[] = { @@ -485,6 +490,26 @@ static int ti_csi2rx_notifier_register(struct ti_csi2rx_dev *csi) return 0; } +/* Request maximum possible pixels per clock from the bridge */ +static void ti_csi2rx_request_max_ppc(struct ti_csi2rx_dev *csi) +{ + struct media_pad *pad; + int ret; + u8 ppc = TI_CSI2RX_MAX_PIX_PER_CLK; + + pad = media_entity_remote_source_pad_unique(&csi->vdev.entity); + if (!pad) + return; + + ret = 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 = 1; + } else { + csi->pix_per_clk = ppc; + } +} + static void ti_csi2rx_setup_shim(struct ti_csi2rx_dev *csi) { const struct ti_csi2rx_fmt *fmt; @@ -496,6 +521,9 @@ static void ti_csi2rx_setup_shim(struct ti_csi2rx_dev *csi) reg = SHIM_CNTL_PIX_RST; writel(reg, csi->shim + SHIM_CNTL); + /* Negotiate pixel count from the source */ + ti_csi2rx_request_max_ppc(csi); + reg = SHIM_DMACNTX_EN; reg |= FIELD_PREP(SHIM_DMACNTX_FMT, fmt->csi_dt); @@ -524,14 +552,18 @@ static void ti_csi2rx_setup_shim(struct ti_csi2rx_dev *csi) case V4L2_PIX_FMT_YVYU: reg |= FIELD_PREP(SHIM_DMACNTX_YUV422, SHIM_DMACNTX_YUV422_MODE_11); + /* Multiple pixels are handled differently for packed YUV */ + if (csi->pix_per_clk == 2) + reg |= SHIM_DMACNTX_DUAL_PCK_CFG; + reg |= 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 |= FIELD_PREP(SHIM_DMACNTX_SIZE, + fmt->size + (csi->pix_per_clk >> 1)); break; } - reg |= FIELD_PREP(SHIM_DMACNTX_SIZE, fmt->size); - writel(reg, csi->shim + SHIM_DMACNTX); reg = FIELD_PREP(SHIM_PSI_CFG0_SRC_TAG, 0) |