* [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling
@ 2021-01-20 15:01 Stanley Chu
2021-01-20 15:01 ` [PATCH v3 1/3] scsi: ufs: Refactor cancelling clkscaling works Stanley Chu
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Stanley Chu @ 2021-01-20 15:01 UTC (permalink / raw)
To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb
Cc: Stanley Chu, alice.chao, bvanassche, andy.teng, cc.chou,
chun-hung.wu, kuohong.wang, linux-kernel, jiajie.hao, cang,
linux-mediatek, peter.wang, matthias.bgg, beanhuo, chaotian.jing,
linux-arm-kernel, asutoshd
Hi,
This series cleans up and refactors clk-scaling feature, and shall not change any functionality.
This series is based on Can's series "Three changes related with UFS clock scaling" in 5.12/scsi-queue branch in Martin's tree.
Changes since v2:
- Remove patch 4
- Rebase to Can's series: [v11] Three changes related with UFS clock scaling
Changes since v1:
- Refactor ufshcd_clk_scaling_suspend() in patch [3/4]
- Change function name from ufshcd_clk_scaling_pm() to ufshcd_clk_scaling_suspend() in patch [3/4]
- Refine patch titles
Stanley Chu (3):
scsi: ufs: Refactor cancelling clkscaling works
scsi: ufs: Remove redundant null checking of devfreq instance
scsi: ufs: Cleanup and refactor clk-scaling feature
drivers/scsi/ufs/ufshcd.c | 87 ++++++++++++++++++---------------------
1 file changed, 41 insertions(+), 46 deletions(-)
--
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/3] scsi: ufs: Refactor cancelling clkscaling works
2021-01-20 15:01 [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Stanley Chu
@ 2021-01-20 15:01 ` Stanley Chu
2021-01-20 15:01 ` [PATCH v3 2/3] scsi: ufs: Remove redundant null checking of devfreq instance Stanley Chu
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Stanley Chu @ 2021-01-20 15:01 UTC (permalink / raw)
To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb
Cc: Stanley Chu, alice.chao, bvanassche, andy.teng, cc.chou,
chun-hung.wu, kuohong.wang, linux-kernel, jiajie.hao, cang,
linux-mediatek, peter.wang, matthias.bgg, beanhuo, chaotian.jing,
linux-arm-kernel, asutoshd
Cancelling suspend_work and resume_work is only required while
suspending clk-scaling. Thus moving these two invokes into
ufshcd_suspend_clkscaling() function.
Reviewed-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
drivers/scsi/ufs/ufshcd.c | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 5450e049d1a9..226504d05c14 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -1503,6 +1503,9 @@ static void ufshcd_suspend_clkscaling(struct ufs_hba *hba)
if (!ufshcd_is_clkscaling_supported(hba))
return;
+ cancel_work_sync(&hba->clk_scaling.suspend_work);
+ cancel_work_sync(&hba->clk_scaling.resume_work);
+
spin_lock_irqsave(hba->host->host_lock, flags);
if (!hba->clk_scaling.is_suspended) {
suspend = true;
@@ -1564,9 +1567,6 @@ static ssize_t ufshcd_clkscale_enable_store(struct device *dev,
pm_runtime_get_sync(hba->dev);
ufshcd_hold(hba, false);
- cancel_work_sync(&hba->clk_scaling.suspend_work);
- cancel_work_sync(&hba->clk_scaling.resume_work);
-
hba->clk_scaling.is_enabled = value;
if (value) {
@@ -5783,11 +5783,8 @@ static void ufshcd_err_handling_prepare(struct ufs_hba *hba)
ufshcd_vops_resume(hba, pm_op);
} else {
ufshcd_hold(hba, false);
- if (hba->clk_scaling.is_enabled) {
- cancel_work_sync(&hba->clk_scaling.suspend_work);
- cancel_work_sync(&hba->clk_scaling.resume_work);
+ if (hba->clk_scaling.is_enabled)
ufshcd_suspend_clkscaling(hba);
- }
down_write(&hba->clk_scaling_lock);
hba->clk_scaling.is_allowed = false;
up_write(&hba->clk_scaling_lock);
@@ -8707,11 +8704,9 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
ufshcd_hold(hba, false);
hba->clk_gating.is_suspended = true;
- if (hba->clk_scaling.is_enabled) {
- cancel_work_sync(&hba->clk_scaling.suspend_work);
- cancel_work_sync(&hba->clk_scaling.resume_work);
+ if (hba->clk_scaling.is_enabled)
ufshcd_suspend_clkscaling(hba);
- }
+
down_write(&hba->clk_scaling_lock);
hba->clk_scaling.is_allowed = false;
up_write(&hba->clk_scaling_lock);
--
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/3] scsi: ufs: Remove redundant null checking of devfreq instance
2021-01-20 15:01 [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Stanley Chu
2021-01-20 15:01 ` [PATCH v3 1/3] scsi: ufs: Refactor cancelling clkscaling works Stanley Chu
@ 2021-01-20 15:01 ` Stanley Chu
2021-01-20 15:01 ` [PATCH v3 3/3] scsi: ufs: Cleanup and refactor clk-scaling feature Stanley Chu
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Stanley Chu @ 2021-01-20 15:01 UTC (permalink / raw)
To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb
Cc: Stanley Chu, alice.chao, bvanassche, andy.teng, cc.chou,
chun-hung.wu, kuohong.wang, linux-kernel, jiajie.hao, cang,
linux-mediatek, peter.wang, matthias.bgg, beanhuo, chaotian.jing,
linux-arm-kernel, asutoshd
hba->devfreq is zero-initialized thus it is not required
to check its existence in ufshcd_add_lus() function which
is invoked during initialization only.
Reviewed-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
drivers/scsi/ufs/ufshcd.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 226504d05c14..f707234580ea 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -7777,15 +7777,14 @@ static int ufshcd_add_lus(struct ufs_hba *hba)
&hba->pwr_info,
sizeof(struct ufs_pa_layer_attr));
hba->clk_scaling.saved_pwr_info.is_valid = true;
- if (!hba->devfreq) {
- hba->clk_scaling.is_allowed = true;
- ret = ufshcd_devfreq_init(hba);
- if (ret)
- goto out;
+ hba->clk_scaling.is_allowed = true;
- hba->clk_scaling.is_enabled = true;
- ufshcd_init_clk_scaling_sysfs(hba);
- }
+ ret = ufshcd_devfreq_init(hba);
+ if (ret)
+ goto out;
+
+ hba->clk_scaling.is_enabled = true;
+ ufshcd_init_clk_scaling_sysfs(hba);
}
ufs_bsg_probe(hba);
--
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 3/3] scsi: ufs: Cleanup and refactor clk-scaling feature
2021-01-20 15:01 [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Stanley Chu
2021-01-20 15:01 ` [PATCH v3 1/3] scsi: ufs: Refactor cancelling clkscaling works Stanley Chu
2021-01-20 15:01 ` [PATCH v3 2/3] scsi: ufs: Remove redundant null checking of devfreq instance Stanley Chu
@ 2021-01-20 15:01 ` Stanley Chu
2021-01-21 3:29 ` [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Martin K. Petersen
2021-01-23 4:22 ` Martin K. Petersen
4 siblings, 0 replies; 6+ messages in thread
From: Stanley Chu @ 2021-01-20 15:01 UTC (permalink / raw)
To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb
Cc: Stanley Chu, alice.chao, bvanassche, andy.teng, cc.chou,
chun-hung.wu, kuohong.wang, linux-kernel, jiajie.hao, cang,
linux-mediatek, peter.wang, matthias.bgg, beanhuo, chaotian.jing,
linux-arm-kernel, asutoshd
Manipulate clock scaling related stuff only if the host capability
supports clock scaling feature to avoid redundant code execution.
Reviewed-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
---
drivers/scsi/ufs/ufshcd.c | 63 ++++++++++++++++++++-------------------
1 file changed, 32 insertions(+), 31 deletions(-)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index f707234580ea..edfac8752d33 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -1500,9 +1500,6 @@ static void ufshcd_suspend_clkscaling(struct ufs_hba *hba)
unsigned long flags;
bool suspend = false;
- if (!ufshcd_is_clkscaling_supported(hba))
- return;
-
cancel_work_sync(&hba->clk_scaling.suspend_work);
cancel_work_sync(&hba->clk_scaling.resume_work);
@@ -1522,9 +1519,6 @@ static void ufshcd_resume_clkscaling(struct ufs_hba *hba)
unsigned long flags;
bool resume = false;
- if (!ufshcd_is_clkscaling_supported(hba))
- return;
-
spin_lock_irqsave(hba->host->host_lock, flags);
if (hba->clk_scaling.is_suspended) {
resume = true;
@@ -5759,6 +5753,26 @@ static inline void ufshcd_schedule_eh_work(struct ufs_hba *hba)
}
}
+static void ufshcd_clk_scaling_allow(struct ufs_hba *hba, bool allow)
+{
+ down_write(&hba->clk_scaling_lock);
+ hba->clk_scaling.is_allowed = allow;
+ up_write(&hba->clk_scaling_lock);
+}
+
+static void ufshcd_clk_scaling_suspend(struct ufs_hba *hba, bool suspend)
+{
+ if (suspend) {
+ if (hba->clk_scaling.is_enabled)
+ ufshcd_suspend_clkscaling(hba);
+ ufshcd_clk_scaling_allow(hba, false);
+ } else {
+ ufshcd_clk_scaling_allow(hba, true);
+ if (hba->clk_scaling.is_enabled)
+ ufshcd_resume_clkscaling(hba);
+ }
+}
+
static void ufshcd_err_handling_prepare(struct ufs_hba *hba)
{
pm_runtime_get_sync(hba->dev);
@@ -5783,22 +5797,18 @@ static void ufshcd_err_handling_prepare(struct ufs_hba *hba)
ufshcd_vops_resume(hba, pm_op);
} else {
ufshcd_hold(hba, false);
- if (hba->clk_scaling.is_enabled)
+ if (ufshcd_is_clkscaling_supported(hba) &&
+ hba->clk_scaling.is_enabled)
ufshcd_suspend_clkscaling(hba);
- down_write(&hba->clk_scaling_lock);
- hba->clk_scaling.is_allowed = false;
- up_write(&hba->clk_scaling_lock);
+ ufshcd_clk_scaling_allow(hba, false);
}
}
static void ufshcd_err_handling_unprepare(struct ufs_hba *hba)
{
ufshcd_release(hba);
- down_write(&hba->clk_scaling_lock);
- hba->clk_scaling.is_allowed = true;
- up_write(&hba->clk_scaling_lock);
- if (hba->clk_scaling.is_enabled)
- ufshcd_resume_clkscaling(hba);
+ if (ufshcd_is_clkscaling_supported(hba))
+ ufshcd_clk_scaling_suspend(hba, false);
pm_runtime_put(hba->dev);
}
@@ -8703,12 +8713,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
ufshcd_hold(hba, false);
hba->clk_gating.is_suspended = true;
- if (hba->clk_scaling.is_enabled)
- ufshcd_suspend_clkscaling(hba);
-
- down_write(&hba->clk_scaling_lock);
- hba->clk_scaling.is_allowed = false;
- up_write(&hba->clk_scaling_lock);
+ if (ufshcd_is_clkscaling_supported(hba))
+ ufshcd_clk_scaling_suspend(hba, true);
if (req_dev_pwr_mode == UFS_ACTIVE_PWR_MODE &&
req_link_state == UIC_LINK_ACTIVE_STATE) {
@@ -8828,11 +8834,9 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
if (!ufshcd_set_dev_pwr_mode(hba, UFS_ACTIVE_PWR_MODE))
ufshcd_disable_auto_bkops(hba);
enable_gating:
- down_write(&hba->clk_scaling_lock);
- hba->clk_scaling.is_allowed = true;
- up_write(&hba->clk_scaling_lock);
- if (hba->clk_scaling.is_enabled)
- ufshcd_resume_clkscaling(hba);
+ if (ufshcd_is_clkscaling_supported(hba))
+ ufshcd_clk_scaling_suspend(hba, false);
+
hba->clk_gating.is_suspended = false;
hba->dev_info.b_rpm_dev_flush_capable = false;
ufshcd_release(hba);
@@ -8934,11 +8938,8 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
hba->clk_gating.is_suspended = false;
- down_write(&hba->clk_scaling_lock);
- hba->clk_scaling.is_allowed = true;
- up_write(&hba->clk_scaling_lock);
- if (hba->clk_scaling.is_enabled)
- ufshcd_resume_clkscaling(hba);
+ if (ufshcd_is_clkscaling_supported(hba))
+ ufshcd_clk_scaling_suspend(hba, false);
/* Enable Auto-Hibernate if configured */
ufshcd_auto_hibern8_enable(hba);
--
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling
2021-01-20 15:01 [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Stanley Chu
` (2 preceding siblings ...)
2021-01-20 15:01 ` [PATCH v3 3/3] scsi: ufs: Cleanup and refactor clk-scaling feature Stanley Chu
@ 2021-01-21 3:29 ` Martin K. Petersen
2021-01-23 4:22 ` Martin K. Petersen
4 siblings, 0 replies; 6+ messages in thread
From: Martin K. Petersen @ 2021-01-21 3:29 UTC (permalink / raw)
To: Stanley Chu
Cc: jiajie.hao, alice.chao, linux-scsi, martin.petersen, andy.teng,
jejb, chun-hung.wu, kuohong.wang, linux-kernel, cc.chou,
avri.altman, cang, linux-mediatek, peter.wang, alim.akhtar,
matthias.bgg, asutoshd, chaotian.jing, bvanassche,
linux-arm-kernel, beanhuo
Stanley,
> This series cleans up and refactors clk-scaling feature, and shall not
> change any functionality.
Applied to 5.12/scsi-staging, thanks!
--
Martin K. Petersen Oracle Linux Engineering
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling
2021-01-20 15:01 [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Stanley Chu
` (3 preceding siblings ...)
2021-01-21 3:29 ` [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Martin K. Petersen
@ 2021-01-23 4:22 ` Martin K. Petersen
4 siblings, 0 replies; 6+ messages in thread
From: Martin K. Petersen @ 2021-01-23 4:22 UTC (permalink / raw)
To: alim.akhtar, Stanley Chu, jejb, linux-scsi, avri.altman
Cc: bvanassche, Martin K . Petersen, cang, andy.teng, cc.chou,
chun-hung.wu, kuohong.wang, linux-kernel, jiajie.hao, alice.chao,
linux-mediatek, linux-arm-kernel, matthias.bgg, beanhuo,
peter.wang, chaotian.jing, asutoshd
On Wed, 20 Jan 2021 23:01:39 +0800, Stanley Chu wrote:
> This series cleans up and refactors clk-scaling feature, and shall not change any functionality.
>
> This series is based on Can's series "Three changes related with UFS clock scaling" in 5.12/scsi-queue branch in Martin's tree.
>
> Changes since v2:
> - Remove patch 4
> - Rebase to Can's series: [v11] Three changes related with UFS clock scaling
>
> [...]
Applied to 5.12/scsi-queue, thanks!
[1/3] scsi: ufs: Refactor cancelling clkscaling works
https://git.kernel.org/mkp/scsi/c/f9a7fa345aec
[2/3] scsi: ufs: Remove redundant null checking of devfreq instance
https://git.kernel.org/mkp/scsi/c/b058fa868234
[3/3] scsi: ufs: Cleanup and refactor clk-scaling feature
https://git.kernel.org/mkp/scsi/c/348e1bc5f4b7
--
Martin K. Petersen Oracle Linux Engineering
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-01-23 4:23 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-20 15:01 [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Stanley Chu
2021-01-20 15:01 ` [PATCH v3 1/3] scsi: ufs: Refactor cancelling clkscaling works Stanley Chu
2021-01-20 15:01 ` [PATCH v3 2/3] scsi: ufs: Remove redundant null checking of devfreq instance Stanley Chu
2021-01-20 15:01 ` [PATCH v3 3/3] scsi: ufs: Cleanup and refactor clk-scaling feature Stanley Chu
2021-01-21 3:29 ` [PATCH v3 0/3] scsi: ufs: Cleanup and refactor clock scaling Martin K. Petersen
2021-01-23 4:22 ` Martin K. Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).