From: Can Guo <quic_cang@xxxxxxxxxxx> Implement the freq_to_gear_speed() vops to map the unipro core clock frequency to the corresponding maximum supported gear speed. Signed-off-by: Can Guo <quic_cang@xxxxxxxxxxx> Co-developed-by: Ziqi Chen <quic_ziqichen@xxxxxxxxxxx> Signed-off-by: Ziqi Chen <quic_ziqichen@xxxxxxxxxxx> --- v1 -> v2: Print out freq and gear info as debugging message. --- drivers/ufs/host/ufs-qcom.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c index a1eb3cab45e4..77cc1b8019a9 100644 --- a/drivers/ufs/host/ufs-qcom.c +++ b/drivers/ufs/host/ufs-qcom.c @@ -1804,6 +1804,40 @@ static int ufs_qcom_config_esi(struct ufs_hba *hba) return ret; } +static int ufs_qcom_freq_to_gear_speed(struct ufs_hba *hba, unsigned long freq, u32 *gear) +{ + int ret = 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: + ret = -EINVAL; + dev_err(hba->dev, "%s: Unsupported clock freq : %lu\n", __func__, freq); + break; + } + + if (!ret) + dev_dbg(hba->dev, "%s: Freq %lu to Gear %u\n", __func__, freq, *gear); + + return ret; +} + /* * struct ufs_hba_qcom_vops - UFS QCOM specific variant operations * @@ -1834,6 +1868,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, }; /** -- 2.34.1