RE: [PATCH 1/2] scsi: ufs: Add DeepSleep feature

2020-10-05 Thread Avri Altman
HI,

> Drivers that wish to support DeepSleep need to set a new capability flag
> UFSHCD_CAP_DEEPSLEEP and provide a hardware reset via the existing
>  ->device_reset() callback.
I would expect that this capability controls sending SSU 4, but it only 
controls the sysfs entry?

> 
> It is assumed that UFS devices with wspecversion >= 0x310 support
> DeepSleep.
> 
> The UFS specification says to set the IMMED (immediate) flag for the
> Start/Stop Unit command when entering DeepSleep. However some UFS
> devices object to that, which is addressed in a subsequent patch.
After failing to understand what the proper behavior should be with respect of 
the IMMED bit,
Although I read the applicable section few time, I gave up and consult our 
system guy,
Which is our jedec representative.  This is his answer:
"...
In order to avoid uncertainty - the host need to set IMMED bit to '0' (this is 
explicitly specified by the standard).
The device responds only after it switches to Pre-DeepSleep state. The host 
then switch to H8 and this would trigger the device to transition to DeepSleep 
state.
..."

So maybe the 2nd patch isn't really needed. 
Thanks,
Avri


Re: [PATCH 1/2] scsi: ufs: Add DeepSleep feature

2020-10-05 Thread Adrian Hunter
On 5/10/20 11:02 am, Avri Altman wrote:
> HI,
> 
>> Drivers that wish to support DeepSleep need to set a new capability flag
>> UFSHCD_CAP_DEEPSLEEP and provide a hardware reset via the existing
>>  ->device_reset() callback.
> I would expect that this capability controls sending SSU 4, but it only 
> controls the sysfs entry?

The sysfs entry is the only way to request DeepSleep.

> 
>>
>> It is assumed that UFS devices with wspecversion >= 0x310 support
>> DeepSleep.
>>
>> The UFS specification says to set the IMMED (immediate) flag for the
>> Start/Stop Unit command when entering DeepSleep. However some UFS
>> devices object to that, which is addressed in a subsequent patch.
> After failing to understand what the proper behavior should be with respect 
> of the IMMED bit,
> Although I read the applicable section few time, I gave up and consult our 
> system guy,
> Which is our jedec representative.  This is his answer:
> "...
> In order to avoid uncertainty - the host need to set IMMED bit to '0' (this 
> is explicitly specified by the standard).
> The device responds only after it switches to Pre-DeepSleep state. The host 
> then switch to H8 and this would trigger the device to transition to 
> DeepSleep state.
> ..."
> 
> So maybe the 2nd patch isn't really needed. 

Yes I managed to get it the wrong way around!  I will drop patch 2 and send
V2 of patch 1 in due course.


RE: [PATCH 1/2] scsi: ufs: Add DeepSleep feature

2020-10-05 Thread Avri Altman
> 
> 
> On 5/10/20 11:02 am, Avri Altman wrote:
> > HI,
> >
> >> Drivers that wish to support DeepSleep need to set a new capability flag
> >> UFSHCD_CAP_DEEPSLEEP and provide a hardware reset via the existing
> >>  ->device_reset() callback.
> > I would expect that this capability controls sending SSU 4, but it only 
> > controls
> the sysfs entry?
> 
> The sysfs entry is the only way to request DeepSleep.
Some chipset vendors use their own modules, or even the device tree
to set their default rpm_lvl / spm_lvl.

Thanks,
Avri


Re: [PATCH 1/2] scsi: ufs: Add DeepSleep feature

2020-10-05 Thread Adrian Hunter
On 5/10/20 12:51 pm, Avri Altman wrote:
>>
>>
>> On 5/10/20 11:02 am, Avri Altman wrote:
>>> HI,
>>>
 Drivers that wish to support DeepSleep need to set a new capability flag
 UFSHCD_CAP_DEEPSLEEP and provide a hardware reset via the existing
  ->device_reset() callback.
>>> I would expect that this capability controls sending SSU 4, but it only 
>>> controls
>> the sysfs entry?
>>
>> The sysfs entry is the only way to request DeepSleep.
> Some chipset vendors use their own modules, or even the device tree
> to set their default rpm_lvl / spm_lvl.

I would not expect them to set it wrongly but what are you suggesting?


RE: [PATCH 1/2] scsi: ufs: Add DeepSleep feature

2020-10-05 Thread Avri Altman
> 
> On 5/10/20 12:51 pm, Avri Altman wrote:
> >>
> >>
> >> On 5/10/20 11:02 am, Avri Altman wrote:
> >>> HI,
> >>>
>  Drivers that wish to support DeepSleep need to set a new capability flag
>  UFSHCD_CAP_DEEPSLEEP and provide a hardware reset via the existing
>   ->device_reset() callback.
> >>> I would expect that this capability controls sending SSU 4, but it only
> controls
> >> the sysfs entry?
> >>
> >> The sysfs entry is the only way to request DeepSleep.
> > Some chipset vendors use their own modules, or even the device tree
> > to set their default rpm_lvl / spm_lvl.
> 
> I would not expect them to set it wrongly but what are you suggesting?
Right. Let's leave it as it is.

Thanks,
Avri



RE: [PATCH 1/2] scsi: ufs: Add DeepSleep feature

2020-10-04 Thread Avri Altman
> +   /*
> +* DeepSleep requires the Immediate flag. DeepSleep state is actually
> +* entered when the link state goes to Hibern8.
> +*/
> +   if (pwr_mode == UFS_DEEPSLEEP_PWR_MODE)
> +   cmd[1] = 1;
Shouldn't it be bit1, i.e. cmd[1] = 2 ?

> cmd[4] = pwr_mode << 4;
> 


RE: [PATCH 1/2] scsi: ufs: Add DeepSleep feature

2020-10-04 Thread Avri Altman
Please ignore - I was confused with pre-fetch.
Sorry,
Avri

> -Original Message-
> From: Avri Altman
> Sent: Sunday, October 4, 2020 10:21 AM
> To: 'Adrian Hunter' ; Martin K . Petersen
> ; James E . J . Bottomley 
> Cc: linux-s...@vger.kernel.org; linux-kernel@vger.kernel.org; Alim Akhtar
> 
> Subject: RE: [PATCH 1/2] scsi: ufs: Add DeepSleep feature
> 
> > +   /*
> > +* DeepSleep requires the Immediate flag. DeepSleep state is 
> > actually
> > +* entered when the link state goes to Hibern8.
> > +*/
> > +   if (pwr_mode == UFS_DEEPSLEEP_PWR_MODE)
> > +   cmd[1] = 1;
> Shouldn't it be bit1, i.e. cmd[1] = 2 ?
> 
> > cmd[4] = pwr_mode << 4;
> >