Hi Avri,
Thanks for your review~
On 1/17/2025 5:40 AM, Avri Altman wrote:
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.
Co-developed-by: Ziqi Chen <quic_ziqichen@xxxxxxxxxxx>
Signed-off-by: Ziqi Chen <quic_ziqichen@xxxxxxxxxxx>
Signed-off-by: Can Guo <quic_cang@xxxxxxxxxxx>
---
drivers/ufs/host/ufs-qcom.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c index
1e8a23eb8c13..64263fa884f5 100644
--- a/drivers/ufs/host/ufs-qcom.c
+++ b/drivers/ufs/host/ufs-qcom.c
@@ -1803,6 +1803,37 @@ 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) {
Maybe you can use here the UNIPRO_CORE_CLK_FREQ_xx
The UNIPRO_CORE_CLK_FREQ_xx is used for "cycles_in_1us" which be handled
by ceil() function. It is not an exact frequency number and is not
appropriate for use here.
Thanks,
Avri
-Ziqi
+ 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, "Unsupported clock freq\n");
+ break;
+ }
+
+ return ret;
+}
+
/*
* struct ufs_hba_qcom_vops - UFS QCOM specific variant operations
*
@@ -1833,6 +1864,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