]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: ufs: qcom: Implement the freq_to_gear_speed() vop
authorCan Guo <quic_cang@quicinc.com>
Thu, 13 Feb 2025 08:00:04 +0000 (16:00 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 21 Feb 2025 02:53:49 +0000 (21:53 -0500)
Implement the freq_to_gear_speed() vop to map the unipro core clock
frequency to the corresponding maximum supported gear speed.

Signed-off-by: Can Guo <quic_cang@quicinc.com>
Co-developed-by: Ziqi Chen <quic_ziqichen@quicinc.com>
Signed-off-by: Ziqi Chen <quic_ziqichen@quicinc.com>
Link: https://lore.kernel.org/r/20250213080008.2984807-5-quic_ziqichen@quicinc.com
Reviewed-by: Bean Huo <beanhuo@micron.com>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/host/ufs-qcom.c

index 016aba022f7ea2df53f358e3aa6ac777e873a024..9e90d2ea23dea95a6168417119a49bc6a8edacb9 100644 (file)
@@ -1858,6 +1858,36 @@ static int ufs_qcom_config_esi(struct ufs_hba *hba)
        return ret;
 }
 
+static u32 ufs_qcom_freq_to_gear_speed(struct ufs_hba *hba, unsigned long freq)
+{
+       u32 gear = 0;
+
+       switch (freq) {
+       case 403000000:
+               gear = UFS_HS_G5;
+               break;
+       case 300000000:
+               gear = UFS_HS_G4;
+               break;
+       case 201500000:
+               gear = UFS_HS_G3;
+               break;
+       case 150000000:
+       case 100000000:
+               gear = UFS_HS_G2;
+               break;
+       case 75000000:
+       case 37500000:
+               gear = UFS_HS_G1;
+               break;
+       default:
+               dev_err(hba->dev, "%s: Unsupported clock freq : %lu\n", __func__, freq);
+               break;
+       }
+
+       return gear;
+}
+
 /*
  * struct ufs_hba_qcom_vops - UFS QCOM specific variant operations
  *
@@ -1886,6 +1916,7 @@ static const struct ufs_hba_variant_ops ufs_hba_qcom_vops = {
        .op_runtime_config      = ufs_qcom_op_runtime_config,
        .get_outstanding_cqs    = ufs_qcom_get_outstanding_cqs,
        .config_esi             = ufs_qcom_config_esi,
+       .freq_to_gear_speed     = ufs_qcom_freq_to_gear_speed,
 };
 
 /**