lkml.org 
[lkml]   [2020]   [Jul]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v5 1/9] scsi: ufs: Add checks before setting clk-gating states
On 2020-07-23 10:34, Can Guo wrote:
> Clock gating features can be turned on/off selectively which means its
> state information is only important if it is enabled. This change makes
> sure that we only look at state of clk-gating if it is enabled.
>
> Signed-off-by: Can Guo <cang@codeaurora.org>
> Reviewed-by: Avri Altman <avri.altman@wdc.com>
> ---
> drivers/scsi/ufs/ufshcd.c | 17 ++++++++++++++---
> 1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index cdff7e5..99bd3e4 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -1839,6 +1839,8 @@ static void ufshcd_init_clk_gating(struct ufs_hba
> *hba)
> if (!ufshcd_is_clkgating_allowed(hba))
> return;
>
> + hba->clk_gating.state = CLKS_ON;
> +
> hba->clk_gating.delay_ms = 150;
> INIT_DELAYED_WORK(&hba->clk_gating.gate_work, ufshcd_gate_work);
> INIT_WORK(&hba->clk_gating.ungate_work, ufshcd_ungate_work);
> @@ -2541,7 +2543,8 @@ static int ufshcd_queuecommand(struct Scsi_Host
> *host, struct scsi_cmnd *cmd)
> err = SCSI_MLQUEUE_HOST_BUSY;
> goto out;
> }
> - WARN_ON(hba->clk_gating.state != CLKS_ON);
> + WARN_ON(ufshcd_is_clkgating_allowed(hba) &&
> + (hba->clk_gating.state != CLKS_ON));
>
> lrbp = &hba->lrb[tag];
>
> @@ -8315,8 +8318,11 @@ static int ufshcd_suspend(struct ufs_hba *hba,
> enum ufs_pm_op pm_op)
> /* If link is active, device ref_clk can't be switched off */
> __ufshcd_setup_clocks(hba, false, true);
>
> - hba->clk_gating.state = CLKS_OFF;
> - trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state);
> + if (ufshcd_is_clkgating_allowed(hba)) {
> + hba->clk_gating.state = CLKS_OFF;
> + trace_ufshcd_clk_gating(dev_name(hba->dev),
> + hba->clk_gating.state);
> + }
>
> /* Put the host controller in low power mode if possible */
> ufshcd_hba_vreg_set_lpm(hba);
> @@ -8456,6 +8462,11 @@ static int ufshcd_resume(struct ufs_hba *hba,
> enum ufs_pm_op pm_op)
> if (hba->clk_scaling.is_allowed)
> ufshcd_suspend_clkscaling(hba);
> ufshcd_setup_clocks(hba, false);
> + if (ufshcd_is_clkgating_allowed(hba)) {
> + hba->clk_gating.state = CLKS_OFF;
> + trace_ufshcd_clk_gating(dev_name(hba->dev),
> + hba->clk_gating.state);
> + }
> out:
> hba->pm_op_in_progress = 0;
> if (ret)


Reviewed-by: Hongwu Su <hongwus@codeaurora.org>

\
 
 \ /
  Last update: 2020-07-23 04:46    [W:0.264 / U:0.280 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site