scsi: ufs: fix handling of bActiveICCLevel

Host can set the bActiveICCLevel attribute of UFS device/card to control
the power consumption level by the device in active mode.
bActiveICCLevel is volatile attribute for UFS device (as per latest v2.1
spec) and for removable UFS card as well hence this change sets this
parameter on every attempt to probe the device/card.

Change-Id: Ic75e9501cda98094fa0dc17af217b275fcb4ea31
Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index def5bda..31c59ed 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -6536,7 +6536,7 @@
 	return icc_level;
 }
 
-static void ufshcd_init_icc_levels(struct ufs_hba *hba)
+static void ufshcd_set_active_icc_lvl(struct ufs_hba *hba)
 {
 	int ret;
 	int buff_len = QUERY_DESC_POWER_MAX_SIZE;
@@ -6901,6 +6901,14 @@
 		}
 	}
 
+	/*
+	 * bActiveICCLevel is volatile for UFS device (as per latest v2.1 spec)
+	 * and for removable UFS card as well, hence always set the parameter.
+	 * Note: Error handler may issue the device reset hence resetting
+	 *       bActiveICCLevel as well so it is always safe to set this here.
+	 */
+	ufshcd_set_active_icc_lvl(hba);
+
 	/* set the state as operational after switching to desired gear */
 	hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
 	/*
@@ -6916,8 +6924,6 @@
 				QUERY_FLAG_IDN_PWR_ON_WPE, &flag))
 			hba->dev_info.f_power_on_wp_en = flag;
 
-		ufshcd_init_icc_levels(hba);
-
 		/* Add required well known logical units to scsi mid layer */
 		if (ufshcd_scsi_add_wlus(hba))
 			goto out;