Patch "scsi: ufs: add capability to keep auto bkops always enabled" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
scsi: ufs: add capability to keep auto bkops always enabled
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
scsi-ufs-add-capability-to-keep-auto-bkops-always-enabled.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Sun Nov 19 12:02:55 CET 2017
From: "[email protected]" <[email protected]>
Date: Thu, 22 Dec 2016 18:41:22 -0800
Subject: scsi: ufs: add capability to keep auto bkops always enabled
From: "[email protected]" <[email protected]>
[ Upstream commit 4e768e7645ec4ffa92ee163643777b261ae97142 ]
UFS device requires to perform bkops (back ground operations) periodically but host can control (via auto-bkops parameter of device) when device can perform bkops based on its performance requirements. In general, host would like to enable the device's auto-bkops only when it's not doing any regular data transfer but sometimes device may not behave properly if host keeps the auto-bkops disabled. This change adds the capability to let the device auto-bkops always enabled except suspend.
--- drivers/scsi/ufs/ufshcd.c | 33 ++++++++++++++++++++++----------- drivers/scsi/ufs/ufshcd.h | 13 +++++++++++++ 2 files changed, 35 insertions(+), 11 deletions(-)
drivers/scsi/ufs/ufshcd.c +22 -11
@@ -3340,18 +3340,25 @@ out: }/** -* ufshcd_force_reset_auto_bkops - force enable of auto bkops +* ufshcd_force_reset_auto_bkops - force reset auto bkops state * @hba: per adapter instance * * After a device reset the device may toggle the BKOPS_EN flag * to default value. The s/w tracking variables should be updated -* as well. Do this by forcing enable of auto bkops. +* as well. This function would change the auto-bkops state based on +* UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND. */ -static void ufshcd_force_reset_auto_bkops (struct ufs_hba *hba) +static void ufshcd_force_reset_auto_bkops (struct ufs_hba *hba) { - hba->auto_bkops_enabled = false; - hba->ee_ctrl_mask |=MASK_EE_URGENT_BKOPS ; -ufshcd_enable_auto_bkops (hba); +if (ufshcd_keep_autobkops_enabled_except_suspend (hba)) { + hba->auto_bkops_enabled = false; + hba->ee_ctrl_mask |=MASK_EE_URGENT_BKOPS ; +ufshcd_enable_auto_bkops (hba); + }else { + hba->auto_bkops_enabled = true; + hba->ee_ctrl_mask &= ~MASK_EE_URGENT_BKOPS ; +ufshcd_disable_auto_bkops (hba); + } }static inline int ufshcd_get_bkops_status (struct ufs_hba *hba,u32 *status)
@@ -5149,11 +5156,15 @@ static int ufshcd_resume(struct ufs_hba goto set_old_link_state; } -/* -* If BKOPs operations are urgently needed at this moment then -* keep auto-bkops enabled or else disable it. -*/ -ufshcd_urgent_bkops (hba); +if (ufshcd_keep_autobkops_enabled_except_suspend (hba)) +ufshcd_enable_auto_bkops (hba); +else +/* +* If BKOPs operations are urgently needed at this moment then +* keep auto-bkops enabled or else disable it. +*/ +ufshcd_urgent_bkops (hba); + hba->clk_gating.is_suspended = false;if (ufshcd_is_clkscaling_enabled (hba))
drivers/scsi/ufs/ufshcd.h +13 -0
@@ -528,6 +528,14 @@ struct ufs_hba {* CAUTION: Enabling this might reduce overall UFS throughput. */ #define UFSHCD_CAP_INTR_AGGR (1 << 4) +/* +* This capability allows the device auto-bkops to be always enabled +* except during suspend (both runtime and suspend). +* Enabling this capability means that device will always be allowed +* to do background operation when it's active but it might degrade +* the performance of ongoing read/write operations. +*/ +#define UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND (1 << 5)struct devfreq *devfreq;struct ufs_clk_scaling clk_scaling;
@@ -623,6 +631,11 @@ static inline void *ufshcd_get_variant(sBUG_ON (!hba);return hba->priv; } +static inline bool ufshcd_keep_autobkops_enabled_except_suspend ( +struct ufs_hba *hba) +{ +return hba->caps &UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND ; +}extern int ufshcd_runtime_suspend (struct ufs_hba *hba);extern int ufshcd_runtime_resume (struct ufs_hba *hba);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/scsi-ufs-add-capability-to-keep-auto-bkops-always-enabled.patch queue-4.4/scsi-ufs-qcom-fix-module-autoload.patch