FAILED: patch "[PATCH] scsi: ufs: pltfrm: Disable runtime PM during removal of glue" failed to apply to 6.6-stable tree
Subsystems (10)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x d3326e6a3f9bf1e075be2201fb704c2fdf19e2b7
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024121019-reliably-dig-074d@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d3326e6a3f9bf1e075be2201fb704c2fdf19e2b7 Mon Sep 17 00:00:00 2001
From: Manivannan Sadhasivam <[email protected]>
Date: Mon, 11 Nov 2024 23:18:32 +0530
Subject: [PATCH] scsi: ufs: pltfrm: Disable runtime PM during removal of glue
drivers
When the UFSHCD platform glue drivers are removed, runtime PM should be disabled using pm_runtime_disable() to balance the enablement done in ufshcd_pltfrm_init(). This is also reported by PM core when the glue driver is removed and inserted again:
ufshcd-qcom 1d84000.ufshc: Unbalanced pm_runtime_enable!
So disable runtime PM using a new helper API ufshcd_pltfrm_remove(), that also takes care of removing ufshcd. This helper should be called during the remove() stage of glue drivers.
drivers/ufs/host/cdns-pltfrm.c +1 -3
@@ -307,9 +307,7 @@ static int cdns_ufs_pltfrm_probe(struct platform_device *pdev)*/ static void cdns_ufs_pltfrm_remove (struct platform_device *pdev) { -struct ufs_hba *hba =platform_get_drvdata (pdev); - -ufshcd_remove (hba); +ufshcd_pltfrm_remove (pdev); }static const struct dev_pm_ops cdns_ufs_dev_pm_ops = {
drivers/ufs/host/tc-dwc-g210-pltfrm.c +1 -3
@@ -76,10 +76,8 @@ static int tc_dwc_g210_pltfm_probe(struct platform_device *pdev)*/ static void tc_dwc_g210_pltfm_remove (struct platform_device *pdev) { -struct ufs_hba *hba =platform_get_drvdata (pdev); -pm_runtime_get_sync (&(pdev)->dev); -ufshcd_remove (hba); +ufshcd_pltfrm_remove (pdev); }static const struct dev_pm_ops tc_dwc_g210_pltfm_pm_ops = {
drivers/ufs/host/ufs-exynos.c +1 -1
@@ -1993,7 +1993,7 @@ static void exynos_ufs_remove(struct platform_device *pdev)struct exynos_ufs *ufs =ufshcd_get_variant (hba);pm_runtime_get_sync (&(pdev)->dev); -ufshcd_remove (hba); +ufshcd_pltfrm_remove (pdev);phy_power_off (ufs->phy);phy_exit (ufs->phy);
drivers/ufs/host/ufs-hisi.c +1 -3
@@ -576,9 +576,7 @@ static int ufs_hisi_probe(struct platform_device *pdev)static void ufs_hisi_remove (struct platform_device *pdev) { -struct ufs_hba *hba =platform_get_drvdata (pdev); - -ufshcd_remove (hba); +ufshcd_pltfrm_remove (pdev); }static const struct dev_pm_ops ufs_hisi_pm_ops = {
drivers/ufs/host/ufs-mediatek.c +1 -3
@@ -1879,10 +1879,8 @@ static int ufs_mtk_probe(struct platform_device *pdev)*/ static void ufs_mtk_remove (struct platform_device *pdev) { -struct ufs_hba *hba =platform_get_drvdata (pdev); -pm_runtime_get_sync (&(pdev)->dev); -ufshcd_remove (hba); +ufshcd_pltfrm_remove (pdev); }#ifdef CONFIG_PM_SLEEP
drivers/ufs/host/ufs-qcom.c +1 -1
@@ -1864,7 +1864,7 @@ static void ufs_qcom_remove(struct platform_device *pdev)struct ufs_qcom_host *host =ufshcd_get_variant (hba);pm_runtime_get_sync (&(pdev)->dev); -ufshcd_remove (hba); +ufshcd_pltfrm_remove (pdev);if (host->esi_enabled)platform_device_msi_free_irqs_all (hba->dev); }
drivers/ufs/host/ufs-renesas.c +1 -3
@@ -397,9 +397,7 @@ static int ufs_renesas_probe(struct platform_device *pdev)static void ufs_renesas_remove (struct platform_device *pdev) { -struct ufs_hba *hba =platform_get_drvdata (pdev); - -ufshcd_remove (hba); +ufshcd_pltfrm_remove (pdev); }static struct platform_driver ufs_renesas_platform = {
drivers/ufs/host/ufs-sprd.c +1 -3
@@ -427,10 +427,8 @@ static int ufs_sprd_probe(struct platform_device *pdev)static void ufs_sprd_remove (struct platform_device *pdev) { -struct ufs_hba *hba =platform_get_drvdata (pdev); -pm_runtime_get_sync (&(pdev)->dev); -ufshcd_remove (hba); +ufshcd_pltfrm_remove (pdev); }static const struct dev_pm_ops ufs_sprd_pm_ops = {
drivers/ufs/host/ufshcd-pltfrm.c +13 -0
@@ -524,6 +524,19 @@ int ufshcd_pltfrm_init(struct platform_device *pdev, }EXPORT_SYMBOL_GPL (ufshcd_pltfrm_init); +/** +* ufshcd_pltfrm_remove - Remove ufshcd platform +* @pdev: pointer to Platform device handle +*/ +void ufshcd_pltfrm_remove (struct platform_device *pdev) +{ +struct ufs_hba *hba =platform_get_drvdata (pdev); + +ufshcd_remove (hba); +pm_runtime_disable (&pdev->dev); +} +EXPORT_SYMBOL_GPL (ufshcd_pltfrm_remove); +MODULE_AUTHOR ("Santosh Yaragnavi <[email protected]>" );MODULE_AUTHOR ("Vinayak Holikatti <[email protected]>" );MODULE_DESCRIPTION ("UFS host controller Platform bus based glue driver" );
drivers/ufs/host/ufshcd-pltfrm.h +1 -0
@@ -31,6 +31,7 @@ int ufshcd_negotiate_pwr_params(const struct ufs_host_params *host_params,void ufshcd_init_host_params (struct ufs_host_params *host_params);int ufshcd_pltfrm_init (struct platform_device *pdev,const struct ufs_hba_variant_ops *vops); +void ufshcd_pltfrm_remove (struct platform_device *pdev);int ufshcd_populate_vreg (struct device *dev,const char *name,struct ufs_vreg **out_vreg,bool skip_current);