diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index 66178f5571a3..385ea94cf9eb 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -479,10 +479,7 @@ enum ufs_dev_pwr_mode { UFS_POWERDOWN_PWR_MODE = 3, }; -enum ufs_dev_wb_buf_avail_size { - UFS_WB_10_PERCENT_BUF_REMAIN = 0x1, - UFS_WB_40_PERCENT_BUF_REMAIN = 0x4, -}; +#define UFS_WB_BUF_REMAIN_PERCENT(val) ((val) / 10) /** * struct utp_cmd_rsp - Response UPIU structure diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 5c6203f72aa0..d0b2a4ad88f9 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5519,8 +5519,8 @@ static bool ufshcd_wb_presrv_usrspc_keep_vcc_on(struct ufs_hba *hba, cur_buf); return false; } - /* Let it continue to flush when >60% full */ - if (avail_buf < UFS_WB_40_PERCENT_BUF_REMAIN) + /* Let it continue to flush when available buffer exceeds threshold */ + if (avail_buf < hba->vps->wb_flush_threshold) return true; return false; @@ -5554,7 +5554,7 @@ static bool ufshcd_wb_keep_vcc_on(struct ufs_hba *hba) } if (!hba->dev_info.b_presrv_uspc_en) { - if (avail_buf <= UFS_WB_10_PERCENT_BUF_REMAIN) + if (avail_buf <= UFS_WB_BUF_REMAIN_PERCENT(10)) return true; return false; } @@ -7640,6 +7640,7 @@ static const struct attribute_group *ufshcd_driver_groups[] = { static struct ufs_hba_variant_params ufs_hba_vps = { .hba_enable_delay_us = 1000, + .wb_flush_threshold = UFS_WB_BUF_REMAIN_PERCENT(40), .devfreq_profile.polling_ms = 100, .devfreq_profile.target = ufshcd_devfreq_target, .devfreq_profile.get_dev_status = ufshcd_devfreq_get_dev_status, diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 33cce96d1428..9700d449ca44 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -534,6 +534,7 @@ struct ufs_hba_variant_params { struct devfreq_dev_profile devfreq_profile; struct devfreq_simple_ondemand_data ondemand_data; u16 hba_enable_delay_us; + u32 wb_flush_threshold; }; /**