All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/2] UFS driver general fixes bundle 2
@ 2020-03-25  9:23 Can Guo
  2020-03-25  9:23 ` [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path Can Guo
  2020-03-25  9:23   ` Can Guo
  0 siblings, 2 replies; 9+ messages in thread
From: Can Guo @ 2020-03-25  9:23 UTC (permalink / raw)
  To: asutoshd, nguyenb, hongwus, rnayak, linux-scsi, kernel-team,
	saravanak, salyzyn, cang

This bundle includes 2 general fixes for UFS driver.

Changes since v4:
- Incoperated comments from Avri.
- Added trace back to func ufshcd_scale_clks()
- Removed scale_up_gear goto
- Added "Fixes" tag to commit messages

Changes since v3:
- Removed trivial spaces in comments

Changes since v2:
- Rebased on 5.7/scsi-queue and fixed minor conflicts

Changes since v1:
- Fixed minor typo


Can Guo (1):
  scsi: ufs: Do not rely on prefetched data

Subhash Jadavani (1):
  scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out
    path

 drivers/scsi/ufs/ufshcd.c | 94 ++++++++++++++++++++++++++++++-----------------
 drivers/scsi/ufs/ufshcd.h | 11 ------
 2 files changed, 61 insertions(+), 44 deletions(-)

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path
  2020-03-25  9:23 [PATCH v5 0/2] UFS driver general fixes bundle 2 Can Guo
@ 2020-03-25  9:23 ` Can Guo
  2020-03-26  8:46     ` kbuild test robot
  2020-03-26 11:01     ` kbuild test robot
  2020-03-25  9:23   ` Can Guo
  1 sibling, 2 replies; 9+ messages in thread
From: Can Guo @ 2020-03-25  9:23 UTC (permalink / raw)
  To: asutoshd, nguyenb, hongwus, rnayak, linux-scsi, kernel-team,
	saravanak, salyzyn, cang
  Cc: Subhash Jadavani, Alim Akhtar, Avri Altman, James E.J. Bottomley,
	Martin K. Petersen, Stanley Chu, Bean Huo, Bart Van Assche,
	Venkat Gopalakrishnan, Tomas Winkler, open list

From: Subhash Jadavani <subhashj@codeaurora.org>

This change introduces a func ufshcd_set_clk_freq() to explicitly
set clock frequency so that it can be used in reset_and_resotre path and
in ufshcd_scale_clks(). Meanwhile, this change cleans up the clock scaling
error out path.

Fixes: a3cd5ec55f6c ("scsi: ufs: add load based scaling of UFS gear")
Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
Signed-off-by: Can Guo <cang@codeaurora.org>
---
 drivers/scsi/ufs/ufshcd.c | 68 ++++++++++++++++++++++++++++++++---------------
 1 file changed, 46 insertions(+), 22 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 2a2a63b..9c26f82 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -855,28 +855,29 @@ static bool ufshcd_is_unipro_pa_params_tuning_req(struct ufs_hba *hba)
 		return false;
 }
 
-static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
+/**
+ * ufshcd_set_clk_freq - set UFS controller clock frequencies
+ * @hba: per adapter instance
+ * @scale_up: If True, set max possible frequency othewise set low frequency
+ *
+ * Returns 0 if successful
+ * Returns < 0 for any other errors
+ */
+static int ufshcd_set_clk_freq(struct ufs_hba *hba, bool scale_up)
 {
 	int ret = 0;
 	struct ufs_clk_info *clki;
 	struct list_head *head = &hba->clk_list_head;
-	ktime_t start = ktime_get();
-	bool clk_state_changed = false;
 
 	if (list_empty(head))
 		goto out;
 
-	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
-	if (ret)
-		return ret;
-
 	list_for_each_entry(clki, head, list) {
 		if (!IS_ERR_OR_NULL(clki->clk)) {
 			if (scale_up && clki->max_freq) {
 				if (clki->curr_freq == clki->max_freq)
 					continue;
 
-				clk_state_changed = true;
 				ret = clk_set_rate(clki->clk, clki->max_freq);
 				if (ret) {
 					dev_err(hba->dev, "%s: %s clk set rate(%dHz) failed, %d\n",
@@ -895,7 +896,6 @@ static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
 				if (clki->curr_freq == clki->min_freq)
 					continue;
 
-				clk_state_changed = true;
 				ret = clk_set_rate(clki->clk, clki->min_freq);
 				if (ret) {
 					dev_err(hba->dev, "%s: %s clk set rate(%dHz) failed, %d\n",
@@ -914,13 +914,40 @@ static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
 				clki->name, clk_get_rate(clki->clk));
 	}
 
+out:
+	return ret;
+}
+
+/**
+ * ufshcd_scale_clks - scale up or scale down UFS controller clocks
+ * @hba: per adapter instance
+ * @scale_up: True if scaling up and false if scaling down
+ *
+ * Returns 0 if successful
+ * Returns < 0 for any other errors
+ */
+static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
+{
+	int ret = 0;
+
+	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
+	if (ret)
+		return ret;
+
+	ret = ufshcd_set_clk_freq(hba, scale_up);
+	if (ret)
+		return ret;
+
 	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
+	if (ret) {
+		ufshcd_set_clk_freq(hba, !scale_up);
+		return ret;
+	}
 
-out:
-	if (clk_state_changed)
-		trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
+	trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
 			(scale_up ? "up" : "down"),
 			ktime_to_us(ktime_sub(ktime_get(), start)), ret);
+
 	return ret;
 }
 
@@ -1106,35 +1133,32 @@ static int ufshcd_devfreq_scale(struct ufs_hba *hba, bool scale_up)
 
 	ret = ufshcd_clock_scaling_prepare(hba);
 	if (ret)
-		return ret;
+		goto out;
 
 	/* scale down the gear before scaling down clocks */
 	if (!scale_up) {
 		ret = ufshcd_scale_gear(hba, false);
 		if (ret)
-			goto out;
+			goto out_unprepare;
 	}
 
 	ret = ufshcd_scale_clks(hba, scale_up);
 	if (ret) {
 		if (!scale_up)
 			ufshcd_scale_gear(hba, true);
-		goto out;
+		goto out_unprepare;
 	}
 
 	/* scale up the gear after scaling up clocks */
 	if (scale_up) {
 		ret = ufshcd_scale_gear(hba, true);
-		if (ret) {
+		if (ret)
 			ufshcd_scale_clks(hba, false);
-			goto out;
-		}
 	}
 
-	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
-
-out:
+out_unprepare:
 	ufshcd_clock_scaling_unprepare(hba);
+out:
 	ufshcd_release(hba);
 	return ret;
 }
@@ -6251,7 +6275,7 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba)
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
 	/* scale up clocks to max frequency before full reinitialization */
-	ufshcd_scale_clks(hba, true);
+	ufshcd_set_clk_freq(hba, true);
 
 	err = ufshcd_hba_enable(hba);
 	if (err)
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v5 2/2] scsi: ufs: Do not rely on prefetched data
  2020-03-25  9:23 [PATCH v5 0/2] UFS driver general fixes bundle 2 Can Guo
  2020-03-25  9:23 ` [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path Can Guo
@ 2020-03-25  9:23   ` Can Guo
  1 sibling, 0 replies; 9+ messages in thread
From: Can Guo @ 2020-03-25  9:23 UTC (permalink / raw)
  To: asutoshd, nguyenb, hongwus, rnayak, linux-scsi, kernel-team,
	saravanak, salyzyn, cang
  Cc: Alim Akhtar, Avri Altman, James E.J. Bottomley,
	Martin K. Petersen, Matthias Brugger, Stanley Chu, Bean Huo,
	Bart Van Assche, Venkat Gopalakrishnan, Tomas Winkler,
	Bjorn Andersson, open list,
	moderated list:ARM/Mediatek SoC support,
	moderated list:ARM/Mediatek SoC support

We were setting bActiveICCLevel attribute for UFS device only once but
type of this attribute has changed from persistent to volatile since UFS
device specification v2.1. This attribute is set to the default value after
power cycle or hardware reset event. It isn't safe to rely on prefetched
data (only used for bActiveICCLevel attribute now). Hence this change
removes the code related to data prefetching and set this parameter on
every attempt to probe the UFS device.

Signed-off-by: Can Guo <cang@codeaurora.org>
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Tested-by: Stanley Chu <stanley.chu@mediatek.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
---
 drivers/scsi/ufs/ufshcd.c | 26 +++++++++++++++-----------
 drivers/scsi/ufs/ufshcd.h | 11 -----------
 2 files changed, 15 insertions(+), 22 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 9c26f82..b747c17 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -6458,11 +6458,12 @@ static u32 ufshcd_find_max_sup_active_icc_level(struct ufs_hba *hba,
 	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 = hba->desc_size.pwr_desc;
 	u8 *desc_buf;
+	u32 icc_level;
 
 	desc_buf = kmalloc(buff_len, GFP_KERNEL);
 	if (!desc_buf)
@@ -6477,20 +6478,17 @@ static void ufshcd_init_icc_levels(struct ufs_hba *hba)
 		goto out;
 	}
 
-	hba->init_prefetch_data.icc_level =
-			ufshcd_find_max_sup_active_icc_level(hba,
-			desc_buf, buff_len);
-	dev_dbg(hba->dev, "%s: setting icc_level 0x%x",
-			__func__, hba->init_prefetch_data.icc_level);
+	icc_level = ufshcd_find_max_sup_active_icc_level(hba, desc_buf,
+							 buff_len);
+	dev_dbg(hba->dev, "%s: setting icc_level 0x%x", __func__, icc_level);
 
 	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR,
-		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0,
-		&hba->init_prefetch_data.icc_level);
+		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0, &icc_level);
 
 	if (ret)
 		dev_err(hba->dev,
 			"%s: Failed configuring bActiveICCLevel = %d ret = %d",
-			__func__, hba->init_prefetch_data.icc_level , ret);
+			__func__, icc_level, ret);
 
 out:
 	kfree(desc_buf);
@@ -6996,8 +6994,6 @@ static int ufshcd_add_lus(struct ufs_hba *hba)
 {
 	int ret;
 
-	ufshcd_init_icc_levels(hba);
-
 	/* Add required well known logical units to scsi mid layer */
 	ret = ufshcd_scsi_add_wlus(hba);
 	if (ret)
@@ -7095,6 +7091,14 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool async)
 		}
 	}
 
+	/*
+	 * 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;
 
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index d45a044..5652d39 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -404,15 +404,6 @@ struct ufs_clk_scaling {
 	bool is_suspended;
 };
 
-/**
- * struct ufs_init_prefetch - contains data that is pre-fetched once during
- * initialization
- * @icc_level: icc level which was read during initialization
- */
-struct ufs_init_prefetch {
-	u32 icc_level;
-};
-
 #define UFS_ERR_REG_HIST_LENGTH 8
 /**
  * struct ufs_err_reg_hist - keeps history of errors
@@ -544,7 +535,6 @@ enum ufshcd_quirks {
  * @intr_mask: Interrupt Mask Bits
  * @ee_ctrl_mask: Exception event control mask
  * @is_powered: flag to check if HBA is powered
- * @init_prefetch_data: data pre-fetched during initialization
  * @eh_work: Worker to handle UFS errors that require s/w attention
  * @eeh_work: Worker to handle exception events
  * @errors: HBA errors
@@ -632,7 +622,6 @@ struct ufs_hba {
 	u32 intr_mask;
 	u16 ee_ctrl_mask;
 	bool is_powered;
-	struct ufs_init_prefetch init_prefetch_data;
 
 	/* Work Queues */
 	struct work_struct eh_work;
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v5 2/2] scsi: ufs: Do not rely on prefetched data
@ 2020-03-25  9:23   ` Can Guo
  0 siblings, 0 replies; 9+ messages in thread
From: Can Guo @ 2020-03-25  9:23 UTC (permalink / raw)
  To: asutoshd, nguyenb, hongwus, rnayak, linux-scsi, kernel-team,
	saravanak, salyzyn, cang
  Cc: Bart Van Assche, Martin K. Petersen, Venkat Gopalakrishnan,
	James E.J. Bottomley, open list, Bjorn Andersson, Avri Altman,
	moderated list:ARM/Mediatek SoC support, Alim Akhtar,
	Matthias Brugger, Tomas Winkler, Stanley Chu,
	moderated list:ARM/Mediatek SoC support, Bean Huo

We were setting bActiveICCLevel attribute for UFS device only once but
type of this attribute has changed from persistent to volatile since UFS
device specification v2.1. This attribute is set to the default value after
power cycle or hardware reset event. It isn't safe to rely on prefetched
data (only used for bActiveICCLevel attribute now). Hence this change
removes the code related to data prefetching and set this parameter on
every attempt to probe the UFS device.

Signed-off-by: Can Guo <cang@codeaurora.org>
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Tested-by: Stanley Chu <stanley.chu@mediatek.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
---
 drivers/scsi/ufs/ufshcd.c | 26 +++++++++++++++-----------
 drivers/scsi/ufs/ufshcd.h | 11 -----------
 2 files changed, 15 insertions(+), 22 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 9c26f82..b747c17 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -6458,11 +6458,12 @@ static u32 ufshcd_find_max_sup_active_icc_level(struct ufs_hba *hba,
 	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 = hba->desc_size.pwr_desc;
 	u8 *desc_buf;
+	u32 icc_level;
 
 	desc_buf = kmalloc(buff_len, GFP_KERNEL);
 	if (!desc_buf)
@@ -6477,20 +6478,17 @@ static void ufshcd_init_icc_levels(struct ufs_hba *hba)
 		goto out;
 	}
 
-	hba->init_prefetch_data.icc_level =
-			ufshcd_find_max_sup_active_icc_level(hba,
-			desc_buf, buff_len);
-	dev_dbg(hba->dev, "%s: setting icc_level 0x%x",
-			__func__, hba->init_prefetch_data.icc_level);
+	icc_level = ufshcd_find_max_sup_active_icc_level(hba, desc_buf,
+							 buff_len);
+	dev_dbg(hba->dev, "%s: setting icc_level 0x%x", __func__, icc_level);
 
 	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR,
-		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0,
-		&hba->init_prefetch_data.icc_level);
+		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0, &icc_level);
 
 	if (ret)
 		dev_err(hba->dev,
 			"%s: Failed configuring bActiveICCLevel = %d ret = %d",
-			__func__, hba->init_prefetch_data.icc_level , ret);
+			__func__, icc_level, ret);
 
 out:
 	kfree(desc_buf);
@@ -6996,8 +6994,6 @@ static int ufshcd_add_lus(struct ufs_hba *hba)
 {
 	int ret;
 
-	ufshcd_init_icc_levels(hba);
-
 	/* Add required well known logical units to scsi mid layer */
 	ret = ufshcd_scsi_add_wlus(hba);
 	if (ret)
@@ -7095,6 +7091,14 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool async)
 		}
 	}
 
+	/*
+	 * 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;
 
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index d45a044..5652d39 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -404,15 +404,6 @@ struct ufs_clk_scaling {
 	bool is_suspended;
 };
 
-/**
- * struct ufs_init_prefetch - contains data that is pre-fetched once during
- * initialization
- * @icc_level: icc level which was read during initialization
- */
-struct ufs_init_prefetch {
-	u32 icc_level;
-};
-
 #define UFS_ERR_REG_HIST_LENGTH 8
 /**
  * struct ufs_err_reg_hist - keeps history of errors
@@ -544,7 +535,6 @@ enum ufshcd_quirks {
  * @intr_mask: Interrupt Mask Bits
  * @ee_ctrl_mask: Exception event control mask
  * @is_powered: flag to check if HBA is powered
- * @init_prefetch_data: data pre-fetched during initialization
  * @eh_work: Worker to handle UFS errors that require s/w attention
  * @eeh_work: Worker to handle exception events
  * @errors: HBA errors
@@ -632,7 +622,6 @@ struct ufs_hba {
 	u32 intr_mask;
 	u16 ee_ctrl_mask;
 	bool is_powered;
-	struct ufs_init_prefetch init_prefetch_data;
 
 	/* Work Queues */
 	struct work_struct eh_work;
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v5 2/2] scsi: ufs: Do not rely on prefetched data
@ 2020-03-25  9:23   ` Can Guo
  0 siblings, 0 replies; 9+ messages in thread
From: Can Guo @ 2020-03-25  9:23 UTC (permalink / raw)
  To: asutoshd, nguyenb, hongwus, rnayak, linux-scsi, kernel-team,
	saravanak, salyzyn, cang
  Cc: Bart Van Assche, Martin K. Petersen, Venkat Gopalakrishnan,
	James E.J. Bottomley, open list, Bjorn Andersson, Avri Altman,
	moderated list:ARM/Mediatek SoC support, Alim Akhtar,
	Matthias Brugger, Tomas Winkler, Stanley Chu,
	moderated list:ARM/Mediatek SoC support, Bean Huo

We were setting bActiveICCLevel attribute for UFS device only once but
type of this attribute has changed from persistent to volatile since UFS
device specification v2.1. This attribute is set to the default value after
power cycle or hardware reset event. It isn't safe to rely on prefetched
data (only used for bActiveICCLevel attribute now). Hence this change
removes the code related to data prefetching and set this parameter on
every attempt to probe the UFS device.

Signed-off-by: Can Guo <cang@codeaurora.org>
Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Tested-by: Stanley Chu <stanley.chu@mediatek.com>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
---
 drivers/scsi/ufs/ufshcd.c | 26 +++++++++++++++-----------
 drivers/scsi/ufs/ufshcd.h | 11 -----------
 2 files changed, 15 insertions(+), 22 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 9c26f82..b747c17 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -6458,11 +6458,12 @@ static u32 ufshcd_find_max_sup_active_icc_level(struct ufs_hba *hba,
 	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 = hba->desc_size.pwr_desc;
 	u8 *desc_buf;
+	u32 icc_level;
 
 	desc_buf = kmalloc(buff_len, GFP_KERNEL);
 	if (!desc_buf)
@@ -6477,20 +6478,17 @@ static void ufshcd_init_icc_levels(struct ufs_hba *hba)
 		goto out;
 	}
 
-	hba->init_prefetch_data.icc_level =
-			ufshcd_find_max_sup_active_icc_level(hba,
-			desc_buf, buff_len);
-	dev_dbg(hba->dev, "%s: setting icc_level 0x%x",
-			__func__, hba->init_prefetch_data.icc_level);
+	icc_level = ufshcd_find_max_sup_active_icc_level(hba, desc_buf,
+							 buff_len);
+	dev_dbg(hba->dev, "%s: setting icc_level 0x%x", __func__, icc_level);
 
 	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR,
-		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0,
-		&hba->init_prefetch_data.icc_level);
+		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0, &icc_level);
 
 	if (ret)
 		dev_err(hba->dev,
 			"%s: Failed configuring bActiveICCLevel = %d ret = %d",
-			__func__, hba->init_prefetch_data.icc_level , ret);
+			__func__, icc_level, ret);
 
 out:
 	kfree(desc_buf);
@@ -6996,8 +6994,6 @@ static int ufshcd_add_lus(struct ufs_hba *hba)
 {
 	int ret;
 
-	ufshcd_init_icc_levels(hba);
-
 	/* Add required well known logical units to scsi mid layer */
 	ret = ufshcd_scsi_add_wlus(hba);
 	if (ret)
@@ -7095,6 +7091,14 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool async)
 		}
 	}
 
+	/*
+	 * 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;
 
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index d45a044..5652d39 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -404,15 +404,6 @@ struct ufs_clk_scaling {
 	bool is_suspended;
 };
 
-/**
- * struct ufs_init_prefetch - contains data that is pre-fetched once during
- * initialization
- * @icc_level: icc level which was read during initialization
- */
-struct ufs_init_prefetch {
-	u32 icc_level;
-};
-
 #define UFS_ERR_REG_HIST_LENGTH 8
 /**
  * struct ufs_err_reg_hist - keeps history of errors
@@ -544,7 +535,6 @@ enum ufshcd_quirks {
  * @intr_mask: Interrupt Mask Bits
  * @ee_ctrl_mask: Exception event control mask
  * @is_powered: flag to check if HBA is powered
- * @init_prefetch_data: data pre-fetched during initialization
  * @eh_work: Worker to handle UFS errors that require s/w attention
  * @eeh_work: Worker to handle exception events
  * @errors: HBA errors
@@ -632,7 +622,6 @@ struct ufs_hba {
 	u32 intr_mask;
 	u16 ee_ctrl_mask;
 	bool is_powered;
-	struct ufs_init_prefetch init_prefetch_data;
 
 	/* Work Queues */
 	struct work_struct eh_work;
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path
  2020-03-25  9:23 ` [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path Can Guo
@ 2020-03-26  8:46     ` kbuild test robot
  2020-03-26 11:01     ` kbuild test robot
  1 sibling, 0 replies; 9+ messages in thread
From: kbuild test robot @ 2020-03-26  8:46 UTC (permalink / raw)
  To: Can Guo
  Cc: kbuild-all, Subhash Jadavani, Alim Akhtar, Avri Altman,
	James E.J. Bottomley, Martin K. Petersen, Stanley Chu, Bean Huo,
	Bart Van Assche, Venkat Gopalakrishnan, Tomas Winkler, open list

[-- Attachment #1: Type: text/plain, Size: 5457 bytes --]

Hi Can,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on scsi/for-next]
[also build test ERROR on mkp-scsi/for-next v5.6-rc7 next-20200325]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Can-Guo/UFS-driver-general-fixes-bundle-2/20200326-143749
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
config: m68k-allmodconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.2.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/timer.h:6,
                    from include/linux/workqueue.h:9,
                    from include/linux/rhashtable-types.h:15,
                    from include/linux/ipc.h:7,
                    from include/uapi/linux/sem.h:5,
                    from include/linux/sem.h:5,
                    from include/linux/sched.h:15,
                    from include/linux/ratelimit.h:6,
                    from include/linux/dev_printk.h:16,
                    from include/linux/device.h:15,
                    from include/linux/async.h:14,
                    from drivers/scsi/ufs/ufshcd.c:40:
   drivers/scsi/ufs/ufshcd.c: In function 'ufshcd_scale_clks':
>> drivers/scsi/ufs/ufshcd.c:949:39: error: 'start' undeclared (first use in this function); did you mean 'stat'?
     949 |    ktime_to_us(ktime_sub(ktime_get(), start)), ret);
         |                                       ^~~~~
   include/linux/ktime.h:46:39: note: in definition of macro 'ktime_sub'
      46 | #define ktime_sub(lhs, rhs) ((lhs) - (rhs))
         |                                       ^~~
   drivers/scsi/ufs/ufshcd.c:949:39: note: each undeclared identifier is reported only once for each function it appears in
     949 |    ktime_to_us(ktime_sub(ktime_get(), start)), ret);
         |                                       ^~~~~
   include/linux/ktime.h:46:39: note: in definition of macro 'ktime_sub'
      46 | #define ktime_sub(lhs, rhs) ((lhs) - (rhs))
         |                                       ^~~

vim +949 drivers/scsi/ufs/ufshcd.c

a67142dac16542 Subhash Jadavani 2020-03-25  920  
a67142dac16542 Subhash Jadavani 2020-03-25  921  /**
a67142dac16542 Subhash Jadavani 2020-03-25  922   * ufshcd_scale_clks - scale up or scale down UFS controller clocks
a67142dac16542 Subhash Jadavani 2020-03-25  923   * @hba: per adapter instance
a67142dac16542 Subhash Jadavani 2020-03-25  924   * @scale_up: True if scaling up and false if scaling down
a67142dac16542 Subhash Jadavani 2020-03-25  925   *
a67142dac16542 Subhash Jadavani 2020-03-25  926   * Returns 0 if successful
a67142dac16542 Subhash Jadavani 2020-03-25  927   * Returns < 0 for any other errors
a67142dac16542 Subhash Jadavani 2020-03-25  928   */
a67142dac16542 Subhash Jadavani 2020-03-25  929  static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
a67142dac16542 Subhash Jadavani 2020-03-25  930  {
a67142dac16542 Subhash Jadavani 2020-03-25  931  	int ret = 0;
a67142dac16542 Subhash Jadavani 2020-03-25  932  
a67142dac16542 Subhash Jadavani 2020-03-25  933  	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
a67142dac16542 Subhash Jadavani 2020-03-25  934  	if (ret)
a67142dac16542 Subhash Jadavani 2020-03-25  935  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  936  
a67142dac16542 Subhash Jadavani 2020-03-25  937  	ret = ufshcd_set_clk_freq(hba, scale_up);
a67142dac16542 Subhash Jadavani 2020-03-25  938  	if (ret)
a67142dac16542 Subhash Jadavani 2020-03-25  939  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  940  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  941  	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
a67142dac16542 Subhash Jadavani 2020-03-25  942  	if (ret) {
a67142dac16542 Subhash Jadavani 2020-03-25  943  		ufshcd_set_clk_freq(hba, !scale_up);
a67142dac16542 Subhash Jadavani 2020-03-25  944  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  945  	}
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  946  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  947  	trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  948  			(scale_up ? "up" : "down"),
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03 @949  			ktime_to_us(ktime_sub(ktime_get(), start)), ret);
a67142dac16542 Subhash Jadavani 2020-03-25  950  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  951  	return ret;
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  952  }
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  953  

:::::: The code at line 949 was first introduced by commit
:::::: a3cd5ec55f6c72834f812f9150deb38ddc019782 scsi: ufs: add load based scaling of UFS gear

:::::: TO: subhashj@codeaurora.org <subhashj@codeaurora.org>
:::::: CC: Martin K. Petersen <martin.petersen@oracle.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 52792 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path
@ 2020-03-26  8:46     ` kbuild test robot
  0 siblings, 0 replies; 9+ messages in thread
From: kbuild test robot @ 2020-03-26  8:46 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5558 bytes --]

Hi Can,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on scsi/for-next]
[also build test ERROR on mkp-scsi/for-next v5.6-rc7 next-20200325]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Can-Guo/UFS-driver-general-fixes-bundle-2/20200326-143749
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
config: m68k-allmodconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.2.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/timer.h:6,
                    from include/linux/workqueue.h:9,
                    from include/linux/rhashtable-types.h:15,
                    from include/linux/ipc.h:7,
                    from include/uapi/linux/sem.h:5,
                    from include/linux/sem.h:5,
                    from include/linux/sched.h:15,
                    from include/linux/ratelimit.h:6,
                    from include/linux/dev_printk.h:16,
                    from include/linux/device.h:15,
                    from include/linux/async.h:14,
                    from drivers/scsi/ufs/ufshcd.c:40:
   drivers/scsi/ufs/ufshcd.c: In function 'ufshcd_scale_clks':
>> drivers/scsi/ufs/ufshcd.c:949:39: error: 'start' undeclared (first use in this function); did you mean 'stat'?
     949 |    ktime_to_us(ktime_sub(ktime_get(), start)), ret);
         |                                       ^~~~~
   include/linux/ktime.h:46:39: note: in definition of macro 'ktime_sub'
      46 | #define ktime_sub(lhs, rhs) ((lhs) - (rhs))
         |                                       ^~~
   drivers/scsi/ufs/ufshcd.c:949:39: note: each undeclared identifier is reported only once for each function it appears in
     949 |    ktime_to_us(ktime_sub(ktime_get(), start)), ret);
         |                                       ^~~~~
   include/linux/ktime.h:46:39: note: in definition of macro 'ktime_sub'
      46 | #define ktime_sub(lhs, rhs) ((lhs) - (rhs))
         |                                       ^~~

vim +949 drivers/scsi/ufs/ufshcd.c

a67142dac16542 Subhash Jadavani 2020-03-25  920  
a67142dac16542 Subhash Jadavani 2020-03-25  921  /**
a67142dac16542 Subhash Jadavani 2020-03-25  922   * ufshcd_scale_clks - scale up or scale down UFS controller clocks
a67142dac16542 Subhash Jadavani 2020-03-25  923   * @hba: per adapter instance
a67142dac16542 Subhash Jadavani 2020-03-25  924   * @scale_up: True if scaling up and false if scaling down
a67142dac16542 Subhash Jadavani 2020-03-25  925   *
a67142dac16542 Subhash Jadavani 2020-03-25  926   * Returns 0 if successful
a67142dac16542 Subhash Jadavani 2020-03-25  927   * Returns < 0 for any other errors
a67142dac16542 Subhash Jadavani 2020-03-25  928   */
a67142dac16542 Subhash Jadavani 2020-03-25  929  static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
a67142dac16542 Subhash Jadavani 2020-03-25  930  {
a67142dac16542 Subhash Jadavani 2020-03-25  931  	int ret = 0;
a67142dac16542 Subhash Jadavani 2020-03-25  932  
a67142dac16542 Subhash Jadavani 2020-03-25  933  	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
a67142dac16542 Subhash Jadavani 2020-03-25  934  	if (ret)
a67142dac16542 Subhash Jadavani 2020-03-25  935  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  936  
a67142dac16542 Subhash Jadavani 2020-03-25  937  	ret = ufshcd_set_clk_freq(hba, scale_up);
a67142dac16542 Subhash Jadavani 2020-03-25  938  	if (ret)
a67142dac16542 Subhash Jadavani 2020-03-25  939  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  940  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  941  	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
a67142dac16542 Subhash Jadavani 2020-03-25  942  	if (ret) {
a67142dac16542 Subhash Jadavani 2020-03-25  943  		ufshcd_set_clk_freq(hba, !scale_up);
a67142dac16542 Subhash Jadavani 2020-03-25  944  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  945  	}
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  946  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  947  	trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  948  			(scale_up ? "up" : "down"),
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03 @949  			ktime_to_us(ktime_sub(ktime_get(), start)), ret);
a67142dac16542 Subhash Jadavani 2020-03-25  950  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  951  	return ret;
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  952  }
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  953  

:::::: The code at line 949 was first introduced by commit
:::::: a3cd5ec55f6c72834f812f9150deb38ddc019782 scsi: ufs: add load based scaling of UFS gear

:::::: TO: subhashj(a)codeaurora.org <subhashj@codeaurora.org>
:::::: CC: Martin K. Petersen <martin.petersen@oracle.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 52792 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path
  2020-03-25  9:23 ` [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path Can Guo
@ 2020-03-26 11:01     ` kbuild test robot
  2020-03-26 11:01     ` kbuild test robot
  1 sibling, 0 replies; 9+ messages in thread
From: kbuild test robot @ 2020-03-26 11:01 UTC (permalink / raw)
  To: Can Guo
  Cc: kbuild-all, Subhash Jadavani, Alim Akhtar, Avri Altman,
	James E.J. Bottomley, Martin K. Petersen, Stanley Chu, Bean Huo,
	Bart Van Assche, Venkat Gopalakrishnan, Tomas Winkler, open list

[-- Attachment #1: Type: text/plain, Size: 5480 bytes --]

Hi Can,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on scsi/for-next]
[also build test ERROR on mkp-scsi/for-next target/for-next v5.6-rc7 next-20200326]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Can-Guo/UFS-driver-general-fixes-bundle-2/20200326-143749
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
config: sparc-allyesconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 9.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.2.0 make.cross ARCH=sparc 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/timer.h:6,
                    from include/linux/workqueue.h:9,
                    from include/linux/rhashtable-types.h:15,
                    from include/linux/ipc.h:7,
                    from include/uapi/linux/sem.h:5,
                    from include/linux/sem.h:5,
                    from include/linux/sched.h:15,
                    from include/linux/ratelimit.h:6,
                    from include/linux/dev_printk.h:16,
                    from include/linux/device.h:15,
                    from include/linux/async.h:14,
                    from drivers/scsi/ufs/ufshcd.c:40:
   drivers/scsi/ufs/ufshcd.c: In function 'ufshcd_scale_clks':
>> drivers/scsi/ufs/ufshcd.c:949:39: error: 'start' undeclared (first use in this function); did you mean '_start'?
     949 |    ktime_to_us(ktime_sub(ktime_get(), start)), ret);
         |                                       ^~~~~
   include/linux/ktime.h:46:39: note: in definition of macro 'ktime_sub'
      46 | #define ktime_sub(lhs, rhs) ((lhs) - (rhs))
         |                                       ^~~
   drivers/scsi/ufs/ufshcd.c:949:39: note: each undeclared identifier is reported only once for each function it appears in
     949 |    ktime_to_us(ktime_sub(ktime_get(), start)), ret);
         |                                       ^~~~~
   include/linux/ktime.h:46:39: note: in definition of macro 'ktime_sub'
      46 | #define ktime_sub(lhs, rhs) ((lhs) - (rhs))
         |                                       ^~~

vim +949 drivers/scsi/ufs/ufshcd.c

a67142dac16542 Subhash Jadavani 2020-03-25  920  
a67142dac16542 Subhash Jadavani 2020-03-25  921  /**
a67142dac16542 Subhash Jadavani 2020-03-25  922   * ufshcd_scale_clks - scale up or scale down UFS controller clocks
a67142dac16542 Subhash Jadavani 2020-03-25  923   * @hba: per adapter instance
a67142dac16542 Subhash Jadavani 2020-03-25  924   * @scale_up: True if scaling up and false if scaling down
a67142dac16542 Subhash Jadavani 2020-03-25  925   *
a67142dac16542 Subhash Jadavani 2020-03-25  926   * Returns 0 if successful
a67142dac16542 Subhash Jadavani 2020-03-25  927   * Returns < 0 for any other errors
a67142dac16542 Subhash Jadavani 2020-03-25  928   */
a67142dac16542 Subhash Jadavani 2020-03-25  929  static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
a67142dac16542 Subhash Jadavani 2020-03-25  930  {
a67142dac16542 Subhash Jadavani 2020-03-25  931  	int ret = 0;
a67142dac16542 Subhash Jadavani 2020-03-25  932  
a67142dac16542 Subhash Jadavani 2020-03-25  933  	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
a67142dac16542 Subhash Jadavani 2020-03-25  934  	if (ret)
a67142dac16542 Subhash Jadavani 2020-03-25  935  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  936  
a67142dac16542 Subhash Jadavani 2020-03-25  937  	ret = ufshcd_set_clk_freq(hba, scale_up);
a67142dac16542 Subhash Jadavani 2020-03-25  938  	if (ret)
a67142dac16542 Subhash Jadavani 2020-03-25  939  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  940  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  941  	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
a67142dac16542 Subhash Jadavani 2020-03-25  942  	if (ret) {
a67142dac16542 Subhash Jadavani 2020-03-25  943  		ufshcd_set_clk_freq(hba, !scale_up);
a67142dac16542 Subhash Jadavani 2020-03-25  944  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  945  	}
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  946  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  947  	trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  948  			(scale_up ? "up" : "down"),
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03 @949  			ktime_to_us(ktime_sub(ktime_get(), start)), ret);
a67142dac16542 Subhash Jadavani 2020-03-25  950  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  951  	return ret;
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  952  }
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  953  

:::::: The code at line 949 was first introduced by commit
:::::: a3cd5ec55f6c72834f812f9150deb38ddc019782 scsi: ufs: add load based scaling of UFS gear

:::::: TO: subhashj@codeaurora.org <subhashj@codeaurora.org>
:::::: CC: Martin K. Petersen <martin.petersen@oracle.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 61166 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path
@ 2020-03-26 11:01     ` kbuild test robot
  0 siblings, 0 replies; 9+ messages in thread
From: kbuild test robot @ 2020-03-26 11:01 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5581 bytes --]

Hi Can,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on scsi/for-next]
[also build test ERROR on mkp-scsi/for-next target/for-next v5.6-rc7 next-20200326]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Can-Guo/UFS-driver-general-fixes-bundle-2/20200326-143749
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
config: sparc-allyesconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 9.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.2.0 make.cross ARCH=sparc 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/timer.h:6,
                    from include/linux/workqueue.h:9,
                    from include/linux/rhashtable-types.h:15,
                    from include/linux/ipc.h:7,
                    from include/uapi/linux/sem.h:5,
                    from include/linux/sem.h:5,
                    from include/linux/sched.h:15,
                    from include/linux/ratelimit.h:6,
                    from include/linux/dev_printk.h:16,
                    from include/linux/device.h:15,
                    from include/linux/async.h:14,
                    from drivers/scsi/ufs/ufshcd.c:40:
   drivers/scsi/ufs/ufshcd.c: In function 'ufshcd_scale_clks':
>> drivers/scsi/ufs/ufshcd.c:949:39: error: 'start' undeclared (first use in this function); did you mean '_start'?
     949 |    ktime_to_us(ktime_sub(ktime_get(), start)), ret);
         |                                       ^~~~~
   include/linux/ktime.h:46:39: note: in definition of macro 'ktime_sub'
      46 | #define ktime_sub(lhs, rhs) ((lhs) - (rhs))
         |                                       ^~~
   drivers/scsi/ufs/ufshcd.c:949:39: note: each undeclared identifier is reported only once for each function it appears in
     949 |    ktime_to_us(ktime_sub(ktime_get(), start)), ret);
         |                                       ^~~~~
   include/linux/ktime.h:46:39: note: in definition of macro 'ktime_sub'
      46 | #define ktime_sub(lhs, rhs) ((lhs) - (rhs))
         |                                       ^~~

vim +949 drivers/scsi/ufs/ufshcd.c

a67142dac16542 Subhash Jadavani 2020-03-25  920  
a67142dac16542 Subhash Jadavani 2020-03-25  921  /**
a67142dac16542 Subhash Jadavani 2020-03-25  922   * ufshcd_scale_clks - scale up or scale down UFS controller clocks
a67142dac16542 Subhash Jadavani 2020-03-25  923   * @hba: per adapter instance
a67142dac16542 Subhash Jadavani 2020-03-25  924   * @scale_up: True if scaling up and false if scaling down
a67142dac16542 Subhash Jadavani 2020-03-25  925   *
a67142dac16542 Subhash Jadavani 2020-03-25  926   * Returns 0 if successful
a67142dac16542 Subhash Jadavani 2020-03-25  927   * Returns < 0 for any other errors
a67142dac16542 Subhash Jadavani 2020-03-25  928   */
a67142dac16542 Subhash Jadavani 2020-03-25  929  static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
a67142dac16542 Subhash Jadavani 2020-03-25  930  {
a67142dac16542 Subhash Jadavani 2020-03-25  931  	int ret = 0;
a67142dac16542 Subhash Jadavani 2020-03-25  932  
a67142dac16542 Subhash Jadavani 2020-03-25  933  	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
a67142dac16542 Subhash Jadavani 2020-03-25  934  	if (ret)
a67142dac16542 Subhash Jadavani 2020-03-25  935  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  936  
a67142dac16542 Subhash Jadavani 2020-03-25  937  	ret = ufshcd_set_clk_freq(hba, scale_up);
a67142dac16542 Subhash Jadavani 2020-03-25  938  	if (ret)
a67142dac16542 Subhash Jadavani 2020-03-25  939  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  940  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  941  	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
a67142dac16542 Subhash Jadavani 2020-03-25  942  	if (ret) {
a67142dac16542 Subhash Jadavani 2020-03-25  943  		ufshcd_set_clk_freq(hba, !scale_up);
a67142dac16542 Subhash Jadavani 2020-03-25  944  		return ret;
a67142dac16542 Subhash Jadavani 2020-03-25  945  	}
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  946  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  947  	trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  948  			(scale_up ? "up" : "down"),
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03 @949  			ktime_to_us(ktime_sub(ktime_get(), start)), ret);
a67142dac16542 Subhash Jadavani 2020-03-25  950  
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  951  	return ret;
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  952  }
a3cd5ec55f6c72 Subhash Jadavani 2017-02-03  953  

:::::: The code at line 949 was first introduced by commit
:::::: a3cd5ec55f6c72834f812f9150deb38ddc019782 scsi: ufs: add load based scaling of UFS gear

:::::: TO: subhashj(a)codeaurora.org <subhashj@codeaurora.org>
:::::: CC: Martin K. Petersen <martin.petersen@oracle.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 61166 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-03-26 11:01 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-25  9:23 [PATCH v5 0/2] UFS driver general fixes bundle 2 Can Guo
2020-03-25  9:23 ` [PATCH v5 1/2] scsi: ufs: Clean up ufshcd_scale_clks() and clock scaling error out path Can Guo
2020-03-26  8:46   ` kbuild test robot
2020-03-26  8:46     ` kbuild test robot
2020-03-26 11:01   ` kbuild test robot
2020-03-26 11:01     ` kbuild test robot
2020-03-25  9:23 ` [PATCH v5 2/2] scsi: ufs: Do not rely on prefetched data Can Guo
2020-03-25  9:23   ` Can Guo
2020-03-25  9:23   ` Can Guo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.