Message ID | 20250122100214.489749-2-quic_ziqichen@quicinc.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Support Multi-frequency scale for UFS | expand |
On Wed, 2025-01-22 at 18:02 +0800, Ziqi Chen wrote: > From: Can Guo <quic_cang@quicinc.com> > > Instead of only two frequencies, If OPP V2 is used, the UFS devfreq > clock > scaling may scale the clock among multiple frequencies, so just > passing > up/down to vops clk_scale_notify() is not enough to cover the > intermediate > clock freqs between the min and max freqs. Hence pass the target_freq > , > which will be used in successive commits, to clk_scale_notify() to > allow > the vops to perform corresponding configurations with regard to the > clock > freqs. > > 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> Reviewed-by: Bean Huo <beanhuo@micron.com>
On 1/22/25 2:02 AM, Ziqi Chen wrote: > diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h > index d7aca9e61684..a4dac897a169 100644 > --- a/include/ufs/ufshcd.h > +++ b/include/ufs/ufshcd.h > @@ -344,7 +344,7 @@ struct ufs_hba_variant_ops { > void (*exit)(struct ufs_hba *); > u32 (*get_ufs_hci_version)(struct ufs_hba *); > int (*set_dma_mask)(struct ufs_hba *); > - int (*clk_scale_notify)(struct ufs_hba *, bool, > + int (*clk_scale_notify)(struct ufs_hba *, bool, unsigned long, > enum ufs_notify_change_status); > int (*setup_clocks)(struct ufs_hba *, bool, > enum ufs_notify_change_status); Please keep the indentation consistent. Thanks, Bart.
On 1/23/2025 2:19 AM, Bart Van Assche wrote: > On 1/22/25 2:02 AM, Ziqi Chen wrote: >> diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h >> index d7aca9e61684..a4dac897a169 100644 >> --- a/include/ufs/ufshcd.h >> +++ b/include/ufs/ufshcd.h >> @@ -344,7 +344,7 @@ struct ufs_hba_variant_ops { >> void (*exit)(struct ufs_hba *); >> u32 (*get_ufs_hci_version)(struct ufs_hba *); >> int (*set_dma_mask)(struct ufs_hba *); >> - int (*clk_scale_notify)(struct ufs_hba *, bool, >> + int (*clk_scale_notify)(struct ufs_hba *, bool, unsigned long, >> enum ufs_notify_change_status); >> int (*setup_clocks)(struct ufs_hba *, bool, >> enum ufs_notify_change_status); > > Please keep the indentation consistent. > > Thanks, > > Bart. Thanks, Bart, I will improve it. -Ziqi
diff --git a/drivers/ufs/core/ufshcd-priv.h b/drivers/ufs/core/ufshcd-priv.h index 9ffd94ddf8c7..0549b65f71ed 100644 --- a/drivers/ufs/core/ufshcd-priv.h +++ b/drivers/ufs/core/ufshcd-priv.h @@ -117,11 +117,12 @@ static inline u32 ufshcd_vops_get_ufs_hci_version(struct ufs_hba *hba) return ufshcd_readl(hba, REG_UFS_VERSION); } -static inline int ufshcd_vops_clk_scale_notify(struct ufs_hba *hba, - bool up, enum ufs_notify_change_status status) +static inline int ufshcd_vops_clk_scale_notify(struct ufs_hba *hba, bool up, + unsigned long target_freq, + enum ufs_notify_change_status status) { if (hba->vops && hba->vops->clk_scale_notify) - return hba->vops->clk_scale_notify(hba, up, status); + return hba->vops->clk_scale_notify(hba, up, target_freq, status); return 0; } diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index acc3607bbd9c..8d295cc827cc 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -1157,7 +1157,7 @@ static int ufshcd_scale_clks(struct ufs_hba *hba, unsigned long freq, int ret = 0; ktime_t start = ktime_get(); - ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE); + ret = ufshcd_vops_clk_scale_notify(hba, scale_up, freq, PRE_CHANGE); if (ret) goto out; @@ -1168,7 +1168,7 @@ static int ufshcd_scale_clks(struct ufs_hba *hba, unsigned long freq, if (ret) goto out; - ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE); + ret = ufshcd_vops_clk_scale_notify(hba, scale_up, freq, POST_CHANGE); if (ret) { if (hba->use_pm_opp) ufshcd_opp_set_rate(hba, diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c index 135cd78109e2..977dd0caaef6 100644 --- a/drivers/ufs/host/ufs-mediatek.c +++ b/drivers/ufs/host/ufs-mediatek.c @@ -1643,6 +1643,7 @@ static void ufs_mtk_clk_scale(struct ufs_hba *hba, bool scale_up) } static int ufs_mtk_clk_scale_notify(struct ufs_hba *hba, bool scale_up, + unsigned long target_freq, enum ufs_notify_change_status status) { if (!ufshcd_is_clkscaling_supported(hba)) diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c index 68040b2ab5f8..b6eef975dc46 100644 --- a/drivers/ufs/host/ufs-qcom.c +++ b/drivers/ufs/host/ufs-qcom.c @@ -1333,8 +1333,9 @@ static int ufs_qcom_clk_scale_down_post_change(struct ufs_hba *hba) return ufs_qcom_set_core_clk_ctrl(hba, false); } -static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba, - bool scale_up, enum ufs_notify_change_status status) +static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba, bool scale_up, + unsigned long target_freq, + enum ufs_notify_change_status status) { struct ufs_qcom_host *host = ufshcd_get_variant(hba); int err; diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h index d7aca9e61684..a4dac897a169 100644 --- a/include/ufs/ufshcd.h +++ b/include/ufs/ufshcd.h @@ -344,7 +344,7 @@ struct ufs_hba_variant_ops { void (*exit)(struct ufs_hba *); u32 (*get_ufs_hci_version)(struct ufs_hba *); int (*set_dma_mask)(struct ufs_hba *); - int (*clk_scale_notify)(struct ufs_hba *, bool, + int (*clk_scale_notify)(struct ufs_hba *, bool, unsigned long, enum ufs_notify_change_status); int (*setup_clocks)(struct ufs_hba *, bool, enum ufs_notify_change_status);