From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E454BCCF9E5 for ; Thu, 23 Oct 2025 19:51:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References :Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=PDPciPWq8/egMPa32WzZoh6RyF6o/jlJ1rEE5BDVlXM=; b=cW1qiwDHjjBHN3ATr96fQ2/3Zx /5C8YnKL05VzRPnX7G1gTDJY8w1puSSfjVql8nvJCbq0F0aDmzViiV9is6lr0Qt8NDwK1iBmgjYPD 69Bpe2txUfYYHxX0omY/oHJUsFRjY7xp63CPBesn79ca+aUZd5h7s/0Za2zMAnYfUQ0I9UhMX0ktb T0ZRLFO9FVwiU8fviR9aHvAtyC0R9nXw6scKCM5qsqjyb5wuYTj8xxXRQDR9iZa0HialQGu1z7vC9 c4SyYVY+scUAO0oa3ifytFCFhpPCbMBgcdwBWawwxyhkA295QOMc2W+YbGV0RZRJkWFGN4aropb68 FEeAiJpA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vC1LV-00000007QIJ-1Q36; Thu, 23 Oct 2025 19:51:37 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vC1LR-00000007QD0-0FsD; Thu, 23 Oct 2025 19:51:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Cc:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Sender:Reply-To:Content-ID:Content-Description; bh=PDPciPWq8/egMPa32WzZoh6RyF6o/jlJ1rEE5BDVlXM=; b=bijw5N/a8cgId6LU56BB6TmXSV muuVOhFf77551sxHZYSCZkb4qpOunVTai8OSTAD4U54D5Z1TXEyG0zyFTk6/UHRGlWmcIRjaaEfKf EJMDAFbFdsq+mNyQfkfqb0y0TFFJ/z5hiN5uwI5eyEK1AyhYWPt+qcqpQGfdW0jzr4W5xFaiBHMHQ srOmHnV2z07Q4xuvee2QZDY0wHZC/a5FY7lS+004OhVw/ubMc+LHGlh10435z9Ab2lDzdISRAJHye 7UcDNVRxmvhhaBnjQkCnmvW9zzYlF/JI0Ruqp7SBSGzZU3ZieuyrNIxdkyawLhdGMN5gWr6/TXIzC EeL6QZPw==; Received: from sender4-pp-f112.zoho.com ([136.143.188.112]) by desiato.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vC0Ti-00000001gCb-1wqp; Thu, 23 Oct 2025 18:56:05 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1761249076; cv=none; d=zohomail.com; s=zohoarc; b=BDXph1ibxYFNEdrzdjj1BzFaiDkYUeLARSE8JiJ1kFn/W9BI7Zm1WNKz4sTY9fhmIOKFgkUzeRpV7CTNYWpX9b7G7cDwGgPLqIQoMvDtCVIoQ0tKzBKmOBzO6A7aXvX2BEz+LEPI/+6Lch3uKCccXRqlF7jNi7AShDyePbnX6HE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761249076; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=PDPciPWq8/egMPa32WzZoh6RyF6o/jlJ1rEE5BDVlXM=; b=KKIMFtvrGTQ0O+c/+8sB4Zh8fiXN3cA3S9gRkB0Lgrw8ruHS33aSypojhncitUG4MwOyXCKRx9ewfI8fBYuouKr+XEbkAswiAtpLXcyjo5SlR8X9R4c1IiFOVIeWqWp5ZuU7W4KrhvNpxiGQSO1ZDfZ1thoXwAPbDH1YsggEie4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1761249076; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=PDPciPWq8/egMPa32WzZoh6RyF6o/jlJ1rEE5BDVlXM=; b=EIQgZEjYYZ53loLETsS0AVyQos9N6d8TL06yBkPIXXD3UwYjLhtLvdJGAojES4ZA EAtMFgBdzQ4w86xIX47MZ9PlFfHeZHxrvEyYM4vT6PvkFpZS1Ng3GONFkpTBDPRyWt4 fNeSCPgYF/TECyJnWanugZQNlN/mhIw+CnhB+hoM= Received: by mx.zohomail.com with SMTPS id 1761249075467309.24031300806837; Thu, 23 Oct 2025 12:51:15 -0700 (PDT) From: Nicolas Frattaroli Date: Thu, 23 Oct 2025 21:49:28 +0200 Subject: [PATCH v3 10/24] scsi: ufs: mediatek: Rework probe function MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20251023-mt8196-ufs-v3-10-0f04b4a795ff@collabora.com> References: <20251023-mt8196-ufs-v3-0-0f04b4a795ff@collabora.com> In-Reply-To: <20251023-mt8196-ufs-v3-0-0f04b4a795ff@collabora.com> To: Alim Akhtar , Avri Altman , Bart Van Assche , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Chunfeng Yun , Vinod Koul , Kishon Vijay Abraham I , Peter Wang , Stanley Jhu , "James E.J. Bottomley" , "Martin K. Petersen" , Philipp Zabel , Liam Girdwood , Mark Brown Cc: Louis-Alexis Eyraud , kernel@collabora.com, linux-scsi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-phy@lists.infradead.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251023_195602_894493_02B21D35 X-CRM114-Status: GOOD ( 18.17 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Remove the ti,syscon-reset cruft. Make PHY mandatory. All the compatibles supported by the binding make it mandatory. Entertain this driver's insistence on playing with the PHY's RPM, but at least fix the part where it doesn't increase the reference count, which would lead to use-after-free. Signed-off-by: Nicolas Frattaroli --- drivers/ufs/host/ufs-mediatek.c | 87 +++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 55 deletions(-) diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c index 9c0ac72d6e43..889a1d58a041 100644 --- a/drivers/ufs/host/ufs-mediatek.c +++ b/drivers/ufs/host/ufs-mediatek.c @@ -2353,74 +2353,49 @@ MODULE_DEVICE_TABLE(of, ufs_mtk_of_match); */ static int ufs_mtk_probe(struct platform_device *pdev) { - int err; - struct device *dev = &pdev->dev, *phy_dev = NULL; - struct device_node *reset_node, *phy_node = NULL; - struct platform_device *reset_pdev, *phy_pdev = NULL; - struct device_link *link; - struct ufs_hba *hba; + struct platform_device *phy_pdev; + struct device *dev = &pdev->dev; + struct device_node *phy_node; struct ufs_mtk_host *host; + struct device *phy_dev; + struct ufs_hba *hba; + int err; - reset_node = of_find_compatible_node(NULL, NULL, - "ti,syscon-reset"); - if (!reset_node) { - dev_notice(dev, "find ti,syscon-reset fail\n"); - goto skip_reset; - } - reset_pdev = of_find_device_by_node(reset_node); - if (!reset_pdev) { - dev_notice(dev, "find reset_pdev fail\n"); - goto skip_reset; - } - link = device_link_add(dev, &reset_pdev->dev, - DL_FLAG_AUTOPROBE_CONSUMER); - put_device(&reset_pdev->dev); - if (!link) { - dev_notice(dev, "add reset device_link fail\n"); - goto skip_reset; - } - /* supplier is not probed */ - if (link->status == DL_STATE_DORMANT) { - err = -EPROBE_DEFER; - goto out; - } - -skip_reset: /* find phy node */ phy_node = of_parse_phandle(dev->of_node, "phys", 0); + if (!phy_node) + return dev_err_probe(dev, -ENOENT, "No PHY node found\n"); - if (phy_node) { - phy_pdev = of_find_device_by_node(phy_node); - if (!phy_pdev) - goto skip_phy; - phy_dev = &phy_pdev->dev; + phy_pdev = of_find_device_by_node(phy_node); + of_node_put(phy_node); + if (!phy_pdev) + return dev_err_probe(dev, -ENODEV, "No PHY device found\n"); - pm_runtime_set_active(phy_dev); - pm_runtime_enable(phy_dev); - pm_runtime_get_sync(phy_dev); + phy_dev = &phy_pdev->dev; - put_device(phy_dev); - dev_info(dev, "phys node found\n"); - } else { - dev_notice(dev, "phys node not found\n"); + err = pm_runtime_set_active(phy_dev); + if (err) { + dev_err_probe(dev, err, "Failed to activate PHY RPM\n"); + goto err_put_phy; + } + pm_runtime_enable(phy_dev); + err = pm_runtime_get_sync(phy_dev); + if (err) { + dev_err_probe(dev, err, "Failed to power on PHY\n"); + goto err_put_phy; } -skip_phy: /* perform generic probe */ err = ufshcd_pltfrm_init(pdev, &ufs_hba_mtk_vops); if (err) { - dev_err(dev, "probe failed %d\n", err); - goto out; + dev_err_probe(dev, err, "Generic platform probe failed\n"); + goto err_put_phy; } hba = platform_get_drvdata(pdev); - if (!hba) - goto out; - if (phy_node && phy_dev) { - host = ufshcd_get_variant(hba); - host->phy_dev = phy_dev; - } + host = ufshcd_get_variant(hba); + host->phy_dev = phy_dev; /* * Because the default power setting of VSx (the upper layer of @@ -2429,9 +2404,11 @@ static int ufs_mtk_probe(struct platform_device *pdev) */ ufs_mtk_dev_vreg_set_lpm(hba, false); -out: - of_node_put(phy_node); - of_node_put(reset_node); + return 0; + +err_put_phy: + put_device(phy_dev); + return err; } -- 2.51.1.dirty