[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <d36e8ab21277f5d478d34cb3f8be13f4@codeaurora.org>
Date: Thu, 23 Jul 2020 10:45:04 +0800
From: hongwus@...eaurora.org
To: Can Guo <cang@...eaurora.org>
Cc: asutoshd@...eaurora.org, nguyenb@...eaurora.org,
rnayak@...eaurora.org, sh425.lee@...sung.com,
linux-scsi@...r.kernel.org, kernel-team@...roid.com,
saravanak@...gle.com, salyzyn@...gle.com,
Alim Akhtar <alim.akhtar@...sung.com>,
Avri Altman <avri.altman@....com>,
"James E.J. Bottomley" <jejb@...ux.ibm.com>,
"Martin K. Petersen" <martin.petersen@...cle.com>,
Stanley Chu <stanley.chu@...iatek.com>,
Bean Huo <beanhuo@...ron.com>,
Bart Van Assche <bvanassche@....org>,
linux-kernel@...r.kernel.org
Subject: Re: [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@...eaurora.org>
> Reviewed-by: Avri Altman <avri.altman@....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@...eaurora.org>
Powered by blists - more mailing lists