On 03/02/2025 09:11, Ziqi Chen wrote:
With OPP V2 enabled, devfreq can scale clocks amongst multiple frequency plans. However, the gear speed is only toggled between min and max during clock scaling. Enable multi-level gear scaling by mapping clock frequencies to gear speeds, so that when devfreq scales clock frequencies we can put the UFS link at the appropraite gear speeds accordingly. This series has been tested on below platforms - sm8550 mtp + UFS3.1 SM8650 MTP + UFS3.1 SM8750 MTP + UFS4.0 v1 -> v2: 1. Withdraw old patch 8/8 "ARM: dts: msm: Use Operation Points V2 for UFS on SM8650" 2. Add new patch 8/8 "ABI: sysfs-driver-ufs: Add missing UFS sysfs addributes" 3. Modify commit message for "scsi: ufs: core: Pass target_freq to clk_scale_notify() vops" and "scsi: ufs: qcom: Pass target_freq to clk scale pre and post change" 4. In "scsi: ufs: qcom: Pass target_freq to clk scale pre and post change", use common Macro HZ_PER_MHZ in function ufs_qcom_set_core_clk_ctrl() 5. In "scsi: ufs: qcom: Implement the freq_to_gear_speed() vops", print out freq and gear info as debugging message 6. In "scsi: ufs: core: Enable multi-level gear scaling", rename the lable "do_pmc" to "config_pwr_mode" 7. In "scsi: ufs: core: Toggle Write Booster during clock", initialize the local variables "wb_en" as "false" v2 -> v3: 1. Change 'vops' to 'vop' in all commit message 2. keep the indentation consistent for clk_scale_notify() definition. 3. In "scsi: ufs: core: Add a vop to map clock frequency to gear speed", "scsi: ufs: qcom: Implement the freq_to_gear_speed() vop" and "scsi: ufs: core: Enable multi-level gear scaling", remove the parameter 'gear' and use it as return result in function freq_to_gear_speed() 4. In "scsi: ufs: qcom: Implement the freq_to_gear_speed(), removed the variable 'ret' in function ufs_qcom_freq_to_gear_speed() 5. In "scsi: ufs: core: Enable multi-level gear scaling", use assignment instead memcpy() in function ufshcd_scale_gear() 6. Improve the grammar of attributes' descriptions in “ABI: sysfs-driver-ufs: Add missing UFS sysfs attributes” 7. Typo fixed for some commit messages. Can Guo (6): scsi: ufs: core: Pass target_freq to clk_scale_notify() vop scsi: ufs: qcom: Pass target_freq to clk scale pre and post change scsi: ufs: core: Add a vop to map clock frequency to gear speed scsi: ufs: qcom: Implement the freq_to_gear_speed() vop scsi: ufs: core: Enable multi-level gear scaling scsi: ufs: core: Toggle Write Booster during clock scaling base on gear speed Ziqi Chen (2): scsi: ufs: core: Check if scaling up is required when disable clkscale ABI: sysfs-driver-ufs: Add missing UFS sysfs attributes Documentation/ABI/testing/sysfs-driver-ufs | 33 ++++++++++ drivers/ufs/core/ufshcd-priv.h | 15 ++++- drivers/ufs/core/ufshcd.c | 76 +++++++++++++++++----- drivers/ufs/host/ufs-mediatek.c | 1 + drivers/ufs/host/ufs-qcom.c | 62 ++++++++++++++---- include/ufs/ufshcd.h | 9 ++- 6 files changed, 160 insertions(+), 36 deletions(-)
Tested-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx> # on SM8550-QRD Tested-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx> # on SM8550-HDK Tested-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx> # on SM8650-HDK I added some traces and played with devfreq max_freq while copying data from the UFS disk, no issues observed. Neil