All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform
@ 2022-06-23  3:50 Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 1/8] scsi: ufs-mediatek: Fix build warnings Stanley Chu
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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 fixes and features in MediaTek UFS platform.
Please consider this patch series for kernel v5.20.

Compared to v1:
- Add one patch to fix invalid access to vccqx

Alice Chao (1):
  scsi: ufs-mediatek: Fix invalid access to vccqx

Peter Wang (4):
  scsi: ufs-mediatek: Always add delays for VCC operations
  scsi: ufs-mediatek: Prevent host hang by setting CLK_CG early
  scsi: ufs-mediatek: Add stage information for ref-clk control
  scsi: ufs-mediatek: Support performance boosting

Po-Wen Kao (2):
  scsi: ufs-mediatek: Disable reset confirm feature by UniPro
  scsi: ufs-mediatek: Support host power control

Stanley Chu (1):
  scsi: ufs-mediatek: Fix build warnings

 drivers/ufs/host/ufs-mediatek.c | 77 +++++++++++++++++++++++++--------
 drivers/ufs/host/ufs-mediatek.h | 20 ++++++++-
 2 files changed, 76 insertions(+), 21 deletions(-)

-- 
2.18.0


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

* [PATCH v2 1/8] scsi: ufs-mediatek: Fix build warnings
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
@ 2022-06-23  3:50 ` Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 2/8] scsi: ufs-mediatek: Always add delays for VCC operations Stanley Chu
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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

Fix build warnings as below,
1.
../drivers/ufs/host/ufs-mediatek.c:1375:5: error: no previous prototype for function 'ufs_mtk_system_suspend' [-Werror,-Wmissing-prototypes]
int ufs_mtk_system_suspend(struct device *dev)
    ^
../drivers/ufs/host/ufs-mediatek.c:1375:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int ufs_mtk_system_suspend(struct device *dev)
^
static

2.
../drivers/ufs/host/ufs-mediatek.c:702:50: error: format specifies type 'unsigned long' but the argument has type 'int' [-Werror,-Wformat]
                snprintf(vcc_name, MAX_VCC_NAME, "vcc-ufs%lu", ver);
                                                         ~~~   ^~~
                                                         %d

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

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index 3ee27f2bcdfc..d970c6607b4a 100755
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -690,7 +690,7 @@ static int ufs_mtk_vreg_fix_vcc(struct ufs_hba *hba)
 			return -ENODEV;
 	} else if (of_property_read_bool(np, "mediatek,ufs-vcc-by-ver")) {
 		ver = (hba->dev_info.wspecversion & 0xF00) >> 8;
-		snprintf(vcc_name, MAX_VCC_NAME, "vcc-ufs%lu", ver);
+		snprintf(vcc_name, MAX_VCC_NAME, "vcc-ufs%d", ver);
 	} else {
 		return 0;
 	}
@@ -1364,7 +1364,7 @@ static int ufs_mtk_remove(struct platform_device *pdev)
 }
 
 #ifdef CONFIG_PM_SLEEP
-int ufs_mtk_system_suspend(struct device *dev)
+static int ufs_mtk_system_suspend(struct device *dev)
 {
 	struct ufs_hba *hba = dev_get_drvdata(dev);
 	int ret;
@@ -1378,7 +1378,7 @@ int ufs_mtk_system_suspend(struct device *dev)
 	return 0;
 }
 
-int ufs_mtk_system_resume(struct device *dev)
+static int ufs_mtk_system_resume(struct device *dev)
 {
 	struct ufs_hba *hba = dev_get_drvdata(dev);
 
@@ -1388,7 +1388,7 @@ int ufs_mtk_system_resume(struct device *dev)
 }
 #endif
 
-int ufs_mtk_runtime_suspend(struct device *dev)
+static int ufs_mtk_runtime_suspend(struct device *dev)
 {
 	struct ufs_hba *hba = dev_get_drvdata(dev);
 	int ret = 0;
@@ -1402,7 +1402,7 @@ int ufs_mtk_runtime_suspend(struct device *dev)
 	return 0;
 }
 
-int ufs_mtk_runtime_resume(struct device *dev)
+static int ufs_mtk_runtime_resume(struct device *dev)
 {
 	struct ufs_hba *hba = dev_get_drvdata(dev);
 
-- 
2.18.0


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

* [PATCH v2 2/8] scsi: ufs-mediatek: Always add delays for VCC operations
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 1/8] scsi: ufs-mediatek: Fix build warnings Stanley Chu
@ 2022-06-23  3:50 ` Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 3/8] scsi: ufs-mediatek: Prevent host hang by setting CLK_CG early Stanley Chu
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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>

MediaTek decides to always add delays before and after VCC
is turned-off.

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

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index d970c6607b4a..f76e2999ac99 100755
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -31,9 +31,10 @@
 #include "ufs-mediatek-trace.h"
 
 static const struct ufs_dev_quirk ufs_mtk_dev_fixups[] = {
-	{ .wmanufacturerid = UFS_VENDOR_MICRON,
+	{ .wmanufacturerid = UFS_ANY_VENDOR,
 	  .model = UFS_ANY_MODEL,
-	  .quirk = UFS_DEVICE_QUIRK_DELAY_AFTER_LPM },
+	  .quirk = UFS_DEVICE_QUIRK_DELAY_AFTER_LPM |
+		UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM },
 	{ .wmanufacturerid = UFS_VENDOR_SKHYNIX,
 	  .model = "H9HQ21AFAMZDAR",
 	  .quirk = UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES },
-- 
2.18.0


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

* [PATCH v2 3/8] scsi: ufs-mediatek: Prevent host hang by setting CLK_CG early
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 1/8] scsi: ufs-mediatek: Fix build warnings Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 2/8] scsi: ufs-mediatek: Always add delays for VCC operations Stanley Chu
@ 2022-06-23  3:50 ` Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 4/8] scsi: ufs-mediatek: Add stage information for ref-clk control Stanley Chu
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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>

Some UFSHCI hosts in MediaTek UFS platform need workaround
to prevent host hang issue by setting CLK_CG bit before
host is enabled.

This operation shall have no side effect on those platforms
which do not support this bit.

Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c | 8 ++++++++
 drivers/ufs/host/ufs-mediatek.h | 1 +
 2 files changed, 9 insertions(+)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index f76e2999ac99..d6b2734e7f81 100755
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -183,6 +183,14 @@ static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba,
 			hba->capabilities &= ~MASK_AUTO_HIBERN8_SUPPORT;
 			hba->ahit = 0;
 		}
+
+		/*
+		 * Turn on CLK_CG early to bypass abnormal ERR_CHK signal
+		 * to prevent host hang issue
+		 */
+		ufshcd_writel(hba,
+			      ufshcd_readl(hba, REG_UFS_XOUFS_CTRL) | 0x80,
+			      REG_UFS_XOUFS_CTRL);
 	}
 
 	return 0;
diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h
index 49a2137fb251..f5c1c643dd52 100755
--- a/drivers/ufs/host/ufs-mediatek.h
+++ b/drivers/ufs/host/ufs-mediatek.h
@@ -12,6 +12,7 @@
 /*
  * Vendor specific UFSHCI Registers
  */
+#define REG_UFS_XOUFS_CTRL          0x140
 #define REG_UFS_REFCLK_CTRL         0x144
 #define REG_UFS_EXTREG              0x2100
 #define REG_UFS_MPHYCTRL            0x2200
-- 
2.18.0


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

* [PATCH v2 4/8] scsi: ufs-mediatek: Add stage information for ref-clk control
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
                   ` (2 preceding siblings ...)
  2022-06-23  3:50 ` [PATCH v2 3/8] scsi: ufs-mediatek: Prevent host hang by setting CLK_CG early Stanley Chu
@ 2022-06-23  3:50 ` Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 5/8] scsi: ufs-mediatek: Disable reset confirm feature by UniPro Stanley Chu
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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>

Add "PRE_CHANGE" and "POST_CHANGE" information for
ref-clk control to precisely configure the low-power
state of the parent of ref-clk.

Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c | 9 +++++----
 drivers/ufs/host/ufs-mediatek.h | 4 ++--
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index d6b2734e7f81..8184e871ff8e 100755
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -244,8 +244,9 @@ static int ufs_mtk_setup_ref_clk(struct ufs_hba *hba, bool on)
 	if (host->ref_clk_enabled == on)
 		return 0;
 
+	ufs_mtk_ref_clk_notify(on, PRE_CHANGE, res);
+
 	if (on) {
-		ufs_mtk_ref_clk_notify(on, res);
 		ufshcd_writel(hba, REFCLK_REQUEST, REG_UFS_REFCLK_CTRL);
 	} else {
 		ufshcd_delay_us(host->ref_clk_gating_wait_us, 10);
@@ -267,7 +268,7 @@ static int ufs_mtk_setup_ref_clk(struct ufs_hba *hba, bool on)
 
 	dev_err(hba->dev, "missing ack of refclk req, reg: 0x%x\n", value);
 
-	ufs_mtk_ref_clk_notify(host->ref_clk_enabled, res);
+	ufs_mtk_ref_clk_notify(host->ref_clk_enabled, POST_CHANGE, res);
 
 	return -ETIMEDOUT;
 
@@ -275,8 +276,8 @@ static int ufs_mtk_setup_ref_clk(struct ufs_hba *hba, bool on)
 	host->ref_clk_enabled = on;
 	if (on)
 		ufshcd_delay_us(host->ref_clk_ungating_wait_us, 10);
-	else
-		ufs_mtk_ref_clk_notify(on, res);
+
+	ufs_mtk_ref_clk_notify(on, POST_CHANGE, res);
 
 	return 0;
 }
diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h
index f5c1c643dd52..c12ceb4d941f 100755
--- a/drivers/ufs/host/ufs-mediatek.h
+++ b/drivers/ufs/host/ufs-mediatek.h
@@ -189,8 +189,8 @@ static void _ufs_mtk_smc(struct ufs_mtk_smc_arg s)
 #define ufs_mtk_crypto_ctrl(res, enable) \
 	ufs_mtk_smc(UFS_MTK_SIP_CRYPTO_CTRL, &(res), enable)
 
-#define ufs_mtk_ref_clk_notify(on, res) \
-	ufs_mtk_smc(UFS_MTK_SIP_REF_CLK_NOTIFICATION, &(res), on)
+#define ufs_mtk_ref_clk_notify(on, stage, res) \
+	ufs_mtk_smc(UFS_MTK_SIP_REF_CLK_NOTIFICATION, &(res), on, stage)
 
 #define ufs_mtk_device_reset_ctrl(high, res) \
 	ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, &(res), high)
-- 
2.18.0


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

* [PATCH v2 5/8] scsi: ufs-mediatek: Disable reset confirm feature by UniPro
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
                   ` (3 preceding siblings ...)
  2022-06-23  3:50 ` [PATCH v2 4/8] scsi: ufs-mediatek: Add stage information for ref-clk control Stanley Chu
@ 2022-06-23  3:50 ` Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 6/8] scsi: ufs-mediatek: Support host power control Stanley Chu
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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>

In MediaTek UFS platforms, UniPro will not return reset confirm
if it is in POWERDOWN state thus hang issue may happen while disabling
UFSHCI. Simply disable this feature before UniPro leaves POWERDOWN
state.

Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Po-Wen Kao <powen.kao@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index 8184e871ff8e..348966dbad78 100755
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -1079,6 +1079,11 @@ static int ufs_mtk_link_set_lpm(struct ufs_hba *hba)
 {
 	int err;
 
+	/* Disable reset confirm feature by UniPro */
+	ufshcd_writel(hba,
+		      (ufshcd_readl(hba, REG_UFS_XOUFS_CTRL) & ~0x100),
+		      REG_UFS_XOUFS_CTRL);
+
 	err = ufs_mtk_unipro_set_lpm(hba, true);
 	if (err) {
 		/* Resume UniPro state for following error recovery */
-- 
2.18.0


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

* [PATCH v2 6/8] scsi: ufs-mediatek: Support host power control
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
                   ` (4 preceding siblings ...)
  2022-06-23  3:50 ` [PATCH v2 5/8] scsi: ufs-mediatek: Disable reset confirm feature by UniPro Stanley Chu
@ 2022-06-23  3:50 ` Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 7/8] scsi: ufs-mediatek: Support performance boosting Stanley Chu
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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>

Add interfaces for controlling the host power to
optimize the power consumption in MediaTek UFS platforms.

Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Po-Wen Kao <powen.kao@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c |  5 +++++
 drivers/ufs/host/ufs-mediatek.h | 12 ++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index 348966dbad78..085ba05ff4d4 100755
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -1190,6 +1190,8 @@ static int ufs_mtk_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op,
 	if (ufshcd_is_link_off(hba))
 		ufs_mtk_device_reset_ctrl(0, res);
 
+	ufs_mtk_host_pwr_ctrl(HOST_PWR_HCI, false, res);
+
 	return 0;
 fail:
 	/*
@@ -1204,10 +1206,13 @@ static int ufs_mtk_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op,
 static int ufs_mtk_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 {
 	int err;
+	struct arm_smccc_res res;
 
 	if (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL)
 		ufs_mtk_dev_vreg_set_lpm(hba, false);
 
+	ufs_mtk_host_pwr_ctrl(HOST_PWR_HCI, true, res);
+
 	err = ufs_mtk_mphy_power_on(hba, true);
 	if (err)
 		goto fail;
diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h
index c12ceb4d941f..cdf40851e626 100755
--- a/drivers/ufs/host/ufs-mediatek.h
+++ b/drivers/ufs/host/ufs-mediatek.h
@@ -84,6 +84,7 @@ enum {
 #define UFS_MTK_SIP_DEVICE_RESET          BIT(1)
 #define UFS_MTK_SIP_CRYPTO_CTRL           BIT(2)
 #define UFS_MTK_SIP_REF_CLK_NOTIFICATION  BIT(3)
+#define UFS_MTK_SIP_HOST_PWR_CTRL         BIT(5)
 #define UFS_MTK_SIP_GET_VCC_NUM           BIT(6)
 #define UFS_MTK_SIP_DEVICE_PWR_CTRL       BIT(7)
 
@@ -156,6 +157,14 @@ enum ufs_mtk_vcc_num {
 	UFS_VCC_MAX
 };
 
+/*
+ * Host Power Control options
+ */
+enum {
+	HOST_PWR_HCI = 0,
+	HOST_PWR_MPHY
+};
+
 /*
  * SMC call wrapper function
  */
@@ -195,6 +204,9 @@ static void _ufs_mtk_smc(struct ufs_mtk_smc_arg s)
 #define ufs_mtk_device_reset_ctrl(high, res) \
 	ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, &(res), high)
 
+#define ufs_mtk_host_pwr_ctrl(opt, on, res) \
+	ufs_mtk_smc(UFS_MTK_SIP_HOST_PWR_CTRL, &(res), opt, on)
+
 #define ufs_mtk_get_vcc_num(res) \
 	ufs_mtk_smc(UFS_MTK_SIP_GET_VCC_NUM, &(res))
 
-- 
2.18.0


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

* [PATCH v2 7/8] scsi: ufs-mediatek: Support performance boosting
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
                   ` (5 preceding siblings ...)
  2022-06-23  3:50 ` [PATCH v2 6/8] scsi: ufs-mediatek: Support host power control Stanley Chu
@ 2022-06-23  3:50 ` Stanley Chu
  2022-06-23  3:50 ` [PATCH v2 8/8] scsi: ufs-mediatek: Fix invalid access to vccqx Stanley Chu
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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>

Add pm-qos request to support performance boosting in
MediaTek UFS platforms.

In the same time, adjust the order of function calls
to be symmetric during the low-power control flow.

Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c | 34 +++++++++++++++++++++++++--------
 drivers/ufs/host/ufs-mediatek.h |  3 +++
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index 085ba05ff4d4..125d64e097f2 100755
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -16,6 +16,7 @@
 #include <linux/of_device.h>
 #include <linux/phy/phy.h>
 #include <linux/platform_device.h>
+#include <linux/pm_qos.h>
 #include <linux/regulator/consumer.h>
 #include <linux/reset.h>
 #include <linux/sched/clock.h>
@@ -586,17 +587,32 @@ static void ufs_mtk_init_host_caps(struct ufs_hba *hba)
 	dev_info(hba->dev, "caps: 0x%x", host->caps);
 }
 
-static void ufs_mtk_scale_perf(struct ufs_hba *hba, bool up)
+static void ufs_mtk_boost_pm_qos(struct ufs_hba *hba, bool boost)
 {
 	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
 
-	ufs_mtk_boost_crypt(hba, up);
-	ufs_mtk_setup_ref_clk(hba, up);
+	if (!host || !host->pm_qos_init)
+		return;
+
+	cpu_latency_qos_update_request(&host->pm_qos_req,
+				       boost ? 0 : PM_QOS_DEFAULT_VALUE);
+}
+
+static void ufs_mtk_pwr_ctrl(struct ufs_hba *hba, bool on)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
 
-	if (up)
+	if (on) {
 		phy_power_on(host->mphy);
-	else
+		ufs_mtk_setup_ref_clk(hba, on);
+		ufs_mtk_boost_crypt(hba, on);
+		ufs_mtk_boost_pm_qos(hba, on);
+	} else {
+		ufs_mtk_boost_pm_qos(hba, on);
+		ufs_mtk_boost_crypt(hba, on);
+		ufs_mtk_setup_ref_clk(hba, on);
 		phy_power_off(host->mphy);
+	}
 }
 
 /**
@@ -641,9 +657,9 @@ static int ufs_mtk_setup_clocks(struct ufs_hba *hba, bool on,
 		}
 
 		if (clk_pwr_off)
-			ufs_mtk_scale_perf(hba, false);
+			ufs_mtk_pwr_ctrl(hba, false);
 	} else if (on && status == POST_CHANGE) {
-		ufs_mtk_scale_perf(hba, true);
+		ufs_mtk_pwr_ctrl(hba, true);
 	}
 
 	return ret;
@@ -1248,8 +1264,10 @@ static int ufs_mtk_apply_dev_quirks(struct ufs_hba *hba)
 	struct ufs_dev_info *dev_info = &hba->dev_info;
 	u16 mid = dev_info->wmanufacturerid;
 
-	if (mid == UFS_VENDOR_SAMSUNG)
+	if (mid == UFS_VENDOR_SAMSUNG) {
 		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_TACTIVATE), 6);
+		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_HIBERN8TIME), 10);
+	}
 
 	/*
 	 * Decide waiting time before gating reference clock and
diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h
index cdf40851e626..aa26d415527b 100755
--- a/drivers/ufs/host/ufs-mediatek.h
+++ b/drivers/ufs/host/ufs-mediatek.h
@@ -7,6 +7,7 @@
 #define _UFS_MEDIATEK_H
 
 #include <linux/bitops.h>
+#include <linux/pm_qos.h>
 #include <linux/soc/mediatek/mtk_sip_svc.h>
 
 /*
@@ -131,6 +132,7 @@ struct ufs_mtk_hw_ver {
 
 struct ufs_mtk_host {
 	struct phy *mphy;
+	struct pm_qos_request pm_qos_req;
 	struct regulator *reg_va09;
 	struct reset_control *hci_reset;
 	struct reset_control *unipro_reset;
@@ -140,6 +142,7 @@ struct ufs_mtk_host {
 	struct ufs_mtk_hw_ver hw_ver;
 	enum ufs_mtk_host_caps caps;
 	bool mphy_powered_on;
+	bool pm_qos_init;
 	bool unipro_lpm;
 	bool ref_clk_enabled;
 	u16 ref_clk_ungating_wait_us;
-- 
2.18.0


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

* [PATCH v2 8/8] scsi: ufs-mediatek: Fix invalid access to vccqx
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
                   ` (6 preceding siblings ...)
  2022-06-23  3:50 ` [PATCH v2 7/8] scsi: ufs-mediatek: Support performance boosting Stanley Chu
@ 2022-06-23  3:50 ` Stanley Chu
  2022-06-23 13:15 ` [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Bart Van Assche
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Stanley Chu @ 2022-06-23  3:50 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: Alice Chao <alice.chao@mediatek.com>

NULL pointer access issue was found for the regulator released
by ufs_mtk_vreg_fix_vccq(). Simply fix this issue by clearing
the released vreg pointer in ufs_hba struct.

Reviewed-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Alice Chao <alice.chao@mediatek.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
 drivers/ufs/host/ufs-mediatek.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c
index 125d64e097f2..2404df9c3a01 100755
--- a/drivers/ufs/host/ufs-mediatek.c
+++ b/drivers/ufs/host/ufs-mediatek.c
@@ -758,6 +758,7 @@ static void ufs_mtk_vreg_fix_vccqx(struct ufs_hba *hba)
 		regulator_disable((*vreg_off)->reg);
 		devm_kfree(hba->dev, (*vreg_off)->name);
 		devm_kfree(hba->dev, *vreg_off);
+		*vreg_off = NULL;
 	}
 }
 
-- 
2.18.0


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

* Re: [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
                   ` (7 preceding siblings ...)
  2022-06-23  3:50 ` [PATCH v2 8/8] scsi: ufs-mediatek: Fix invalid access to vccqx Stanley Chu
@ 2022-06-23 13:15 ` Bart Van Assche
  2022-06-28  3:18 ` Martin K. Petersen
  2022-07-07 21:47 ` Martin K. Petersen
  10 siblings, 0 replies; 12+ messages in thread
From: Bart Van Assche @ 2022-06-23 13:15 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 6/22/22 20:50, Stanley Chu wrote:
> This series provides some fixes and features in MediaTek UFS platform.
> Please consider this patch series for kernel v5.20.

For the entire series, please add:

Reviewed-by: Bart Van Assche <bvanassche@acm.org>


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

* Re: [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
                   ` (8 preceding siblings ...)
  2022-06-23 13:15 ` [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Bart Van Assche
@ 2022-06-28  3:18 ` Martin K. Petersen
  2022-07-07 21:47 ` Martin K. Petersen
  10 siblings, 0 replies; 12+ messages in thread
From: Martin K. Petersen @ 2022-06-28  3:18 UTC (permalink / raw)
  To: Stanley Chu
  Cc: linux-scsi, linux-kernel, martin.petersen, avri.altman,
	alim.akhtar, jejb, bvanassche, 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,

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

Applied to 5.20/scsi-staging, thanks!

-- 
Martin K. Petersen	Oracle Linux Engineering

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

* Re: [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform
  2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
                   ` (9 preceding siblings ...)
  2022-06-28  3:18 ` Martin K. Petersen
@ 2022-07-07 21:47 ` Martin K. Petersen
  10 siblings, 0 replies; 12+ messages in thread
From: Martin K. Petersen @ 2022-07-07 21:47 UTC (permalink / raw)
  To: linux-scsi, linux-kernel, jejb, alim.akhtar, Stanley Chu,
	bvanassche, avri.altman
  Cc: Martin K . Petersen, cc.chou, eddie.huang, powen.kao, qilin.tan,
	chaotian.jing, lin.gui, alice.chao, tun-yu.yu, peter.wang,
	mason.zhang, jiajie.hao, chun-hung.wu

On Thu, 23 Jun 2022 11:50:44 +0800, Stanley Chu wrote:

> This series provides some fixes and features in MediaTek UFS platform.
> Please consider this patch series for kernel v5.20.
> 
> Compared to v1:
> - Add one patch to fix invalid access to vccqx
> 
> Alice Chao (1):
>   scsi: ufs-mediatek: Fix invalid access to vccqx
> 
> [...]

Applied to 5.20/scsi-queue, thanks!

[1/8] scsi: ufs-mediatek: Fix build warnings
      https://git.kernel.org/mkp/scsi/c/e7bf1d50063c
[2/8] scsi: ufs-mediatek: Always add delays for VCC operations
      https://git.kernel.org/mkp/scsi/c/981b4ac04c2f
[3/8] scsi: ufs-mediatek: Prevent host hang by setting CLK_CG early
      https://git.kernel.org/mkp/scsi/c/2bae03a6ac98
[4/8] scsi: ufs-mediatek: Add stage information for ref-clk control
      https://git.kernel.org/mkp/scsi/c/f53f19135765
[5/8] scsi: ufs-mediatek: Disable reset confirm feature by UniPro
      https://git.kernel.org/mkp/scsi/c/4918694ccd69
[6/8] scsi: ufs-mediatek: Support host power control
      https://git.kernel.org/mkp/scsi/c/2cf5cb2bb131
[7/8] scsi: ufs-mediatek: Support performance boosting
      https://git.kernel.org/mkp/scsi/c/c64c487d9533
[8/8] scsi: ufs-mediatek: Fix invalid access to vccqx
      https://git.kernel.org/mkp/scsi/c/df1ea242e3d7

-- 
Martin K. Petersen	Oracle Linux Engineering

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

end of thread, other threads:[~2022-07-07 21:47 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-23  3:50 [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Stanley Chu
2022-06-23  3:50 ` [PATCH v2 1/8] scsi: ufs-mediatek: Fix build warnings Stanley Chu
2022-06-23  3:50 ` [PATCH v2 2/8] scsi: ufs-mediatek: Always add delays for VCC operations Stanley Chu
2022-06-23  3:50 ` [PATCH v2 3/8] scsi: ufs-mediatek: Prevent host hang by setting CLK_CG early Stanley Chu
2022-06-23  3:50 ` [PATCH v2 4/8] scsi: ufs-mediatek: Add stage information for ref-clk control Stanley Chu
2022-06-23  3:50 ` [PATCH v2 5/8] scsi: ufs-mediatek: Disable reset confirm feature by UniPro Stanley Chu
2022-06-23  3:50 ` [PATCH v2 6/8] scsi: ufs-mediatek: Support host power control Stanley Chu
2022-06-23  3:50 ` [PATCH v2 7/8] scsi: ufs-mediatek: Support performance boosting Stanley Chu
2022-06-23  3:50 ` [PATCH v2 8/8] scsi: ufs-mediatek: Fix invalid access to vccqx Stanley Chu
2022-06-23 13:15 ` [PATCH v2 0/8] Provide features and fixes in MediaTek UFS platform Bart Van Assche
2022-06-28  3:18 ` Martin K. Petersen
2022-07-07 21:47 ` Martin K. Petersen

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.