All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/5] scsi: ufs-mediatek: Provide features and fixes in MediaTek platforms
@ 2022-07-27  3:44 Stanley Chu
  2022-07-27  3:44 ` [PATCH v2 1/5] scsi: ufs: ufs-mediatek: Remove redundant header files Stanley Chu
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Stanley Chu @ 2022-07-27  3:44 UTC (permalink / raw)
  To: linux-scsi, linux-kernel, martin.petersen, avri.altman,
	alim.akhtar, jejb, bvanassche
  Cc: peter.wang, chun-hung.wu, alice.chao, powen.kao, mason.zhang,
	qilin.tan, lin.gui, eddie.huang, tun-yu.yu, cc.chou,
	chaotian.jing, jiajie.hao, stanley.chu

Hi Martin,

This series provides some features and fixes in MediaTek UFS platforms.
Please consider this patch series for kernel v5.20.

Changes since v1:
 - Remove unnecessary changes in patch "scsi: ufs: ufs-mediatek: Fix performance scaling"

Peter Wang (2):
  scsi: ufs: ufs-mediatek: Dump more registers
  scsi: ufs: ufs-mediatek: Fix performance scaling

Po-Wen Kao (1):
  scsi: ufs: ufs-medaitek: Support clk-scaling to optimize power
    consumption

Stanley Chu (2):
  scsi: ufs: ufs-mediatek: Remove redundant header files
  scsi: ufs: ufs-mediatek: Provide detailed description for UIC errors

 drivers/ufs/host/ufs-mediatek-trace.h |  25 +++-
 drivers/ufs/host/ufs-mediatek.c       | 164 ++++++++++++++++++++++++--
 drivers/ufs/host/ufs-mediatek.h       |  45 +++++++
 3 files changed, 226 insertions(+), 8 deletions(-)

-- 
2.18.0


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

* [PATCH v2 1/5] scsi: ufs: ufs-mediatek: Remove redundant header files
  2022-07-27  3:44 [PATCH v2 0/5] scsi: ufs-mediatek: Provide features and fixes in MediaTek platforms Stanley Chu
@ 2022-07-27  3:44 ` Stanley Chu
  2022-07-27 17:55   ` Bart Van Assche
  2022-07-27  3:44 ` [PATCH v2 2/5] scsi: ufs: ufs-mediatek: Provide detailed description for UIC errors Stanley Chu
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Stanley Chu @ 2022-07-27  3:44 UTC (permalink / raw)
  To: linux-scsi, linux-kernel, martin.petersen, avri.altman,
	alim.akhtar, jejb, bvanassche
  Cc: peter.wang, chun-hung.wu, alice.chao, powen.kao, mason.zhang,
	qilin.tan, lin.gui, eddie.huang, tun-yu.yu, cc.chou,
	chaotian.jing, jiajie.hao, stanley.chu

Remove redundant header files like
<linux/sched/clock.h>

Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Change-Id: I7796a23a5fdc767a4d00475b399844ceeaded0a8
---
 drivers/ufs/host/ufs-mediatek.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index c958279bdd8f..ff6fd8f52ebc 100644
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -19,7 +19,6 @@
 #include <linux/pm_qos.h>
 #include <linux/regulator/consumer.h>
 #include <linux/reset.h>
-#include <linux/sched/clock.h>
 #include <linux/soc/mediatek/mtk_sip_svc.h>
 
 #include <ufs/ufshcd.h>
-- 
2.18.0


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

* [PATCH v2 2/5] scsi: ufs: ufs-mediatek: Provide detailed description for UIC errors
  2022-07-27  3:44 [PATCH v2 0/5] scsi: ufs-mediatek: Provide features and fixes in MediaTek platforms Stanley Chu
  2022-07-27  3:44 ` [PATCH v2 1/5] scsi: ufs: ufs-mediatek: Remove redundant header files Stanley Chu
@ 2022-07-27  3:44 ` Stanley Chu
  2022-07-27 17:57   ` Bart Van Assche
  2022-07-27  3:44 ` [PATCH v2 3/5] scsi: ufs: ufs-mediatek: Dump more registers Stanley Chu
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Stanley Chu @ 2022-07-27  3:44 UTC (permalink / raw)
  To: linux-scsi, linux-kernel, martin.petersen, avri.altman,
	alim.akhtar, jejb, bvanassche
  Cc: peter.wang, chun-hung.wu, alice.chao, powen.kao, mason.zhang,
	qilin.tan, lin.gui, eddie.huang, tun-yu.yu, cc.chou,
	chaotian.jing, jiajie.hao, stanley.chu

Provide detailed description in logs for UIC errors for
eaiser issue breakdown.

Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c | 20 +++++++++++++++++
 drivers/ufs/host/ufs-mediatek.h | 38 +++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index ff6fd8f52ebc..b590fb267c20 100644
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -1309,8 +1309,28 @@ static void ufs_mtk_event_notify(struct ufs_hba *hba,
 				 enum ufs_event_type evt, void *data)
 {
 	unsigned int val = *(u32 *)data;
+	unsigned long reg;
+	int bit;
 
 	trace_ufs_mtk_event(evt, val);
+
+	/* Print details of UIC Errors */
+	if (evt <= UFS_EVT_DME_ERR) {
+		dev_info(hba->dev,
+			 "Host UIC Error Code (%s): %08x\n",
+			 ufs_uic_err_str[evt], val);
+		reg = val;
+	}
+
+	if (evt == UFS_EVT_PA_ERR) {
+		for_each_set_bit(bit, &reg, ARRAY_SIZE(ufs_uic_pa_err_str))
+			dev_info(hba->dev, "%s\n", ufs_uic_pa_err_str[bit]);
+	}
+
+	if (evt == UFS_EVT_DL_ERR) {
+		for_each_set_bit(bit, &reg, ARRAY_SIZE(ufs_uic_dl_err_str))
+			dev_info(hba->dev, "%s\n", ufs_uic_dl_err_str[bit]);
+	}
 }
 
 /*
diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h
index aa26d415527b..9017ab8f9867 100644
--- a/drivers/ufs/host/ufs-mediatek.h
+++ b/drivers/ufs/host/ufs-mediatek.h
@@ -26,6 +26,44 @@
 #define REG_UFS_DEBUG_SEL_B2        0x22D8
 #define REG_UFS_DEBUG_SEL_B3        0x22DC
 
+/*
+ * Details of UIC Errors
+ */
+static const u8 *ufs_uic_err_str[] = {
+	"PHY Adapter Layer",
+	"Data Link Layer",
+	"Network Link Layer",
+	"Transport Link Layer",
+	"DME"
+};
+
+static const u8 *ufs_uic_pa_err_str[] = {
+	"PHY error on Lane 0",
+	"PHY error on Lane 1",
+	"PHY error on Lane 2",
+	"PHY error on Lane 3",
+	"Generic PHY Adapter Error. This should be the LINERESET indication"
+};
+
+static const u8 *ufs_uic_dl_err_str[] = {
+	"NAC_RECEIVED",
+	"TCx_REPLAY_TIMER_EXPIRED",
+	"AFCx_REQUEST_TIMER_EXPIRED",
+	"FCx_PROTECTION_TIMER_EXPIRED",
+	"CRC_ERROR",
+	"RX_BUFFER_OVERFLOW",
+	"MAX_FRAME_LENGTH_EXCEEDED",
+	"WRONG_SEQUENCE_NUMBER",
+	"AFC_FRAME_SYNTAX_ERROR",
+	"NAC_FRAME_SYNTAX_ERROR",
+	"EOF_SYNTAX_ERROR",
+	"FRAME_SYNTAX_ERROR",
+	"BAD_CTRL_SYMBOL_TYPE",
+	"PA_INIT_ERROR",
+	"PA_ERROR_IND_RECEIVED",
+	"PA_INIT"
+};
+
 /*
  * Ref-clk control
  *
-- 
2.18.0


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

* [PATCH v2 3/5] scsi: ufs: ufs-mediatek: Dump more registers
  2022-07-27  3:44 [PATCH v2 0/5] scsi: ufs-mediatek: Provide features and fixes in MediaTek platforms Stanley Chu
  2022-07-27  3:44 ` [PATCH v2 1/5] scsi: ufs: ufs-mediatek: Remove redundant header files Stanley Chu
  2022-07-27  3:44 ` [PATCH v2 2/5] scsi: ufs: ufs-mediatek: Provide detailed description for UIC errors Stanley Chu
@ 2022-07-27  3:44 ` Stanley Chu
  2022-07-27  3:44 ` [PATCH v2 4/5] scsi: ufs: ufs-mediatek: Fix performance scaling Stanley Chu
  2022-07-27  3:44 ` [PATCH v2 5/5] scsi: ufs: ufs-medaitek: Support clk-scaling to optimize power consumption Stanley Chu
  4 siblings, 0 replies; 10+ messages in thread
From: Stanley Chu @ 2022-07-27  3:44 UTC (permalink / raw)
  To: linux-scsi, linux-kernel, martin.petersen, avri.altman,
	alim.akhtar, jejb, bvanassche
  Cc: peter.wang, chun-hung.wu, alice.chao, powen.kao, mason.zhang,
	qilin.tan, lin.gui, eddie.huang, tun-yu.yu, cc.chou,
	chaotian.jing, jiajie.hao, stanley.chu

From: Peter Wang <peter.wang@mediatek.com>

Dump more proprietary UFSHCI status registers for
easier issue breakdown.

Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index b590fb267c20..ddbfcf1ab925 100644
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -1246,13 +1246,16 @@ static int ufs_mtk_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 
 static void ufs_mtk_dbg_register_dump(struct ufs_hba *hba)
 {
-	ufshcd_dump_regs(hba, REG_UFS_REFCLK_CTRL, 0x4, "Ref-Clk Ctrl ");
+	/* Dump ufshci register 0x140 ~ 0x14C */
+	ufshcd_dump_regs(hba, REG_UFS_XOUFS_CTRL, 0x10,
+			 "XOUFS Ctrl (0x140): ");
 
 	ufshcd_dump_regs(hba, REG_UFS_EXTREG, 0x4, "Ext Reg ");
 
+	/* Dump ufshci register 0x2200 ~ 0x22AC */
 	ufshcd_dump_regs(hba, REG_UFS_MPHYCTRL,
 			 REG_UFS_REJECT_MON - REG_UFS_MPHYCTRL + 4,
-			 "MPHY Ctrl ");
+			 "MPHY Ctrl (0x2200): ");
 
 	/* Direct debugging information to REG_MTK_PROBE */
 	ufs_mtk_dbg_sel(hba);
-- 
2.18.0


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

* [PATCH v2 4/5] scsi: ufs: ufs-mediatek: Fix performance scaling
  2022-07-27  3:44 [PATCH v2 0/5] scsi: ufs-mediatek: Provide features and fixes in MediaTek platforms Stanley Chu
                   ` (2 preceding siblings ...)
  2022-07-27  3:44 ` [PATCH v2 3/5] scsi: ufs: ufs-mediatek: Dump more registers Stanley Chu
@ 2022-07-27  3:44 ` Stanley Chu
  2022-07-27  3:44 ` [PATCH v2 5/5] scsi: ufs: ufs-medaitek: Support clk-scaling to optimize power consumption Stanley Chu
  4 siblings, 0 replies; 10+ messages in thread
From: Stanley Chu @ 2022-07-27  3:44 UTC (permalink / raw)
  To: linux-scsi, linux-kernel, martin.petersen, avri.altman,
	alim.akhtar, jejb, bvanassche
  Cc: peter.wang, chun-hung.wu, alice.chao, powen.kao, mason.zhang,
	qilin.tan, lin.gui, eddie.huang, tun-yu.yu, cc.chou,
	chaotian.jing, jiajie.hao, stanley.chu

From: Peter Wang <peter.wang@mediatek.com>

If clk-scaling is enabled, performance scaling can be bound
to the decision of clk-scaling to avoid unnecessary boosting.

Meanwhile, fix missing initialization of pm-qos request.

Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index ddbfcf1ab925..b2e4a9fd4be8 100644
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -597,6 +597,12 @@ static void ufs_mtk_boost_pm_qos(struct ufs_hba *hba, bool boost)
 				       boost ? 0 : PM_QOS_DEFAULT_VALUE);
 }
 
+static void ufs_mtk_scale_perf(struct ufs_hba *hba, bool scale_up)
+{
+	ufs_mtk_boost_crypt(hba, scale_up);
+	ufs_mtk_boost_pm_qos(hba, scale_up);
+}
+
 static void ufs_mtk_pwr_ctrl(struct ufs_hba *hba, bool on)
 {
 	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
@@ -604,11 +610,11 @@ static void ufs_mtk_pwr_ctrl(struct ufs_hba *hba, bool on)
 	if (on) {
 		phy_power_on(host->mphy);
 		ufs_mtk_setup_ref_clk(hba, on);
-		ufs_mtk_boost_crypt(hba, on);
-		ufs_mtk_boost_pm_qos(hba, on);
+		if (!ufshcd_is_clkscaling_supported(hba))
+			ufs_mtk_scale_perf(hba, on);
 	} else {
-		ufs_mtk_boost_pm_qos(hba, on);
-		ufs_mtk_boost_crypt(hba, on);
+		if (!ufshcd_is_clkscaling_supported(hba))
+			ufs_mtk_scale_perf(hba, on);
 		ufs_mtk_setup_ref_clk(hba, on);
 		phy_power_off(host->mphy);
 	}
@@ -832,6 +838,10 @@ static int ufs_mtk_init(struct ufs_hba *hba)
 
 	host->ip_ver = ufshcd_readl(hba, REG_UFS_MTK_IP_VER);
 
+	/* Initialize pm-qos request */
+	cpu_latency_qos_add_request(&host->pm_qos_req, PM_QOS_DEFAULT_VALUE);
+	host->pm_qos_init = true;
+
 	goto out;
 
 out_variant_clear:
-- 
2.18.0


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

* [PATCH v2 5/5] scsi: ufs: ufs-medaitek: Support clk-scaling to optimize power consumption
  2022-07-27  3:44 [PATCH v2 0/5] scsi: ufs-mediatek: Provide features and fixes in MediaTek platforms Stanley Chu
                   ` (3 preceding siblings ...)
  2022-07-27  3:44 ` [PATCH v2 4/5] scsi: ufs: ufs-mediatek: Fix performance scaling Stanley Chu
@ 2022-07-27  3:44 ` Stanley Chu
  4 siblings, 0 replies; 10+ messages in thread
From: Stanley Chu @ 2022-07-27  3:44 UTC (permalink / raw)
  To: linux-scsi, linux-kernel, martin.petersen, avri.altman,
	alim.akhtar, jejb, bvanassche
  Cc: peter.wang, chun-hung.wu, alice.chao, powen.kao, mason.zhang,
	qilin.tan, lin.gui, eddie.huang, tun-yu.yu, cc.chou,
	chaotian.jing, jiajie.hao, stanley.chu

From: Po-Wen Kao <powen.kao@mediatek.com>

Provide clk-scaling feature in MediaTek UFS platforms.

MediaTek platform supports clk-scaling by switching parent clock
mux of UFSHCI main clocks: ufs_sel.

The driver needs to prevent changing the rate of ufs_sel because
its parent PLL clock may be shared between multiple IPs. In order
to achieve this goal, the maximum and minimum clock rates of ufs_sel
defined in dts should match the rate of "ufs_sel_max_src" and
"ufs_sel_min_src" respectively.

Signed-off-by: Po-Wen Kao <powen.kao@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek-trace.h |  25 +++++-
 drivers/ufs/host/ufs-mediatek.c       | 118 ++++++++++++++++++++++++++
 drivers/ufs/host/ufs-mediatek.h       |   7 ++
 3 files changed, 149 insertions(+), 1 deletion(-)

diff --git a/drivers/ufs/host/ufs-mediatek-trace.h b/drivers/ufs/host/ufs-mediatek-trace.h
index 7e010848dc99..2e68c7dbc624 100644
--- a/drivers/ufs/host/ufs-mediatek-trace.h
+++ b/drivers/ufs/host/ufs-mediatek-trace.h
@@ -26,7 +26,30 @@ TRACE_EVENT(ufs_mtk_event,
 
 	TP_printk("ufs:event=%u data=%u",
 		  __entry->type, __entry->data)
-	);
+);
+
+TRACE_EVENT(ufs_mtk_clk_scale,
+	TP_PROTO(const char *name, bool scale_up, uint64_t clk_rate),
+	TP_ARGS(name, scale_up, clk_rate),
+
+	TP_STRUCT__entry(
+		__field(const char*, name)
+		__field(bool, scale_up)
+		__field(uint64_t, clk_rate)
+	),
+
+	TP_fast_assign(
+		__entry->name = name;
+		__entry->scale_up = scale_up;
+		__entry->clk_rate = clk_rate;
+	),
+
+	TP_printk("ufs: clk (%s) scaled %s @%d",
+		  __entry->name,
+		  __entry->scale_up ? "up" : "down",
+		  __entry->clk_rate)
+);
+
 #endif
 
 #undef TRACE_INCLUDE_PATH
diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index b2e4a9fd4be8..ba068f4c5519 100644
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -700,6 +700,46 @@ static u32 ufs_mtk_get_ufs_hci_version(struct ufs_hba *hba)
 	return hba->ufs_version;
 }
 
+/**
+ * ufs_mtk_init_clocks - Init mtk driver private clocks
+ *
+ * @hba: per adapter instance
+ */
+static void ufs_mtk_init_clocks(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct list_head *head = &hba->clk_list_head;
+	struct ufs_mtk_clk *mclk = &host->mclk;
+	struct ufs_clk_info *clki, *clki_tmp;
+
+	/*
+	 * Find private clocks and store them in struct ufs_mtk_clk.
+	 * Remove "ufs_sel_min_src" and "ufs_sel_min_src" from list to avoid
+	 * being switched on/off in clock gating.
+	 */
+	list_for_each_entry_safe(clki, clki_tmp, head, list) {
+		if (!strcmp(clki->name, "ufs_sel")) {
+			host->mclk.ufs_sel_clki = clki;
+		} else if (!strcmp(clki->name, "ufs_sel_max_src")) {
+			host->mclk.ufs_sel_max_clki = clki;
+			clk_disable_unprepare(clki->clk);
+			list_del(&clki->list);
+		} else if (!strcmp(clki->name, "ufs_sel_min_src")) {
+			host->mclk.ufs_sel_min_clki = clki;
+			clk_disable_unprepare(clki->clk);
+			list_del(&clki->list);
+		}
+	}
+
+	if (!mclk->ufs_sel_clki || !mclk->ufs_sel_max_clki ||
+	    !mclk->ufs_sel_min_clki) {
+		hba->caps &= ~UFSHCD_CAP_CLK_SCALING;
+		dev_info(hba->dev,
+			 "%s: Clk-scaling not ready. Feature disabled.",
+			 __func__);
+	}
+}
+
 #define MAX_VCC_NAME 30
 static int ufs_mtk_vreg_fix_vcc(struct ufs_hba *hba)
 {
@@ -820,12 +860,18 @@ static int ufs_mtk_init(struct ufs_hba *hba)
 
 	/* Enable WriteBooster */
 	hba->caps |= UFSHCD_CAP_WB_EN;
+
+	/* Enable clk scaling*/
+	hba->caps |= UFSHCD_CAP_CLK_SCALING;
+
 	hba->quirks |= UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL;
 	hba->vps->wb_flush_threshold = UFS_WB_BUF_REMAIN_PERCENT(80);
 
 	if (host->caps & UFS_MTK_CAP_DISABLE_AH8)
 		hba->caps |= UFSHCD_CAP_HIBERN8_WITH_CLK_GATING;
 
+	ufs_mtk_init_clocks(hba);
+
 	/*
 	 * ufshcd_vops_init() is invoked after
 	 * ufshcd_setup_clock(true) in ufshcd_hba_init() thus
@@ -1346,6 +1392,76 @@ static void ufs_mtk_event_notify(struct ufs_hba *hba,
 	}
 }
 
+static void ufs_mtk_config_scaling_param(struct ufs_hba *hba,
+				struct devfreq_dev_profile *profile,
+				struct devfreq_simple_ondemand_data *data)
+{
+	/* Customize min gear in clk scaling */
+	hba->clk_scaling.min_gear = UFS_HS_G4;
+
+	hba->vps->devfreq_profile.polling_ms = 200;
+	hba->vps->ondemand_data.upthreshold = 50;
+	hba->vps->ondemand_data.downdifferential = 20;
+}
+
+/**
+ * ufs_mtk_clk_scale - Internal clk scaling operation
+ *
+ * MTK platform supports clk scaling by switching parent of ufs_sel(mux).
+ * The ufs_sel downstream to ufs_ck which feeds directly to UFS hardware.
+ * Max and min clocks rate of ufs_sel defined in dts should match rate of
+ * "ufs_sel_max_src" and "ufs_sel_min_src" respectively.
+ * This prevent changing rate of pll clock that is shared between modules.
+ *
+ * @hba: per adapter instance
+ * @scale_up: True for scaling up and false for scaling down
+ */
+static void ufs_mtk_clk_scale(struct ufs_hba *hba, bool scale_up)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct ufs_mtk_clk *mclk = &host->mclk;
+	struct ufs_clk_info *clki = mclk->ufs_sel_clki;
+	int ret = 0;
+
+	ret = clk_prepare_enable(clki->clk);
+	if (ret) {
+		dev_info(hba->dev,
+			 "clk_prepare_enable() fail, ret: %d\n", ret);
+		return;
+	}
+
+	if (scale_up) {
+		ret = clk_set_parent(clki->clk, mclk->ufs_sel_max_clki->clk);
+		clki->curr_freq = clki->max_freq;
+	} else {
+		ret = clk_set_parent(clki->clk, mclk->ufs_sel_min_clki->clk);
+		clki->curr_freq = clki->min_freq;
+	}
+
+	if (ret) {
+		dev_info(hba->dev,
+			 "Failed to set ufs_sel_clki, ret: %d\n", ret);
+	}
+
+	clk_disable_unprepare(clki->clk);
+
+	trace_ufs_mtk_clk_scale(clki->name, scale_up, clk_get_rate(clki->clk));
+}
+
+static int ufs_mtk_clk_scale_notify(struct ufs_hba *hba, bool scale_up,
+				    enum ufs_notify_change_status status)
+{
+	if (status == PRE_CHANGE) {
+		/* Switch parent before clk_set_rate() */
+		ufs_mtk_clk_scale(hba, scale_up);
+	} else {
+		/* Request interrupt latency QoS accordingly */
+		ufs_mtk_scale_perf(hba, scale_up);
+	}
+
+	return 0;
+}
+
 /*
  * struct ufs_hba_mtk_vops - UFS MTK specific variant operations
  *
@@ -1367,6 +1483,8 @@ static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
 	.dbg_register_dump   = ufs_mtk_dbg_register_dump,
 	.device_reset        = ufs_mtk_device_reset,
 	.event_notify        = ufs_mtk_event_notify,
+	.config_scaling_param = ufs_mtk_config_scaling_param,
+	.clk_scale_notify    = ufs_mtk_clk_scale_notify,
 };
 
 /**
diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h
index 9017ab8f9867..c7ab9971b550 100644
--- a/drivers/ufs/host/ufs-mediatek.h
+++ b/drivers/ufs/host/ufs-mediatek.h
@@ -162,6 +162,12 @@ struct ufs_mtk_crypt_cfg {
 	int vcore_volt;
 };
 
+struct ufs_mtk_clk {
+	struct ufs_clk_info *ufs_sel_clki; /* Mux */
+	struct ufs_clk_info *ufs_sel_max_clki; /* Max src */
+	struct ufs_clk_info *ufs_sel_min_clki; /* Min src */
+};
+
 struct ufs_mtk_hw_ver {
 	u8 step;
 	u8 minor;
@@ -177,6 +183,7 @@ struct ufs_mtk_host {
 	struct reset_control *crypto_reset;
 	struct ufs_hba *hba;
 	struct ufs_mtk_crypt_cfg *crypt;
+	struct ufs_mtk_clk mclk;
 	struct ufs_mtk_hw_ver hw_ver;
 	enum ufs_mtk_host_caps caps;
 	bool mphy_powered_on;
-- 
2.18.0


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

* Re: [PATCH v2 1/5] scsi: ufs: ufs-mediatek: Remove redundant header files
  2022-07-27  3:44 ` [PATCH v2 1/5] scsi: ufs: ufs-mediatek: Remove redundant header files Stanley Chu
@ 2022-07-27 17:55   ` Bart Van Assche
  2022-07-28  1:33     ` Stanley Chu
  0 siblings, 1 reply; 10+ messages in thread
From: Bart Van Assche @ 2022-07-27 17:55 UTC (permalink / raw)
  To: Stanley Chu, linux-scsi, linux-kernel, martin.petersen,
	avri.altman, alim.akhtar, jejb
  Cc: peter.wang, chun-hung.wu, alice.chao, powen.kao, mason.zhang,
	qilin.tan, lin.gui, eddie.huang, tun-yu.yu, cc.chou,
	chaotian.jing, jiajie.hao

On 7/26/22 20:44, Stanley Chu wrote:
> Remove redundant header files like
> <linux/sched/clock.h>
> 
> Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
> Change-Id: I7796a23a5fdc767a4d00475b399844ceeaded0a8

Please leave out Change-Id tags from patches that are sent upstream.

Otherwise this patch looks good to me.

Thanks,

Bart.

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

* Re: [PATCH v2 2/5] scsi: ufs: ufs-mediatek: Provide detailed description for UIC errors
  2022-07-27  3:44 ` [PATCH v2 2/5] scsi: ufs: ufs-mediatek: Provide detailed description for UIC errors Stanley Chu
@ 2022-07-27 17:57   ` Bart Van Assche
  2022-07-28  2:26     ` Stanley Chu
  0 siblings, 1 reply; 10+ messages in thread
From: Bart Van Assche @ 2022-07-27 17:57 UTC (permalink / raw)
  To: Stanley Chu, linux-scsi, linux-kernel, martin.petersen,
	avri.altman, alim.akhtar, jejb
  Cc: peter.wang, chun-hung.wu, alice.chao, powen.kao, mason.zhang,
	qilin.tan, lin.gui, eddie.huang, tun-yu.yu, cc.chou,
	chaotian.jing, jiajie.hao

On 7/26/22 20:44, Stanley Chu wrote:
> diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h
> index aa26d415527b..9017ab8f9867 100644
> --- a/drivers/ufs/host/ufs-mediatek.h
> +++ b/drivers/ufs/host/ufs-mediatek.h
> @@ -26,6 +26,44 @@
>   #define REG_UFS_DEBUG_SEL_B2        0x22D8
>   #define REG_UFS_DEBUG_SEL_B3        0x22DC
>   
> +/*
> + * Details of UIC Errors
> + */
> +static const u8 *ufs_uic_err_str[] = {
> +	"PHY Adapter Layer",
> +	"Data Link Layer",
> +	"Network Link Layer",
> +	"Transport Link Layer",
> +	"DME"
> +};

Why type u8 for strings instead of char?

Please define arrays in .c files. Otherwise one copy of the array will 
be included in each source file this header file is included in.

Thanks,

Bart.

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

* Re: [PATCH v2 1/5] scsi: ufs: ufs-mediatek: Remove redundant header files
  2022-07-27 17:55   ` Bart Van Assche
@ 2022-07-28  1:33     ` Stanley Chu
  0 siblings, 0 replies; 10+ messages in thread
From: Stanley Chu @ 2022-07-28  1:33 UTC (permalink / raw)
  To: Bart Van Assche
  Cc: Stanley Chu, linux-scsi, linux-kernel, Martin K . Petersen,
	Avri Altman, alim.akhtar, James E.J. Bottomley, peter.wang,
	Chun-Hung Wu, alice.chao, powen.kao, mason.zhang, qilin.tan,
	lin.gui, eddie.huang, tun-yu.yu, cc.chou, chaotian.jing,
	jiajie.hao

Hi Bart,

On Thu, Jul 28, 2022 at 3:03 AM Bart Van Assche <bvanassche@acm.org> wrote:
>
> On 7/26/22 20:44, Stanley Chu wrote:
> > Remove redundant header files like
> > <linux/sched/clock.h>
> >
> > Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
> > Change-Id: I7796a23a5fdc767a4d00475b399844ceeaded0a8
>
> Please leave out Change-Id tags from patches that are sent upstream.

Ooops, I forgot to clean them up in v2. Will fix it in the next version.

Thanks, Stanley

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

* Re: [PATCH v2 2/5] scsi: ufs: ufs-mediatek: Provide detailed description for UIC errors
  2022-07-27 17:57   ` Bart Van Assche
@ 2022-07-28  2:26     ` Stanley Chu
  0 siblings, 0 replies; 10+ messages in thread
From: Stanley Chu @ 2022-07-28  2:26 UTC (permalink / raw)
  To: Bart Van Assche
  Cc: Stanley Chu, linux-scsi, linux-kernel, Martin K . Petersen,
	Avri Altman, alim.akhtar, James E.J. Bottomley, peter.wang,
	Chun-Hung Wu, alice.chao, powen.kao, mason.zhang, qilin.tan,
	lin.gui, eddie.huang, tun-yu.yu, cc.chou, chaotian.jing,
	jiajie.hao

Hi Bart,

On Thu, Jul 28, 2022 at 3:04 AM Bart Van Assche <bvanassche@acm.org> wrote:
>
> On 7/26/22 20:44, Stanley Chu wrote:
> > diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h
> > index aa26d415527b..9017ab8f9867 100644
> > --- a/drivers/ufs/host/ufs-mediatek.h
> > +++ b/drivers/ufs/host/ufs-mediatek.h
> > @@ -26,6 +26,44 @@
> >   #define REG_UFS_DEBUG_SEL_B2        0x22D8
> >   #define REG_UFS_DEBUG_SEL_B3        0x22DC
> >
> > +/*
> > + * Details of UIC Errors
> > + */
> > +static const u8 *ufs_uic_err_str[] = {
> > +     "PHY Adapter Layer",
> > +     "Data Link Layer",
> > +     "Network Link Layer",
> > +     "Transport Link Layer",
> > +     "DME"
> > +};
>
> Why type u8 for strings instead of char?

Will use char instead in the next version.

>
> Please define arrays in .c files. Otherwise one copy of the array will
> be included in each source file this header file is included in.

Will move them to .c in the next version.

Thanks, Stanley



-- 
Yours truly,

朱原陞 (Stanley Chu)

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

end of thread, other threads:[~2022-07-28  2:26 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-27  3:44 [PATCH v2 0/5] scsi: ufs-mediatek: Provide features and fixes in MediaTek platforms Stanley Chu
2022-07-27  3:44 ` [PATCH v2 1/5] scsi: ufs: ufs-mediatek: Remove redundant header files Stanley Chu
2022-07-27 17:55   ` Bart Van Assche
2022-07-28  1:33     ` Stanley Chu
2022-07-27  3:44 ` [PATCH v2 2/5] scsi: ufs: ufs-mediatek: Provide detailed description for UIC errors Stanley Chu
2022-07-27 17:57   ` Bart Van Assche
2022-07-28  2:26     ` Stanley Chu
2022-07-27  3:44 ` [PATCH v2 3/5] scsi: ufs: ufs-mediatek: Dump more registers Stanley Chu
2022-07-27  3:44 ` [PATCH v2 4/5] scsi: ufs: ufs-mediatek: Fix performance scaling Stanley Chu
2022-07-27  3:44 ` [PATCH v2 5/5] scsi: ufs: ufs-medaitek: Support clk-scaling to optimize power consumption Stanley Chu

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.