Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e6050a2 authored by Stanley Chu's avatar Stanley Chu Committed by Greg Kroah-Hartman
Browse files

UPSTREAM: scsi: ufs: Customize flush threshold for WriteBooster

Allow flush threshold for WriteBooster to be customizable by vendors. To
achieve this, make the value a variable in struct ufs_hba_variant_params.

Also introduce UFS_WB_BUF_REMAIN_PERCENT() macro to provide a more flexible
way to specify WriteBooster available buffer values.

Link: https://lore.kernel.org/r/20200509093716.21010-4-stanley.chu@mediatek.com


Reviewed-by: default avatarAsutosh Das <asutoshd@codeaurora.org>
Signed-off-by: default avatarStanley Chu <stanley.chu@mediatek.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>

Bug: 151050916
(cherry picked from commit d14734ae3ae79d3b0286a2431782054e5066da8f)
Change-Id: I6ff47b50d2f83c66ac541c8a1b6206a688662037
Signed-off-by: default avatarStanley Chu <stanley.chu@mediatek.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 79ec7f29
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -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
+4 −3
Original line number Diff line number Diff line
@@ -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,
+1 −0
Original line number Diff line number Diff line
@@ -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;
};

/**