All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Asutosh Das (asd)" <asutoshd@codeaurora.org>
To: Can Guo <cang@codeaurora.org>,
	nguyenb@codeaurora.org, hongwus@codeaurora.org,
	rnayak@codeaurora.org, linux-scsi@vger.kernel.org,
	kernel-team@android.com, saravanak@google.com,
	salyzyn@google.com
Cc: Alim Akhtar <alim.akhtar@samsung.com>,
	Avri Altman <avri.altman@wdc.com>,
	Pedro Sousa <pedrom.sousa@synopsys.com>,
	"James E.J. Bottomley" <jejb@linux.ibm.com>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Stanley Chu <stanley.chu@mediatek.com>,
	Venkat Gopalakrishnan <venkatg@codeaurora.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v4 6/8] scsi: ufs: Add dev ref clock gating wait time support
Date: Fri, 24 Jan 2020 10:06:52 -0800	[thread overview]
Message-ID: <328f4768-e986-8566-4929-17420f9dbbce@codeaurora.org> (raw)
In-Reply-To: <1579764349-15578-7-git-send-email-cang@codeaurora.org>

On 1/22/2020 11:25 PM, Can Guo wrote:
> In UFS version 3.0, a newly added attribute bRefClkGatingWaitTime defines
> the minimum time for which the reference clock is required by device during
> transition to LS-MODE or HIBERN8 state. Make this change to reflect the new
> requirement by adding delays before turning off the clock.
> 
> Signed-off-by: Can Guo <cang@codeaurora.org>
> ---

Reviewed-by: Asutosh Das <asutoshd@codeaurora.org>

>   drivers/scsi/ufs/ufs.h    |  3 +++
>   drivers/scsi/ufs/ufshcd.c | 41 +++++++++++++++++++++++++++++++++++++++++
>   2 files changed, 44 insertions(+)
> 
> diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h
> index 3327981..385bac8 100644
> --- a/drivers/scsi/ufs/ufs.h
> +++ b/drivers/scsi/ufs/ufs.h
> @@ -168,6 +168,7 @@ enum attr_idn {
>   	QUERY_ATTR_IDN_FFU_STATUS		= 0x14,
>   	QUERY_ATTR_IDN_PSA_STATE		= 0x15,
>   	QUERY_ATTR_IDN_PSA_DATA_SIZE		= 0x16,
> +	QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME	= 0x17,
>   };
>   
>   /* Descriptor idn for Query requests */
> @@ -530,6 +531,8 @@ struct ufs_dev_info {
>   	bool f_power_on_wp_en;
>   	/* Keeps information if any of the LU is power on write protected */
>   	bool is_lu_power_on_wp;
> +	u16 spec_version;
> +	u32 clk_gating_wait_us;
>   };
>   
>   #define MAX_MODEL_LEN 16
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index c316a07..1ee2187 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -91,6 +91,9 @@
>   /* default delay of autosuspend: 2000 ms */
>   #define RPM_AUTOSUSPEND_DELAY_MS 2000
>   
> +/* Default value of wait time before gating device ref clock */
> +#define UFSHCD_REF_CLK_GATING_WAIT_US 0xFF /* microsecs */
> +
>   #define ufshcd_toggle_vreg(_dev, _vreg, _on)				\
>   	({                                                              \
>   		int _ret;                                               \
> @@ -3357,6 +3360,37 @@ static inline int ufshcd_read_unit_desc_param(struct ufs_hba *hba,
>   				      param_offset, param_read_buf, param_size);
>   }
>   
> +static int ufshcd_get_ref_clk_gating_wait(struct ufs_hba *hba)
> +{
> +	int err = 0;
> +	u32 gating_wait = UFSHCD_REF_CLK_GATING_WAIT_US;
> +
> +	if (hba->dev_info.spec_version >= 0x300) {
> +		err = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
> +				QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME, 0, 0,
> +				&gating_wait);
> +		if (err)
> +			dev_err(hba->dev, "Failed reading bRefClkGatingWait. err = %d, use default %uus\n",
> +					 err, gating_wait);
> +
> +		if (gating_wait == 0) {
> +			gating_wait = UFSHCD_REF_CLK_GATING_WAIT_US;
> +			dev_err(hba->dev, "Undefined ref clk gating wait time, use default %uus\n",
> +					 gating_wait);
> +		}
> +
> +		/*
> +		 * bRefClkGatingWaitTime defines the minimum time for which the
> +		 * reference clock is required by device during transition from
> +		 * HS-MODE to LS-MODE or HIBERN8 state. Give it more time to be
> +		 * on the safe side.
> +		 */
> +		hba->dev_info.clk_gating_wait_us = gating_wait + 50;
> +	}
> +
> +	return err;
> +}
> +
>   /**
>    * ufshcd_memory_alloc - allocate memory for host memory space data structures
>    * @hba: per adapter instance
> @@ -6628,6 +6662,10 @@ static int ufs_get_device_desc(struct ufs_hba *hba,
>   	dev_desc->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8 |
>   				     desc_buf[DEVICE_DESC_PARAM_MANF_ID + 1];
>   
> +	/* getting Specification Version in big endian format */
> +	hba->dev_info.spec_version = desc_buf[DEVICE_DESC_PARAM_SPEC_VER] << 8 |
> +				      desc_buf[DEVICE_DESC_PARAM_SPEC_VER + 1];
> +
>   	model_index = desc_buf[DEVICE_DESC_PARAM_PRDCT_NAME];
>   	err = ufshcd_read_string_desc(hba, model_index,
>   				      &dev_desc->model, SD_ASCII_STD);
> @@ -7046,6 +7084,9 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
>   
>   		/* clear any previous UFS device information */
>   		memset(&hba->dev_info, 0, sizeof(hba->dev_info));
> +
> +		ufshcd_get_ref_clk_gating_wait(hba);
> +
>   		if (!ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_READ_FLAG,
>   				QUERY_FLAG_IDN_PWR_ON_WPE, &flag))
>   			hba->dev_info.f_power_on_wp_en = flag;
> 


-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
Linux Foundation Collaborative Project

  parent reply	other threads:[~2020-01-24 18:07 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-23  7:25 [PATCH v4 0/8] UFS driver general fixes bundle 4 Can Guo
2020-01-23  7:25 ` [PATCH v4 1/8] scsi: ufs: Flush exception event before suspend Can Guo
2020-01-23 23:09   ` [EXT] " Bean Huo (beanhuo)
2020-01-26  3:29   ` Bart Van Assche
2020-02-03  6:23     ` Can Guo
2020-02-04  3:12       ` Bart Van Assche
2020-02-04  6:28         ` Can Guo
2020-01-23  7:25 ` [PATCH v4 2/8] scsi: ufs: set load before setting voltage in regulators Can Guo
2020-01-23  7:50   ` hongwus
2020-01-23  7:25 ` [PATCH v4 3/8] scsi: ufs: Remove the check before call setup clock notify vops Can Guo
2020-01-23  7:25 ` [PATCH v4 4/8] scsi: ufs-qcom: Adjust bus bandwidth voting and unvoting Can Guo
2020-01-23  7:25 ` [PATCH v4 5/8] scsi: ufs: Fix ufshcd_hold() caused scheduling while atomic Can Guo
2020-01-24 18:07   ` Asutosh Das (asd)
2020-01-23  7:25 ` [PATCH v4 6/8] scsi: ufs: Add dev ref clock gating wait time support Can Guo
2020-01-23 23:11   ` [EXT] " Bean Huo (beanhuo)
2020-02-03  7:17     ` Can Guo
2020-01-24 18:06   ` Asutosh Das (asd) [this message]
2020-01-26  3:34   ` Bart Van Assche
2020-02-03  7:16     ` Can Guo
2020-02-03 22:30       ` Bart Van Assche
2020-01-23  7:25 ` [PATCH v4 7/8] scsi: ufs-qcom: Delay specific time before gate ref clk Can Guo
2020-01-24 18:04   ` Asutosh Das (asd)
2020-01-23  7:25 ` [PATCH v4 8/8] scsi: ufs: Select INITIAL adapt for HS Gear4 Can Guo
2020-01-24 18:03   ` Asutosh Das (asd)
2020-01-26  3:38   ` Bart Van Assche

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=328f4768-e986-8566-4929-17420f9dbbce@codeaurora.org \
    --to=asutoshd@codeaurora.org \
    --cc=alim.akhtar@samsung.com \
    --cc=avri.altman@wdc.com \
    --cc=cang@codeaurora.org \
    --cc=hongwus@codeaurora.org \
    --cc=jejb@linux.ibm.com \
    --cc=kernel-team@android.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=nguyenb@codeaurora.org \
    --cc=pedrom.sousa@synopsys.com \
    --cc=rnayak@codeaurora.org \
    --cc=salyzyn@google.com \
    --cc=saravanak@google.com \
    --cc=stanley.chu@mediatek.com \
    --cc=tomas.winkler@intel.com \
    --cc=venkatg@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.