linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level
@ 2021-01-28 16:54 Nitin Rawat
  2021-01-28 16:54 ` [PATCH V1 1/3] scsi: ufs: export api for use in vendor file Nitin Rawat
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Nitin Rawat @ 2021-01-28 16:54 UTC (permalink / raw)
  To: asutoshd, cang, stummala, vbadigan, alim.akhtar, avri.altman,
	jejb, martin.petersen, stanley.chu, beanhuo
  Cc: bvanassche, linux-scsi, linux-kernel, Nitin Rawat

UFS specification allows different VCC configurations for UFS devices,
for example,
        (1)2.70V - 3.60V (For UFS 2.x devices)
        (2)2.40V - 2.70V (For UFS 3.x devices)
For platforms supporting both ufs 2.x (2.7v-3.6v) and
ufs 3.x (2.4v-2.7v), the voltage requirements (VCC) is 2.4v-3.6v.
So to support this, we need to start the ufs device initialization with
the common VCC voltage(2.7v) and after reading the device descriptor we
need to switch to the correct range(vcc min and vcc max) of VCC voltage
as per UFS device type since 2.7v is the marginal voltage as per specs
for both type of devices.

Once VCC regulator supply has been intialised to 2.7v and UFS device
type is read from device descriptor, we follows below steps to
change the VCC voltage values.

1. Set the device to SLEEP state.
2. Disable the Vcc Regulator.
3. Set the vcc voltage according to the device type and reenable
   the regulator.
4. Set the device mode back to ACTIVE.

The above changes are done in vendor specific file by
adding a vops which will be needed for platform
supporting both ufs 2.x and ufs 3.x devices.

Nitin Rawat (3):
  scsi: ufs: export api for use in vendor file
  scsi: ufs: add a vops to configure VCC voltage level
  scsi: ufs-qcom: configure VCC voltage level in vendor file

 drivers/scsi/ufs/ufs-qcom.c | 51 +++++++++++++++++++++++++++++++++++++++++++++
 drivers/scsi/ufs/ufshcd.c   | 14 ++++++++++---
 drivers/scsi/ufs/ufshcd.h   | 14 +++++++++++++
 3 files changed, 76 insertions(+), 3 deletions(-)

--
2.7.4


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

* [PATCH V1 1/3] scsi: ufs: export api for use in vendor file
  2021-01-28 16:54 [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level Nitin Rawat
@ 2021-01-28 16:54 ` Nitin Rawat
       [not found]   ` <DM6PR04MB657574D3D8B99F3A4997D810FCB79@DM6PR04MB6575.namprd04.prod.outlook.com>
  2021-01-28 16:54 ` [PATCH V1 2/3] scsi: ufs: add a vops to configure VCC voltage level Nitin Rawat
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Nitin Rawat @ 2021-01-28 16:54 UTC (permalink / raw)
  To: asutoshd, cang, stummala, vbadigan, alim.akhtar, avri.altman,
	jejb, martin.petersen, stanley.chu, beanhuo
  Cc: bvanassche, linux-scsi, linux-kernel, Nitin Rawat, Bao D . Nguyen

Exporting functions ufshcd_set_dev_pwr_mode, ufshcd_disable_vreg
and ufshcd_enable_vreg so that vendor drivers can make use of
them in setting vendor specific regulator setting
in vendor specific file.

Signed-off-by: Nitin Rawat <nitirawa@codeaurora.org>
Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org>
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
---
 drivers/scsi/ufs/ufshcd.c | 9 ++++++---
 drivers/scsi/ufs/ufshcd.h | 4 ++++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 9c691e4..000a03a 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -8091,7 +8091,7 @@ static int ufshcd_config_vreg(struct device *dev,
 	return ret;
 }

-static int ufshcd_enable_vreg(struct device *dev, struct ufs_vreg *vreg)
+int ufshcd_enable_vreg(struct device *dev, struct ufs_vreg *vreg)
 {
 	int ret = 0;

@@ -8110,8 +8110,9 @@ static int ufshcd_enable_vreg(struct device *dev, struct ufs_vreg *vreg)
 out:
 	return ret;
 }
+EXPORT_SYMBOL(ufshcd_enable_vreg);

-static int ufshcd_disable_vreg(struct device *dev, struct ufs_vreg *vreg)
+int ufshcd_disable_vreg(struct device *dev, struct ufs_vreg *vreg)
 {
 	int ret = 0;

@@ -8131,6 +8132,7 @@ static int ufshcd_disable_vreg(struct device *dev, struct ufs_vreg *vreg)
 out:
 	return ret;
 }
+EXPORT_SYMBOL(ufshcd_disable_vreg);

 static int ufshcd_setup_vreg(struct ufs_hba *hba, bool on)
 {
@@ -8455,7 +8457,7 @@ ufshcd_send_request_sense(struct ufs_hba *hba, struct scsi_device *sdp)
  * Returns 0 if requested power mode is set successfully
  * Returns non-zero if failed to set the requested power mode
  */
-static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
+int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
 				     enum ufs_dev_pwr_mode pwr_mode)
 {
 	unsigned char cmd[6] = { START_STOP };
@@ -8513,6 +8515,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
 	hba->host->eh_noresume = 0;
 	return ret;
 }
+EXPORT_SYMBOL(ufshcd_set_dev_pwr_mode);

 static int ufshcd_link_state_transition(struct ufs_hba *hba,
 					enum uic_link_state req_link_state,
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index ee61f82..1410c95 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -997,6 +997,10 @@ extern int ufshcd_dme_get_attr(struct ufs_hba *hba, u32 attr_sel,
 			       u32 *mib_val, u8 peer);
 extern int ufshcd_config_pwr_mode(struct ufs_hba *hba,
 			struct ufs_pa_layer_attr *desired_pwr_mode);
+extern int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
+						enum ufs_dev_pwr_mode pwr_mode);
+extern int ufshcd_enable_vreg(struct device *dev, struct ufs_vreg *vreg);
+extern int ufshcd_disable_vreg(struct device *dev, struct ufs_vreg *vreg);

 /* UIC command interfaces for DME primitives */
 #define DME_LOCAL	0
--
2.7.4


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

* [PATCH V1 2/3] scsi: ufs: add a vops to configure VCC voltage level
  2021-01-28 16:54 [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level Nitin Rawat
  2021-01-28 16:54 ` [PATCH V1 1/3] scsi: ufs: export api for use in vendor file Nitin Rawat
@ 2021-01-28 16:54 ` Nitin Rawat
  2021-01-28 16:54 ` [PATCH V1 3/3] scsi: ufs-qcom: configure VCC voltage level in vendor file Nitin Rawat
       [not found] ` <DM6PR04MB6575D0348161330D21A9B6C5FCB79@DM6PR04MB6575.namprd04.prod.outlook.com>
  3 siblings, 0 replies; 9+ messages in thread
From: Nitin Rawat @ 2021-01-28 16:54 UTC (permalink / raw)
  To: asutoshd, cang, stummala, vbadigan, alim.akhtar, avri.altman,
	jejb, martin.petersen, stanley.chu, beanhuo
  Cc: bvanassche, linux-scsi, linux-kernel, Nitin Rawat, Bao D . Nguyen

Add a vops to configure VCC voltage VCC voltage level
for platform supporting both ufs2.x and ufs 3.x devices.

Signed-off-by: Nitin Rawat <nitirawa@codeaurora.org>
Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org>
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
---
 drivers/scsi/ufs/ufshcd.c |  5 +++++
 drivers/scsi/ufs/ufshcd.h | 10 ++++++++++
 2 files changed, 15 insertions(+)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 000a03a..3b2e026 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -7772,6 +7772,11 @@ static int ufshcd_add_lus(struct ufs_hba *hba)
 	if (ret)
 		goto out;

+	if (ufshcd_vops_setup_vcc_regulators(hba))
+		dev_err(hba->dev,
+			"%s: Failed to set the VCC regulator values, continue with 2.7v\n",
+			__func__);
+
 	/* Initialize devfreq after UFS device is detected */
 	if (ufshcd_is_clkscaling_supported(hba)) {
 		memcpy(&hba->clk_scaling.saved_pwr_info.info,
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 1410c95..250cff5 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -324,6 +324,7 @@ struct ufs_pwr_mode_info {
  * @device_reset: called to issue a reset pulse on the UFS device
  * @program_key: program or evict an inline encryption key
  * @event_notify: called to notify important events
+ * @setup_vcc_regulators : update vcc regulator level
  */
 struct ufs_hba_variant_ops {
 	const char *name;
@@ -360,6 +361,7 @@ struct ufs_hba_variant_ops {
 			       const union ufs_crypto_cfg_entry *cfg, int slot);
 	void	(*event_notify)(struct ufs_hba *hba,
 				enum ufs_event_type evt, void *data);
+	int    (*setup_vcc_regulators)(struct ufs_hba *hba);
 };

 /* clock gating state  */
@@ -1269,6 +1271,14 @@ static inline void ufshcd_vops_config_scaling_param(struct ufs_hba *hba,
 		hba->vops->config_scaling_param(hba, profile, data);
 }

+static inline int ufshcd_vops_setup_vcc_regulators(struct ufs_hba *hba)
+{
+	if (hba->vops && hba->vops->setup_vcc_regulators)
+		return hba->vops->setup_vcc_regulators(hba);
+
+	return 0;
+}
+
 extern struct ufs_pm_lvl_states ufs_pm_lvl_states[];

 /*
--
2.7.4


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

* [PATCH V1 3/3] scsi: ufs-qcom: configure VCC voltage level in vendor file
  2021-01-28 16:54 [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level Nitin Rawat
  2021-01-28 16:54 ` [PATCH V1 1/3] scsi: ufs: export api for use in vendor file Nitin Rawat
  2021-01-28 16:54 ` [PATCH V1 2/3] scsi: ufs: add a vops to configure VCC voltage level Nitin Rawat
@ 2021-01-28 16:54 ` Nitin Rawat
       [not found] ` <DM6PR04MB6575D0348161330D21A9B6C5FCB79@DM6PR04MB6575.namprd04.prod.outlook.com>
  3 siblings, 0 replies; 9+ messages in thread
From: Nitin Rawat @ 2021-01-28 16:54 UTC (permalink / raw)
  To: asutoshd, cang, stummala, vbadigan, alim.akhtar, avri.altman,
	jejb, martin.petersen, stanley.chu, beanhuo
  Cc: bvanassche, linux-scsi, linux-kernel, Nitin Rawat, Bao D . Nguyen

As a part of vops handler, VCC voltage is updated
as per the ufs device probed after reading the device
descriptor. We follow below steps to configure voltage
level.

1. Set the device to SLEEP state.
2. Disable the Vcc Regulator.
3. Set the vcc voltage according to the device type and reenable
   the regulator.
4. Set the device mode back to ACTIVE.

Signed-off-by: Nitin Rawat <nitirawa@codeaurora.org>
Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org>
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
---
 drivers/scsi/ufs/ufs-qcom.c | 51 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index f97d7b0..ca35f5c 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -21,6 +21,17 @@
 #define UFS_QCOM_DEFAULT_DBG_PRINT_EN	\
 	(UFS_QCOM_DBG_PRINT_REGS_EN | UFS_QCOM_DBG_PRINT_TEST_BUS_EN)

+#define	ANDROID_BOOT_DEV_MAX	30
+static char android_boot_dev[ANDROID_BOOT_DEV_MAX];
+
+/* Min and Max VCC voltage values for ufs 2.x and
+ * ufs 3.x devices
+ */
+#define UFS_3X_VREG_VCC_MIN_UV	2540000 /* uV */
+#define UFS_3X_VREG_VCC_MAX_UV	2700000 /* uV */
+#define UFS_2X_VREG_VCC_MIN_UV	2950000 /* uV */
+#define UFS_2X_VREG_VCC_MAX_UV	2960000 /* uV */
+
 enum {
 	TSTBUS_UAWM,
 	TSTBUS_UARM,
@@ -1293,6 +1304,45 @@ static void ufs_qcom_print_hw_debug_reg_all(struct ufs_hba *hba,
 	print_fn(hba, reg, 9, "UFS_DBG_RD_REG_TMRLUT ", priv);
 }

+  /**
+   * ufs_qcom_setup_vcc_regulators - Update VCC voltage
+   * @hba: host controller instance
+   * Update VCC voltage based on UFS device(ufs 2.x or
+   * ufs 3.x probed)
+   */
+static int ufs_qcom_setup_vcc_regulators(struct ufs_hba *hba)
+{
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+	struct ufs_vreg *vreg = hba->vreg_info.vcc;
+	int ret;
+
+	/* Put the device in sleep before lowering VCC level */
+	ret = ufshcd_set_dev_pwr_mode(hba, UFS_SLEEP_PWR_MODE);
+
+	/* Switch off VCC before switching it ON at 2.5v or 2.96v */
+	ret = ufshcd_disable_vreg(hba->dev, vreg);
+
+	/* add ~2ms delay before renabling VCC at lower voltage */
+	usleep_range(2000, 2100);
+
+	/* set VCC min and max voltage according to ufs device type */
+	if (dev_info->wspecversion >= 0x300) {
+		vreg->min_uV = UFS_3X_VREG_VCC_MIN_UV;
+		vreg->max_uV = UFS_3X_VREG_VCC_MAX_UV;
+	}
+
+	else {
+		vreg->min_uV = UFS_2X_VREG_VCC_MIN_UV;
+		vreg->max_uV = UFS_2X_VREG_VCC_MAX_UV;
+	}
+
+	ret = ufshcd_enable_vreg(hba->dev, vreg);
+
+	/* Bring the device in active now */
+	ret = ufshcd_set_dev_pwr_mode(hba, UFS_ACTIVE_PWR_MODE);
+	return ret;
+}
+
 static void ufs_qcom_enable_test_bus(struct ufs_qcom_host *host)
 {
 	if (host->dbg_print_en & UFS_QCOM_DBG_PRINT_TEST_BUS_EN) {
@@ -1490,6 +1540,7 @@ static const struct ufs_hba_variant_ops ufs_hba_qcom_vops = {
 	.device_reset		= ufs_qcom_device_reset,
 	.config_scaling_param = ufs_qcom_config_scaling_param,
 	.program_key		= ufs_qcom_ice_program_key,
+	.setup_vcc_regulators	= ufs_qcom_setup_vcc_regulators,
 };

 /**
--
2.7.4


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

* Re: [PATCH V1 1/3] scsi: ufs: export api for use in vendor file
       [not found]   ` <DM6PR04MB657574D3D8B99F3A4997D810FCB79@DM6PR04MB6575.namprd04.prod.outlook.com>
@ 2021-02-01  8:10     ` nitirawa
  0 siblings, 0 replies; 9+ messages in thread
From: nitirawa @ 2021-02-01  8:10 UTC (permalink / raw)
  To: Avri Altman
  Cc: asutoshd, cang, stummala, vbadigan, alim.akhtar, jejb,
	martin.petersen, stanley.chu, beanhuo, bvanassche, linux-scsi,
	linux-kernel, Bao D . Nguyen

On 2021-01-31 19:29, Avri Altman wrote:
>> 
>> Exporting functions ufshcd_set_dev_pwr_mode, ufshcd_disable_vreg
>> and ufshcd_enable_vreg so that vendor drivers can make use of
>> them in setting vendor specific regulator setting
>> in vendor specific file.
> As for ufshcd_{enable,disable}_vreg - maybe inline ufshcd_toggle_vreg
> and use it instead?
> 
>> 
>> Signed-off-by: Nitin Rawat <nitirawa@codeaurora.org>
>> Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org>
>> Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
>> ---
>>  drivers/scsi/ufs/ufshcd.c | 9 ++++++---
>>  drivers/scsi/ufs/ufshcd.h | 4 ++++
>>  2 files changed, 10 insertions(+), 3 deletions(-)
>> 
>> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
>> index 9c691e4..000a03a 100644
>> --- a/drivers/scsi/ufs/ufshcd.c
>> +++ b/drivers/scsi/ufs/ufshcd.c
>> @@ -8091,7 +8091,7 @@ static int ufshcd_config_vreg(struct device 
>> *dev,
>>         return ret;
>>  }
>> 
>> -static int ufshcd_enable_vreg(struct device *dev, struct ufs_vreg 
>> *vreg)
>> +int ufshcd_enable_vreg(struct device *dev, struct ufs_vreg *vreg)
>>  {
>>         int ret = 0;
>> 
>> @@ -8110,8 +8110,9 @@ static int ufshcd_enable_vreg(struct device 
>> *dev,
>> struct ufs_vreg *vreg)
>>  out:
>>         return ret;
>>  }
>> +EXPORT_SYMBOL(ufshcd_enable_vreg);
> Why do you need to export it across the kernel?
> Isn't making it non-static suffices?
> Do you need it for a loadable module?
> 
>> 
>> -static int ufshcd_disable_vreg(struct device *dev, struct ufs_vreg 
>> *vreg)
>> +int ufshcd_disable_vreg(struct device *dev, struct ufs_vreg *vreg)
>>  {
>>         int ret = 0;
>> 
>> @@ -8131,6 +8132,7 @@ static int ufshcd_disable_vreg(struct device 
>> *dev,
>> struct ufs_vreg *vreg)
>>  out:
>>         return ret;
>>  }
>> +EXPORT_SYMBOL(ufshcd_disable_vreg);
>> 
>>  static int ufshcd_setup_vreg(struct ufs_hba *hba, bool on)
>>  {
>> @@ -8455,7 +8457,7 @@ ufshcd_send_request_sense(struct ufs_hba *hba,
>> struct scsi_device *sdp)
>>   * Returns 0 if requested power mode is set successfully
>>   * Returns non-zero if failed to set the requested power mode
>>   */
>> -static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
>> +int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
>>                                      enum ufs_dev_pwr_mode pwr_mode)
>>  {
>>         unsigned char cmd[6] = { START_STOP };
>> @@ -8513,6 +8515,7 @@ static int ufshcd_set_dev_pwr_mode(struct 
>> ufs_hba
>> *hba,
>>         hba->host->eh_noresume = 0;
>>         return ret;
>>  }
>> +EXPORT_SYMBOL(ufshcd_set_dev_pwr_mode);
>> 
>>  static int ufshcd_link_state_transition(struct ufs_hba *hba,
>>                                         enum uic_link_state 
>> req_link_state,
>> diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
>> index ee61f82..1410c95 100644
>> --- a/drivers/scsi/ufs/ufshcd.h
>> +++ b/drivers/scsi/ufs/ufshcd.h
>> @@ -997,6 +997,10 @@ extern int ufshcd_dme_get_attr(struct ufs_hba 
>> *hba,
>> u32 attr_sel,
>>                                u32 *mib_val, u8 peer);
>>  extern int ufshcd_config_pwr_mode(struct ufs_hba *hba,
>>                         struct ufs_pa_layer_attr *desired_pwr_mode);
>> +extern int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
>> +                                               enum ufs_dev_pwr_mode 
>> pwr_mode);
>> +extern int ufshcd_enable_vreg(struct device *dev, struct ufs_vreg 
>> *vreg);
>> +extern int ufshcd_disable_vreg(struct device *dev, struct ufs_vreg 
>> *vreg);
>> 
>>  /* UIC command interfaces for DME primitives */
>>  #define DME_LOCAL      0
>> --
>> 2.7.4

Hi Avri,
Thanks for reviewing it.
ufs-qcom.c can be a loadable module, so just inlining won't suffice in 
that case.
Hence export is needed.

Thanks,
Nitin

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

* Re: [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level
       [not found] ` <DM6PR04MB6575D0348161330D21A9B6C5FCB79@DM6PR04MB6575.namprd04.prod.outlook.com>
@ 2021-02-01  8:31   ` nitirawa
  2021-02-08 10:30     ` nitirawa
  0 siblings, 1 reply; 9+ messages in thread
From: nitirawa @ 2021-02-01  8:31 UTC (permalink / raw)
  To: Avri Altman
  Cc: asutoshd, cang, stummala, vbadigan, alim.akhtar, jejb,
	martin.petersen, stanley.chu, beanhuo, bvanassche, linux-scsi,
	linux-kernel, nitirawa

On 2021-01-31 19:32, Avri Altman wrote:
>> 
>> UFS specification allows different VCC configurations for UFS devices,
>> for example,
>>         (1)2.70V - 3.60V (For UFS 2.x devices)
>>         (2)2.40V - 2.70V (For UFS 3.x devices)
>> For platforms supporting both ufs 2.x (2.7v-3.6v) and
>> ufs 3.x (2.4v-2.7v), the voltage requirements (VCC) is 2.4v-3.6v.
>> So to support this, we need to start the ufs device initialization 
>> with
>> the common VCC voltage(2.7v) and after reading the device descriptor 
>> we
>> need to switch to the correct range(vcc min and vcc max) of VCC 
>> voltage
>> as per UFS device type since 2.7v is the marginal voltage as per specs
>> for both type of devices.
>> 
>> Once VCC regulator supply has been intialised to 2.7v and UFS device
>> type is read from device descriptor, we follows below steps to
>> change the VCC voltage values.
>> 
>> 1. Set the device to SLEEP state.
>> 2. Disable the Vcc Regulator.
>> 3. Set the vcc voltage according to the device type and reenable
>>    the regulator.
>> 4. Set the device mode back to ACTIVE.
>> 
>> The above changes are done in vendor specific file by
>> adding a vops which will be needed for platform
>> supporting both ufs 2.x and ufs 3.x devices.
> The flow should be generic - isn't it?
> Why do you need the entire flow to be vendor-specific?
> Why not just the parameters vendor-specific?
> 
> Thanks,
> Avri

Hi Avri,
This vops change was done as per the below mail thread
discussion where it was decided to go with vops and
let vendors handle it, until specs provides more clarity.

https://www.spinics.net/lists/kernel/msg3754995.html

Regards,
Nitin




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

* Re: [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level
  2021-02-01  8:31   ` [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level nitirawa
@ 2021-02-08 10:30     ` nitirawa
  2021-02-08 12:22       ` Avri Altman
  0 siblings, 1 reply; 9+ messages in thread
From: nitirawa @ 2021-02-08 10:30 UTC (permalink / raw)
  To: Avri Altman
  Cc: asutoshd, cang, stummala, vbadigan, alim.akhtar, jejb,
	martin.petersen, stanley.chu, beanhuo, bvanassche, linux-scsi,
	linux-kernel

On 2021-02-01 14:01, nitirawa@codeaurora.org wrote:
> On 2021-01-31 19:32, Avri Altman wrote:
>>> 
>>> UFS specification allows different VCC configurations for UFS 
>>> devices,
>>> for example,
>>>         (1)2.70V - 3.60V (For UFS 2.x devices)
>>>         (2)2.40V - 2.70V (For UFS 3.x devices)
>>> For platforms supporting both ufs 2.x (2.7v-3.6v) and
>>> ufs 3.x (2.4v-2.7v), the voltage requirements (VCC) is 2.4v-3.6v.
>>> So to support this, we need to start the ufs device initialization 
>>> with
>>> the common VCC voltage(2.7v) and after reading the device descriptor 
>>> we
>>> need to switch to the correct range(vcc min and vcc max) of VCC 
>>> voltage
>>> as per UFS device type since 2.7v is the marginal voltage as per 
>>> specs
>>> for both type of devices.
>>> 
>>> Once VCC regulator supply has been intialised to 2.7v and UFS device
>>> type is read from device descriptor, we follows below steps to
>>> change the VCC voltage values.
>>> 
>>> 1. Set the device to SLEEP state.
>>> 2. Disable the Vcc Regulator.
>>> 3. Set the vcc voltage according to the device type and reenable
>>>    the regulator.
>>> 4. Set the device mode back to ACTIVE.
>>> 
>>> The above changes are done in vendor specific file by
>>> adding a vops which will be needed for platform
>>> supporting both ufs 2.x and ufs 3.x devices.
>> The flow should be generic - isn't it?
>> Why do you need the entire flow to be vendor-specific?
>> Why not just the parameters vendor-specific?
>> 
>> Thanks,
>> Avri
> 
> Hi Avri,
> This vops change was done as per the below mail thread
> discussion where it was decided to go with vops and
> let vendors handle it, until specs provides more clarity.
> 
> https://www.spinics.net/lists/kernel/msg3754995.html
> 
> Regards,
> Nitin

Hi Avri,
Please let me know if you have any further comments on this.

Regards,
Nitin

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

* RE: [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level
  2021-02-08 10:30     ` nitirawa
@ 2021-02-08 12:22       ` Avri Altman
  2021-02-19 13:29         ` nitirawa
  0 siblings, 1 reply; 9+ messages in thread
From: Avri Altman @ 2021-02-08 12:22 UTC (permalink / raw)
  To: nitirawa
  Cc: asutoshd, cang, stummala, vbadigan, alim.akhtar, jejb,
	martin.petersen, stanley.chu, beanhuo, bvanassche, linux-scsi,
	linux-kernel

> >> The flow should be generic - isn't it?
> >> Why do you need the entire flow to be vendor-specific?
> >> Why not just the parameters vendor-specific?
> >>
> >> Thanks,
> >> Avri
> >
> > Hi Avri,
> > This vops change was done as per the below mail thread
> > discussion where it was decided to go with vops and
> > let vendors handle it, until specs provides more clarity.
> >
> > https://www.spinics.net/lists/kernel/msg3754995.html
> >
> > Regards,
> > Nitin
> 
> Hi Avri,
> Please let me know if you have any further comments on this.
No further comments.
Looks like you need an ack from Stanley or Bjorn who proposed this approach.

Thanks,
Avri

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

* Re: [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level
  2021-02-08 12:22       ` Avri Altman
@ 2021-02-19 13:29         ` nitirawa
  0 siblings, 0 replies; 9+ messages in thread
From: nitirawa @ 2021-02-19 13:29 UTC (permalink / raw)
  To: Bjorn Andersson, stanley.chu
  Cc: asutoshd, cang, stummala, vbadigan, alim.akhtar, jejb,
	martin.petersen, stanley.chu, beanhuo, bvanassche, linux-scsi,
	linux-kernel, Avri Altman

On 2021-02-08 17:52, Avri Altman wrote:
>> >> The flow should be generic - isn't it?
>> >> Why do you need the entire flow to be vendor-specific?
>> >> Why not just the parameters vendor-specific?
>> >>
>> >> Thanks,
>> >> Avri
>> >
>> > Hi Avri,
>> > This vops change was done as per the below mail thread
>> > discussion where it was decided to go with vops and
>> > let vendors handle it, until specs provides more clarity.
>> >
>> > https://www.spinics.net/lists/kernel/msg3754995.html
>> >
>> > Regards,
>> > Nitin
>> 
>> Hi Avri,
>> Please let me know if you have any further comments on this.
> No further comments.
> Looks like you need an ack from Stanley or Bjorn who proposed this 
> approach.
> 
> Thanks,
> Avri

Hi Stanley/Bjorn,

Please can you review this patch and provide your input.

Regards,
Nitin

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

end of thread, other threads:[~2021-02-19 13:30 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-28 16:54 [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level Nitin Rawat
2021-01-28 16:54 ` [PATCH V1 1/3] scsi: ufs: export api for use in vendor file Nitin Rawat
     [not found]   ` <DM6PR04MB657574D3D8B99F3A4997D810FCB79@DM6PR04MB6575.namprd04.prod.outlook.com>
2021-02-01  8:10     ` nitirawa
2021-01-28 16:54 ` [PATCH V1 2/3] scsi: ufs: add a vops to configure VCC voltage level Nitin Rawat
2021-01-28 16:54 ` [PATCH V1 3/3] scsi: ufs-qcom: configure VCC voltage level in vendor file Nitin Rawat
     [not found] ` <DM6PR04MB6575D0348161330D21A9B6C5FCB79@DM6PR04MB6575.namprd04.prod.outlook.com>
2021-02-01  8:31   ` [PATCH V1 0/3] scsi: ufs: Add a vops to configure VCC voltage level nitirawa
2021-02-08 10:30     ` nitirawa
2021-02-08 12:22       ` Avri Altman
2021-02-19 13:29         ` nitirawa

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).