From patchwork Mon Mar 24 12:01:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14027150 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 7F24225E815; Mon, 24 Mar 2025 12:02: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=1742817729; cv=none; b=O4rDEuhjtqedkkw8KgsrlHonwW7TYjaBnPoJ4srOjeHdqsyzMvpnUK4hHfgvSrcUYfjDKYeLw+s1e6IpP7GrEAX0LR/Y0J3nvZMMVhpp6DseQjqf8ldFzNTXa66oycKMv0kgXJ7fWSR5jiq7duzQdhioZR/gWv2NIdy7j4EBFdw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817729; c=relaxed/simple; bh=c1QKgHwFnBo8MkQGY3HKlL/xP5qYB9h5Ux7/Tnezgd8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BBYC//CgZSHbVNjGpfxEAnjLSIqM0YvXT1uTldN4jcV7+Rf5yWeP5mrg0nVAiqxladUNalj1diJ6HJaCpTzaHMzXWzUd0q7In61/TIqt9uICXAXlaGsp8Llv2oQKZm6c999+V8lmonY5H/8qMMPKNDyghLstLjSB4UxOGTdqlco= 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=abWSJ5wE; 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="abWSJ5wE" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:904a:b2d:8d57:4705:738e]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 5E5BF1059; Mon, 24 Mar 2025 13:00:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1742817619; bh=c1QKgHwFnBo8MkQGY3HKlL/xP5qYB9h5Ux7/Tnezgd8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=abWSJ5wEfldymHHfhS77fhHzcLRWKEsqpdmZVc511F5xO08o0LROi4AhTSs+t7emY EgYwtXJXoI7n24Yp+RqmGRSOo+nOFRBxbCBRoYPICAF2EM0E/HfE3fEt7yWbExDWNw y4CeyohhbpcxkSPw9QrenDYEAmBFKUDJrkL3YLAA= From: Jai Luthra Date: Mon, 24 Mar 2025 17:31:37 +0530 Subject: [PATCH 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: <20250324-probe_fixes-v1-1-5cd5b9e1cfac@ideasonboard.com> References: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> In-Reply-To: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> To: Jai Luthra , 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=1137; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=c1QKgHwFnBo8MkQGY3HKlL/xP5qYB9h5Ux7/Tnezgd8=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn4Umx3Noe1q1GohrG4WiYr1ekT+uM4NvZVdaD9 q/IRiI1MeiJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ+FJsQAKCRBD3pH5JJpx RdDOEACezuJCpc3Q41wTfl7wqC5d1GP2NCB0qUp8TRTttr9fsgRmCVPDb+RzmM3mNIQoKKKT7cm Y9SHLXRt/1eMQS33i0jm0+G7DpAsGVqVIFUxQqRwhK/sdsY2Ns8HJm+idKbPJikx3SeYDTVPlCi 9tnNoBkUsYhEMX9fFEGazA2SUDPXQZVbWtjl3u9Akc/XnVPXLPJ/B6+xnNBU7926lVSjNKo/CX6 /BreUNMrxmAz2TqOebgTT5mvTikjOLvayv24ZQVBrEWVj5OL4Wu7SXey1rEwDFFLBRwe9DnAuJe a2OOmVHf78WwjRNE5XTFkE0cikPSkkElTPln7DzjegXUCQmWbDy7xUcz5vHl4fNMKagpIE5IrMt Z6L3mtN9hZFysqjALs3YyR9sCxjAaF2W9VTTgEn6BDvyRggldRolH1aUajSCqbWOOSfhaDDmRuL cM75qLJNgmp7AIbqnm4FaH1JV56OPuHI7Znty8UhOmd8XD8YGcjRbQOnl26Ji93m8NkUI9gslhp KMrVPf7QsIJ//uTFeXXrsjt/UslpdQNVnZmkGMnuP01NQS04KymSu8hwMYfPFt0v8YryMpzyPl+ SF0UQHlKwwfIIUkr59bDNP4Wfm8WBZJPuIuRa00nCZcroEeCyt14WMICEQp6/eHPjAdtGXBd/wH HIQNljvXGiuKU+A== 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 Signed-off-by: Jai Luthra Reviewed-by: Devarsh Thakkar --- 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 Mon Mar 24 12:01:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14027151 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 D117E25DD13; Mon, 24 Mar 2025 12:02:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817734; cv=none; b=l/UDSqVpRPwE2m7aP1DRf8IeyGnT+TP2I4ZQ/sCCwVUimAiGMrVjN7qBDHhsSinnYYdamN64RjIU73ALPreYphk0NC4w8ddBVJqcRf/GWE33q7Spjki39vVoY6gnKoQIVhSJTIqW7WdlV0DMibmnYtIsQXKWSHukb57u0lw85gA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817734; c=relaxed/simple; bh=UpFQxZgo+uMsHBwx1KlKaUDye3Leu6sM+Yf5MHyMcqg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Nca5SXtWYs1m/FSgbHYXjrrc0cOBXL3Lvz6ALoD3OpiXuPv7cQzVupWypILJVC9Mjb1cqoqzJnu4q2wXTjze1ln4cTFgbPNjsQ55X4Z+LAAIYCLhw2wR0q8fC7HACmf1bo0w9W93BhqHuhbYjRMEJ3pUVxQPgtJQd0h+tvkAMI8= 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=QfjfnYVe; 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="QfjfnYVe" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:904a:b2d:8d57:4705:738e]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7270A1666; Mon, 24 Mar 2025 13:00:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1742817625; bh=UpFQxZgo+uMsHBwx1KlKaUDye3Leu6sM+Yf5MHyMcqg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QfjfnYVeqJK0hlVXUfNX3ddEHLm8LnyLfgSApnB+o4GIci+OmAqz+amNT9W5fBAYl +8n61NxPP8uZVYr56zyzAW2lLiEZ4KnTBCFa3AAgd+n/o3bKHWlITAA3fSi1YkRbn8 mAJn9F+kqav2Z6x6o/bT/KH93lC1CAnSdkVMgVeI= From: Jai Luthra Date: Mon, 24 Mar 2025 17:31:38 +0530 Subject: [PATCH 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: <20250324-probe_fixes-v1-2-5cd5b9e1cfac@ideasonboard.com> References: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> In-Reply-To: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> To: Jai Luthra , 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=1877; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=UpFQxZgo+uMsHBwx1KlKaUDye3Leu6sM+Yf5MHyMcqg=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn4Umxxlc7ZE3szqs2CqMLhePDJwfKksTGs8dsJ Y9LYdQMX8OJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ+FJsQAKCRBD3pH5JJpx RdefEACJ4AxKOtBrbXwagmez5f3MUQRWXwJ/YYI27wtVDVhigrqU1MlWc+LghGngxlhUQneb3Vn UKGV8Z/DUHZSZxhr118EbLHirEju654CkE0payIJqfaSMz+ETAX1hXhy89qJLW2UGJurpkqQe0k eOtrVaMq4lUNC4xj7Jpvv6pFhNOcNayTbEQVbfUyNCsJ0d5FwHUoHmYI49HPdxJp3h0fCwEmreg j2UCuarw5NPF60YrB6KZbzVZiy+/O0xPXt0N0PLvIYstD6EV9wkgfZ+nFWbB9qp8kAmuAef8HML jZs/seJg8mOZroa2I5hFxX3IdyBkOdgwGuv9P234yMZqEbzyralo62kFAby2lIn79z++r4Gxk0S OiYYJEK+75SxnlVvuAopmUIBumCgN1fvzhrsbrkX2HRxD8ezJnIdwCD3sZQcmOhkZyiiYL8+fNW io34wo1UGopMDvtGE5+on2o8GdxHqSDqrqn7YrGXbYJ2x80+yhUzY84ItXTQNI+mHMMjwN1NQAN BWeNtk+jRSxTCr2ep9QnvzNit6gjjyK3js7hzzMfLmTzXhs0KbZlSrwLAe7QBnxCT7yfFli+7bb gHvqdqKh+XYQ3s3pqiM7no/liK/RF9j13HIG5X/2nU5Ld0Sf0BttwgDRsOlAZfWeyr3wSidwEyk Q6E+cLcgAmk1OPQ== 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. Signed-off-by: Jai Luthra Reviewed-by: Devarsh Thakkar --- 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 Mon Mar 24 12:01:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14027152 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 DFD9F25DD13; Mon, 24 Mar 2025 12:02:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817739; cv=none; b=tK2q5/aMnbWPn+AQCgu47Ntuy5cQcdubvPSlzddw9Ms8i62xb4cj2KxwiEaDIWPs49jnLqb8bmMpUqoe9gsjfPZO2TiQ4OKHDcnzADIJRMCiATvIOmKQkX67S/S914L6f1rV3kQRfBJS8a65sDv07/GsjJ8Wcu5b30acfaaw8nw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817739; c=relaxed/simple; bh=YypAVVW6YBJ7nwW19idHFNuCugtcZMvk68FdLDHBdWM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W0lWdSqICnm+QZfJn526ItI5OcU5Dr7VH/Kx0gfq/ruuOwYa29V9VEGBGbYVQeWEhvhH2JnLc06iEtt2DJWcVy70XcWio7sVfXmUNMLMD/PZaEcJyBKhSY87VFemd+e574ng3fAnUulM3OGvUW5DJuAVzxvxtY2B+6xdh7YIO68= 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=DaKRHjUI; 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="DaKRHjUI" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:904a:b2d:8d57:4705:738e]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C5E10455; Mon, 24 Mar 2025 13:00:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1742817630; bh=YypAVVW6YBJ7nwW19idHFNuCugtcZMvk68FdLDHBdWM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DaKRHjUIUvKj8eG5tU7ILNomDtoE7HxwDDvpMxYjMyFMp8mK7lRZCoZFQd7pCLa3Y B7EbxHkuDdF0/o2vxn0ac2Xjkzs3M6UFrMyYw4eFPpC8vbr7zyi8ThLc+YmLtB9jYH QSFm0GBn7Os3a+YMjYuvPokezh5TtQd2pOXow6E0= From: Jai Luthra Date: Mon, 24 Mar 2025 17:31:39 +0530 Subject: [PATCH 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: <20250324-probe_fixes-v1-3-5cd5b9e1cfac@ideasonboard.com> References: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> In-Reply-To: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> To: Jai Luthra , 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=1914; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=YypAVVW6YBJ7nwW19idHFNuCugtcZMvk68FdLDHBdWM=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn4UmxK4p3Ls6bnuTmxQTWIQBXpRGstNVIocoYg MhN4BHJEj2JAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ+FJsQAKCRBD3pH5JJpx RYW/D/4shzWtuZUTr08jRxVpc6d+/2lV4e390QUCM8L/o+MkOQ6Zg555mtdqXkzPNJLMHMqiTgM 68D/CWziiALWcr6cRK1G4ebEukMTV3rQBmNx+pAohuKk/6OOPYYLtbNVfac8LmuUVHsTRnBs86Q kw7i34gr99+0y5nCF0kywNSoTZ8yuTBkMNtca6V/iargKhCNCp5wgkH1lzcmq7ip8C3igFbyW5x WLCzBqtGYoPKlaGYiw6pXJAAOc3zRuffeTUVnJkX4GaW4fO3byaZN689NxvPn1aZsUXNQw1+dlN hJAS6aiGatLOUHf0bmpZX4rI/LD0PTZkP2lv9i499L64RHBxynsqOi+oNTT4fv3zvvG9SHtN2so +H/5EkdflbUcy6VQUkPnG3p6luwXLYNPFgGfovJqvlNNfhwZ+Wvdjnb4HnwTLMIrVOAYUVQzX6x W7yjF3S6p8U/aMYkqLuCbTHrAbNypnhH7o75Ya9sTF3S2Zx4dM0LD0S987kocOKbZpSXqtt+AR+ iN5/fv2WtOZ+9+87dmaMy5WXdEk65l0k8ciE0NbA8/ujB+gHuktLY69LLsJk31z0vTYcecm9tBC 2TYw9ymgrD6ls17R3BEb445f8sJHF//onQ/g3uqxvS3iK+j8yQ6vyu134P1nUIAg1hWy9LydfVR 7aUkKUy8tylu/pA== 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 Signed-off-by: Jai Luthra Reviewed-by: Devarsh Thakkar --- 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 Mon Mar 24 12:01:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14027153 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 6011225DD13; Mon, 24 Mar 2025 12:02:22 +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=1742817743; cv=none; b=cpR+KCpbNSpG5LqEiiBgmC3FG1x2Q/N7KFIxsRzy7Rq655M4+uEejYMX+8F8IIc6haZVF2CpvO5ujspDfbImPerHCdpf9orQtAoh3+1IzEYvX8DcPiNTjHQWz9ELUGh3ZZSDx/jVKdF08u3cY6LjSW2Nt5mbB+kh0z0GLrjveWY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817743; c=relaxed/simple; bh=qZ+kzep2D1ptJkwQqG63N/Mysy4aFVl8JZ6Q8lpusBs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aC9cp4Vk2kzhwe1kY1j3EA6GT5TGOt9jQO81M4nVhe2/LP4WG3f4c3pFTYoeis8LfMmnMKszYERXp+42UBcICsJmfb/MKyyqRa9o+44b7lkgQKOqVhs3ofL03eC9lk3/WRqFNQd2vuk3snioHTDjZA67KVbILwp2vak3JQkv8D0= 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=uZU/tCbG; 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="uZU/tCbG" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:904a:b2d:8d57:4705:738e]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 58AF1455; Mon, 24 Mar 2025 13:00:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1742817634; bh=qZ+kzep2D1ptJkwQqG63N/Mysy4aFVl8JZ6Q8lpusBs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=uZU/tCbGozGw4rsX3Zh6eItUJmvC2UIJbKBE3hXiYxiZL41cNEAx4pnOByIUxd5y8 nf/o99kwibzXylge/rD34+KPILhJuTcEN+5LWzQxeWe8+Ix6KSJN5oFtuOKLCgNnIp Ll2wlqAk8Cud8Bezxe1dtMvhJbit/mukoxxBXvS8= From: Jai Luthra Date: Mon, 24 Mar 2025 17:31:40 +0530 Subject: [PATCH 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: <20250324-probe_fixes-v1-4-5cd5b9e1cfac@ideasonboard.com> References: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> In-Reply-To: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> To: Jai Luthra , 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=944; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=qZ+kzep2D1ptJkwQqG63N/Mysy4aFVl8JZ6Q8lpusBs=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn4Umx5rfYtyLqQZULmg+MN0oprHVxlG3FonYov A60lobfwwOJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ+FJsQAKCRBD3pH5JJpx RW+PD/95RmwO92Hx+mz79R+oI56r5+LWXWezZpf1ZfvPAbjQWTQSNgYKZBBtyRnFXlpfxb1wOyK TDc9xso6MvPdUVIHrEMPXo2cYkfXVWuGYdnHF58fLwNUA3FZi1TvUDi1t8559JOYw7Ch10yF323 GFzstAJENB0f/V40SqcvS8qg3/NocPiULlbmpf+r6BNyKG03xDOAFOPYMzNEaZ2KaaE1MNdoGjG a1gJGhUzXpClQEbMDXzgN+ybjCoHhYJ9PHFTIvkiYoPVUg/amJIMpKRd0ez7ba545Zyfkwz7Kcr rsdsGYqSnxrRaOxmQjNbcpvU/WT6ykNUZT90rGKqcWdEDj1TxYuCYGyn2WQkjJ2mDJjiXaT7WrL twmPP8I2teLq2jxUw/0bf0BiLhWWFj2fzSLT1ckiBuHtZM7KBDdQPcFssSg+++V+Xr3/85KTRVY ZWh90tNuBZvZLV+GUoXpT91cUOTNVfcgK04ILWXhuB4/9/EeQfMo6FIVlGFDSs00Sh9ytOLrKIP vtIrJ8a7krOBwyXGARZ4OQe0H5Kp5AC8bBVm0G222MqmNIEqVBogSqZd2kSRAHWlr+apGjjCrZI 0t4A0qMWJVWYbd8qz/7MXfuYAEartp802A2t8WTZRRThAi74v1AxWfw7RQsguAk+P9Pb/VUb1tV zAHXeGORHt1uhiA== 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. Signed-off-by: Jai Luthra Reviewed-by: Devarsh Thakkar Reviewed-by: Changhuang Liang --- 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 4d64df829e7585b6e305651f3ff9bdd008508ec5..b489967563cde96ac109c44a665b30e573125721 100644 --- a/drivers/media/platform/cadence/cdns-csi2rx.c +++ b/drivers/media/platform/cadence/cdns-csi2rx.c @@ -477,6 +477,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 Mon Mar 24 12:01:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14027154 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 285DC25DD13; Mon, 24 Mar 2025 12:02:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817748; cv=none; b=oCviotU/4Q5gPhOxrJW68eMEPG+Q69pMEZhr8gBg6uahe6CAvymGDgxX1xDYaqb457/2Fg2nJhr9B3LvH8Bn56G/9o79ITjbRVDqM5kwXruibDs/KJ2y5Z+hZz7TkrZk1YOIHrkj1RD7zgCtl34tBMicaphxtCfDIMeea90qBqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817748; c=relaxed/simple; bh=VG6p0zp7KXcoRUkpdVL0kcmAzSJA6yO4uBBaE7jlmUk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qn36FFdYJN+0JqTj7VLHdkw814mIZGHOmMhd5IBoXnmr4BJbqw18jJJWCn1gM2UXAOOs+VPHqRIa0YdN8C3qETN+D6r6sXN81cSkb4Le9qgA98FStpscTfJKUI5br/MoGEUxxNSAKHAmvXWyBBSHVod5zrqcJe0Aa8aBRy9KyKw= 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=qbLc9Myr; 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="qbLc9Myr" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:904a:b2d:8d57:4705:738e]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 1F0C61059; Mon, 24 Mar 2025 13:00:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1742817639; bh=VG6p0zp7KXcoRUkpdVL0kcmAzSJA6yO4uBBaE7jlmUk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qbLc9MyrhDMJXaKUEWLuSLWZFLADLOBnEhcmZBlLkRqOvU8qAebYSHWL97Nx8Mr04 0G4Qkxz34gZfhClebOlYtH/Dwe3YdT/XpZs2yCrsuynNLMpF9RuPw82PUzSciOl9ow fy1qmWD18LMTzmg8nquwCbkYFzkDmLLDLsHyVMNE= From: Jai Luthra Date: Mon, 24 Mar 2025 17:31:41 +0530 Subject: [PATCH 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: <20250324-probe_fixes-v1-5-5cd5b9e1cfac@ideasonboard.com> References: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> In-Reply-To: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> To: Jai Luthra , 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=7074; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=VG6p0zp7KXcoRUkpdVL0kcmAzSJA6yO4uBBaE7jlmUk=; b=kA0DAAgBQ96R+SSacUUByyZiAGfhSbGimX7+5BsjTvl+madDONRuV+jC1uGsS00evX+AYC/oB YkCMwQAAQgAHRYhBE3g2Bjl1XXo1FqvxUPekfkkmnFFBQJn4UmxAAoJEEPekfkkmnFFAuMP/jDY 9qbpQDxzamDO09gWyEbU+f1hx10sUiuSgT8T7NuCFpofP+aD9Dcit00J9z4dVZOcX4AttLFKt2t QbXRshzlb2G+hmyzw8p+iYLeePSzlsK4/IY3kZt+IFh2G2asRYQKg8coLSiAF8KlHfbR+J7HZOS AU/ka7iF29EpppStoXwxhhLK0mMB8eV85/lubL1mf2fQPk6OR63H+lcxrM7Y1P4V9GUs7f1E879 XBVf6hs9aUAXGM7zx6KGwKkL1ltisPLZlExGy2QGVaVR4JTkZc3i6CIw03eUFowmQcOZH8QMjXS YoorFPG91Mq4B8Ca49klwD3+lR3nshjuT+Kd1tBmcpvSIdw2LJ2mSlbsDoGpZjE3ys1a3se+ljq AyfafGk9LBDfrc6YDwjIroTo2FiZF06XnXTP5YztawEl+4+wggFbZQ9Tz3Q4Kx7DwYIU41NhJQv D1Vcp66DLtRbqQB+QXRIbytTb76f4+4YKW/Bdya1s/3zgksR8Rg08L7vO7fuP9ZWSnxCY8egz1b rT9ZG9quOcaToXvsLdiig0juT2uADV+9+xb8Kg7xq/A7W1OYFSzanPA6SZJMoRASoXSG2snDF1H ZE2mG9Lkp8Ovmdens8RMWMHYszKUyvDStv1P/k7spmAHnav7HsUhZzT71yAcwA5l3uhFSadOu3P nvVop 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 | 74 +++++++++++++++++++++------- drivers/media/platform/cadence/cdns-csi2rx.h | 19 +++++++ 2 files changed, 75 insertions(+), 18 deletions(-) diff --git a/drivers/media/platform/cadence/cdns-csi2rx.c b/drivers/media/platform/cadence/cdns-csi2rx.c index b489967563cde96ac109c44a665b30e573125721..e394afe954fcdb7219dfd14df7a82e8e19cbd572 100644 --- a/drivers/media/platform/cadence/cdns-csi2rx.c +++ b/drivers/media/platform/cadence/cdns-csi2rx.c @@ -22,6 +22,8 @@ #include #include +#include "cdns-csi2rx.h" + #define CSI2RX_DEVICE_CFG_REG 0x000 #define CSI2RX_SOFT_RESET_REG 0x004 @@ -53,6 +55,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 +72,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 +97,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 +114,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) @@ -274,8 +282,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 @@ -456,6 +466,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 Mon Mar 24 12:01:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 14027155 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 5423325F792; Mon, 24 Mar 2025 12:02:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817753; cv=none; b=ZYvyDzChsNUYVa9ZKI2BrSOcMMhNeMIn6484Y2ktiGzOAseVfk37RX1GLi9LmxCWuJXe21CpZo4LJkqcnkVP9PQjZe93AWKjzpJIZ/M0OxwRr6EUCN8F2Ub3aIMSE6+OYmpOlDDRHAStKj4ADtODxplAMpxP/ig/eWYcmzrRqaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742817753; c=relaxed/simple; bh=nO06MvROhvIV3lyFBXov2VZJkg+K/7hCEqnCnTBzYNs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WfzpgfuaLn0IcI1p63IIKN5W0xrk8toNXgMyUveo6JclCYPaT3vNpQ/qwnMkbaXSyMrrmgHmhLizFM/6EBQUe2kakgVCV3ZQ4ZtB8obm719D+sflFdhmcposPorud+qNPr0cJHTeCYZheE55DzH9kGHc5/G0BTlnmcxtjGMHpjc= 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=GXz63yTZ; 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="GXz63yTZ" Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c68:904a:b2d:8d57:4705:738e]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 41FBC455; Mon, 24 Mar 2025 13:00:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1742817643; bh=nO06MvROhvIV3lyFBXov2VZJkg+K/7hCEqnCnTBzYNs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=GXz63yTZXs8/RmudswsztHLBHZ6k+F/IZ6bnpRyvGP+YpPtCs9jCyiLFHntN9v87Z ADJCN4PLaJ34zrlSIIvUYaBcDgxz9RWefGTJDr20UccRnKyMN/sggki7kxnH2iUPwD 1D4fqBtBKEjKIWbTS6BOVUdirVs5jCRE+ZX0zMas= From: Jai Luthra Date: Mon, 24 Mar 2025 17:31:42 +0530 Subject: [PATCH 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: <20250324-probe_fixes-v1-6-5cd5b9e1cfac@ideasonboard.com> References: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> In-Reply-To: <20250324-probe_fixes-v1-0-5cd5b9e1cfac@ideasonboard.com> To: Jai Luthra , 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=nO06MvROhvIV3lyFBXov2VZJkg+K/7hCEqnCnTBzYNs=; b=owEBbQKS/ZANAwAIAUPekfkkmnFFAcsmYgBn4UmxLsOaLPaSUUSuhk7UqYZayUE5U28kB1LgO SMEyARVhSKJAjMEAAEIAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCZ+FJsQAKCRBD3pH5JJpx RTggEADFqq7N5lTqSTGKpKCTkaPDfWwUqwUD05/SnJkGDOchOGoX3kh4wAgywf3W5GzH/chSeDt mBUlRNp7hERCtUs3DgjsET6an9ZLI06hzdk6twtn+EYEaf6DFEHTu2u8orNU+EbTpdg9nTaKZod 8eo9HrA582Cs8Cs+OgawXeEAtZSiaFnRTJldlPe3li2VnkGXvuvMYdlIOGRLHfuC6OZEP/Zfw9Q g6xFgDPcjM9ojST10cOgNPsidAeL6SmfarH+1CSEYJpbMLN+hXSV9MriFN7P7Papf5q2sk+ALZA SP52o6Dws1BBUzQlo68kysNiyGO2mDS0tvjT62whp5jryfu4s+8zvZMlC6bY4R81M1qjP+glxuc /t2vR/tgvQp99rlx6oJlQ3nn4Hqqcz0689BzUXawgynMQ5hzPzNtGdOygros6OLfuLkNJKKU3Ss kdovkYBUUrHAkkP5qCBXoE2P3w1wVNvkbtm9b18OdGQYC2RiXrS9Hkfsst4MQ+c4ssVg0Lk7k02 H2RedjRZRf3u34Cudx444ALSzKf7VWdwJs5fLqDpjBgRpKeTosLksIVyfF60euwaiIP0aSbZGH6 UqxFPMrR5pL1zGo5v4Zn+hevvAA9o9jIj49/le4lfiSf0F6I+u9ZV6xWiQQpubDdfk1aDhya6yY OUDKWLOygVZDnSQ== 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) |