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 0796FD6ACFE for ; Thu, 18 Dec 2025 12:56:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :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=Aoka3CVlUvJs1iy79EDDUIsxQrK96iQ78Tu3zwgzEzw=; b=pWlfD/szOI+s1m cnqpZs8k95r4ayBRqnp4OQFDlAK9YLMBGL8rfZ/T9ehfETF278f8SJarf6RbJqwncYQTNBHDwcaJY zzAI1W2VhtyvvaL65J+/zyKtOQhYv3rvp0b75/IG5P1bzjso1FP0vIj7DlnJtQuWoCmi8BtB61jbB aUuIFUw7CHqZTFSPkOvWtBxm6l4Lf65lyrSWCVsU3pRqgy4f7a8SVQhIqJ7H+gtmX35djDrT33OGF 0Ue4bg8bYt3ZLKyitcCsXtaJ7Sab9yM3aiM711FEn5pTs6llgtKCjxRGLufKMb2ZEQS85DJh99LPl oKhwaC2U16dfVSJoMibw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vWDYs-00000008SUt-2PxD; Thu, 18 Dec 2025 12:56:54 +0000 Received: from sender4-pp-f112.zoho.com ([136.143.188.112]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vWDYj-00000008SKi-3dwH; Thu, 18 Dec 2025 12:56:52 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1766062596; cv=none; d=zohomail.com; s=zohoarc; b=V1HiIBAJK9fFFcasnXHSMCxOTHNFItehKI1o+x4YApuVF2AfaRmR7ZUR9JmlVcox8tvW1UVqdeZj11dQ7VvCoOr10g5RwIx8aIZwt1aTIKWWf4KoFT8W0n39FmUVYX9Ff8NEXwnRhLDTLNsJOB+zTGoaqxXa6IwNH6ZkmE+roic= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766062596; 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=WDjU2wePJnzp8vyzpzfk9DFxr3PsTDkFcbdJVt7wnaQ=; b=n4kTLDNZ/q1UOuxj9OYyGkyd6BRtXm1R1sHfqP2JnwllTv195qkYqQSeYgP/ehT/cmiqMaNyR8XP7RErF8Lfad2so2NIwjyRc5g/74qXLupeAvWRraatzcCLdGQTLilNvOJgIzfsTmJ713ejyrABOwFOmkIiIDqVbijqcnnqftI= 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=1766062596; 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=WDjU2wePJnzp8vyzpzfk9DFxr3PsTDkFcbdJVt7wnaQ=; b=ajVb0+fjfA9EMF0HWEzD0sCrvWVGaCA3kkHKfKujhtcqvsa1dFAOITB5HLxIYsyT JeKh/ELeTCl+aYKSQTG0gncVLRdGAbfdrP7NXomo76bWZMCSjoSJedWTj42d2KrcXUN 2vqoqfPivz2q7B/Yg0Ue6eStbAsmdGMnyBGYjgh0= Received: by mx.zohomail.com with SMTPS id 1766062594906868.1953715550579; Thu, 18 Dec 2025 04:56:34 -0800 (PST) From: Nicolas Frattaroli Date: Thu, 18 Dec 2025 13:55:00 +0100 Subject: [PATCH v4 10/25] scsi: ufs: mediatek: Handle misc host voltage regulators MIME-Version: 1.0 Message-Id: <20251218-mt8196-ufs-v4-10-ddec7a369dd2@collabora.com> References: <20251218-mt8196-ufs-v4-0-ddec7a369dd2@collabora.com> In-Reply-To: <20251218-mt8196-ufs-v4-0-ddec7a369dd2@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 , Chaotian Jing , Neil Armstrong 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-20251218_045645_997585_37FC5634 X-CRM114-Status: GOOD ( 16.64 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org MediaTek SoCs handled by this driver contain a per-SoC specific set of miscellaneous supplies. These feed parts of the UFS controller silicon inside the SoC, as opposed to the UFS card. Add the necessary driver code to acquire these supplies using the regulator bulk API, and disable/enable them during suspend/resume. Signed-off-by: Nicolas Frattaroli --- drivers/ufs/host/ufs-mediatek.c | 61 ++++++++++++++++++++++++++++++++++++++--- drivers/ufs/host/ufs-mediatek.h | 2 ++ 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c index 9c0ac72d6e43..10d6b69e91a5 100644 --- a/drivers/ufs/host/ufs-mediatek.c +++ b/drivers/ufs/host/ufs-mediatek.c @@ -40,6 +40,8 @@ static void _ufs_mtk_clk_scale(struct ufs_hba *hba, bool scale_up); struct ufs_mtk_soc_data { bool has_avdd09; + u8 num_reg_names; + const char *const *reg_names; }; static const struct ufs_dev_quirk ufs_mtk_dev_fixups[] = { @@ -1190,8 +1192,37 @@ static int ufs_mtk_get_supplies(struct ufs_mtk_host *host) { struct device *dev = host->hba->dev; const struct ufs_mtk_soc_data *data = of_device_get_match_data(dev); + int ret; - if (!data || !data->has_avdd09) + if (!data) + return 0; + + if (data->num_reg_names) { + host->reg_misc = devm_kcalloc(dev, data->num_reg_names, + sizeof(*host->reg_misc), GFP_KERNEL); + if (!host->reg_misc) + return -ENOMEM; + + regulator_bulk_set_supply_names(host->reg_misc, data->reg_names, + data->num_reg_names); + + ret = devm_regulator_bulk_get(dev, data->num_reg_names, host->reg_misc); + if (ret) { + dev_err(dev, "Failed to get misc regulators: %pe\n", ERR_PTR(ret)); + return ret; + } + + host->num_reg_misc = data->num_reg_names; + + ret = regulator_bulk_enable(host->num_reg_misc, host->reg_misc); + if (ret) { + dev_err(dev, "Failed to turn on misc regulators: %pe\n", + ERR_PTR(ret)); + return ret; + } + } + + if (!data->has_avdd09) return 0; host->reg_avdd09 = devm_regulator_get_optional(dev, "avdd09"); @@ -1833,7 +1864,9 @@ static int ufs_mtk_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op, _ufs_mtk_clk_scale(hba, false); } - return 0; + err = regulator_bulk_disable(host->num_reg_misc, host->reg_misc); + + return err; fail: /* * Set link as off state enforcedly to trigger @@ -1850,6 +1883,10 @@ static int ufs_mtk_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) struct arm_smccc_res res; struct ufs_mtk_host *host = ufshcd_get_variant(hba); + err = regulator_bulk_enable(host->num_reg_misc, host->reg_misc); + if (err) + return err; + if (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL) ufs_mtk_dev_vreg_set_lpm(hba, false); @@ -2333,14 +2370,30 @@ static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = { .config_scsi_dev = ufs_mtk_config_scsi_dev, }; +static const char *const ufs_mtk_regs_avdd12_avdd18[] = { + "avdd12", "avdd18" +}; + +static const char *const ufs_mtk_regs_avdd12_ckbuf_avdd18[] = { + "avdd12", "avdd12-ckbuf", "avdd18" +}; + static const struct ufs_mtk_soc_data mt8183_data = { .has_avdd09 = true, + .reg_names = ufs_mtk_regs_avdd12_avdd18, + .num_reg_names = ARRAY_SIZE(ufs_mtk_regs_avdd12_avdd18), +}; + +static const struct ufs_mtk_soc_data mt8192_8195_data = { + .has_avdd09 = false, + .reg_names = ufs_mtk_regs_avdd12_ckbuf_avdd18, + .num_reg_names = ARRAY_SIZE(ufs_mtk_regs_avdd12_ckbuf_avdd18), }; static const struct of_device_id ufs_mtk_of_match[] = { { .compatible = "mediatek,mt8183-ufshci", .data = &mt8183_data }, - { .compatible = "mediatek,mt8192-ufshci" }, - { .compatible = "mediatek,mt8195-ufshci" }, + { .compatible = "mediatek,mt8192-ufshci", .data = &mt8192_8195_data }, + { .compatible = "mediatek,mt8195-ufshci", .data = &mt8192_8195_data }, {}, }; MODULE_DEVICE_TABLE(of, ufs_mtk_of_match); diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h index 24c8941f6b86..cb32fc987864 100644 --- a/drivers/ufs/host/ufs-mediatek.h +++ b/drivers/ufs/host/ufs-mediatek.h @@ -176,6 +176,8 @@ struct ufs_mtk_mcq_intr_info { struct ufs_mtk_host { struct phy *mphy; struct regulator *reg_avdd09; + struct regulator_bulk_data *reg_misc; + u8 num_reg_misc; struct reset_control_bulk_data resets[MTK_UFS_NUM_RESETS]; struct ufs_hba *hba; struct ufs_mtk_crypt_cfg *crypt; -- 2.52.0 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy