]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: ufs: host: mediatek: Fine-tune clock scaling
authorPeter Wang <peter.wang@mediatek.com>
Mon, 11 Aug 2025 13:11:20 +0000 (21:11 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 15 Aug 2025 02:49:12 +0000 (22:49 -0400)
Disable clock scaling for UFS versions below 4.0. Clock scaling is
unnecessary for these versions, and this change ensures that the feature
is only enabled for compatible UFS versions.

Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Link: https://lore.kernel.org/r/20250811131423.3444014-5-peter.wang@mediatek.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/host/ufs-mediatek.c

index 32f8d8da381e642b7c66001ea2a5e40f8d48c17d..2b55e77d5100f6284ad852675193b9db9eb737a3 100644 (file)
@@ -29,6 +29,7 @@
 #include "ufs-mediatek-sip.h"
 
 static int  ufs_mtk_config_mcq(struct ufs_hba *hba, bool irq);
+static void _ufs_mtk_clk_scale(struct ufs_hba *hba, bool scale_up);
 
 #define CREATE_TRACE_POINTS
 #include "ufs-mediatek-trace.h"
@@ -1144,6 +1145,17 @@ static void ufs_mtk_fix_ahit(struct ufs_hba *hba)
        ufs_mtk_setup_clk_gating(hba);
 }
 
+static void ufs_mtk_fix_clock_scaling(struct ufs_hba *hba)
+{
+       /* UFS version is below 4.0, clock scaling is not necessary */
+       if ((hba->dev_info.wspecversion < 0x0400)  &&
+               ufs_mtk_is_clk_scale_ready(hba)) {
+               hba->caps &= ~UFSHCD_CAP_CLK_SCALING;
+
+               _ufs_mtk_clk_scale(hba, false);
+       }
+}
+
 static void ufs_mtk_init_mcq_irq(struct ufs_hba *hba)
 {
        struct ufs_mtk_host *host = ufshcd_get_variant(hba);
@@ -1774,6 +1786,7 @@ static void ufs_mtk_fixup_dev_quirks(struct ufs_hba *hba)
        ufs_mtk_vreg_fix_vcc(hba);
        ufs_mtk_vreg_fix_vccqx(hba);
        ufs_mtk_fix_ahit(hba);
+       ufs_mtk_fix_clock_scaling(hba);
 }
 
 static void ufs_mtk_event_notify(struct ufs_hba *hba,