diff mbox series

[1/3] usb: dwc3: Add reference clock properties

Message ID ca0957e58d1d7c1ed49b53345a5c4ed9209c0968.1541208283.git.thinhn@synopsys.com
State Changes Requested, archived
Headers show
Series usb: dwc3: Introduce refclk lpm | expand

Checks

Context Check Description
robh/checkpatch warning "total: 0 errors, 1 warnings, 24 lines checked"

Commit Message

Thinh Nguyen Nov. 3, 2018, 1:35 a.m. UTC
Add two new device properties to program the reference clock period and
to enable low power management using the reference clock. This allows a
higher demand to go in low power for Audio Device Class devices. This
feature is currently only valid for DWC_usb31 peripheral controller
v1.80a and higher.

Set "snps,refclk-period-ns" to program the reference clock period. The
valid input periods are as follow:
 +-------------+-----------------+
 | Period (ns) | Freq (MHz)      |
 +-------------+-----------------+
 | 25          | 39.7/40         |
 | 41          | 24.4            |
 | 50          | 20              |
 | 52          | 19.2            |
 | 58          | 17.2            |
 | 62          | 16.1            |
 +-------------+-----------------+

Set "snps,refclk-lpm" to enable low power scheduling of isochronous
transfers by running SOF/ITP counters using the reference clock. Both
"snps,dis_u2_susphy_quirk" and "snps,dis_enblslpm_quirk" must not be
set for this feature to be enabled.

Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

Comments

Felipe Balbi Nov. 6, 2018, 11:26 a.m. UTC | #1
hi,

Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
> Add two new device properties to program the reference clock period and
> to enable low power management using the reference clock. This allows a
> higher demand to go in low power for Audio Device Class devices. This
> feature is currently only valid for DWC_usb31 peripheral controller
> v1.80a and higher.
>
> Set "snps,refclk-period-ns" to program the reference clock period. The
> valid input periods are as follow:
>  +-------------+-----------------+
>  | Period (ns) | Freq (MHz)      |
>  +-------------+-----------------+
>  | 25          | 39.7/40         |
>  | 41          | 24.4            |
>  | 50          | 20              |
>  | 52          | 19.2            |
>  | 58          | 17.2            |
>  | 62          | 16.1            |
>  +-------------+-----------------+
>
> Set "snps,refclk-lpm" to enable low power scheduling of isochronous
> transfers by running SOF/ITP counters using the reference clock. Both
> "snps,dis_u2_susphy_quirk" and "snps,dis_enblslpm_quirk" must not be
> set for this feature to be enabled.
>
> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
> ---
>  Documentation/devicetree/bindings/usb/dwc3.txt | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
> index 636630fb92d7..712b344c3a31 100644
> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
> @@ -95,6 +95,24 @@ Optional properties:
>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>  			enable periodic ESS TX threshold.
> + - snps,refclk-period-ns: set to program the reference clock period. The valid
> +   			input periods are as follow:
> +			+-------------+-----------------+
> +			| Period (ns) | Freq (MHz)      |
> +			+-------------+-----------------+
> +			| 25          | 39.7/40         |
> +			| 41          | 24.4            |
> +			| 50          | 20              |
> +			| 52          | 19.2            |
> +			| 58          | 17.2            |
> +			| 62          | 16.1            |
> +			+-------------+-----------------+
> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
> +			transfers by running SOF/ITP counters using the
> +			reference clock. Only valid for DWC_usb31 peripheral
> +			controller v1.80a and higher. Both
> +			"snps,dis_u2_susphy_quirk" and
> +			"snps,dis_enblslpm_quirk" must not be set.

sounds like you should rely on clk API here. Then on driver call
clk_get_rate() to computer whatever you need to compute.
Thinh Nguyen Nov. 7, 2018, 4:11 a.m. UTC | #2
Hi Felipe,

On 11/6/2018 3:26 AM, Felipe Balbi wrote:
> hi,
>
> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>> Add two new device properties to program the reference clock period and
>> to enable low power management using the reference clock. This allows a
>> higher demand to go in low power for Audio Device Class devices. This
>> feature is currently only valid for DWC_usb31 peripheral controller
>> v1.80a and higher.
>>
>> Set "snps,refclk-period-ns" to program the reference clock period. The
>> valid input periods are as follow:
>>  +-------------+-----------------+
>>  | Period (ns) | Freq (MHz)      |
>>  +-------------+-----------------+
>>  | 25          | 39.7/40         |
>>  | 41          | 24.4            |
>>  | 50          | 20              |
>>  | 52          | 19.2            |
>>  | 58          | 17.2            |
>>  | 62          | 16.1            |
>>  +-------------+-----------------+
>>
>> Set "snps,refclk-lpm" to enable low power scheduling of isochronous
>> transfers by running SOF/ITP counters using the reference clock. Both
>> "snps,dis_u2_susphy_quirk" and "snps,dis_enblslpm_quirk" must not be
>> set for this feature to be enabled.
>>
>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
>> ---
>>  Documentation/devicetree/bindings/usb/dwc3.txt | 18 ++++++++++++++++++
>>  1 file changed, 18 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>> index 636630fb92d7..712b344c3a31 100644
>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>> @@ -95,6 +95,24 @@ Optional properties:
>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>  			enable periodic ESS TX threshold.
>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>> +   			input periods are as follow:
>> +			+-------------+-----------------+
>> +			| Period (ns) | Freq (MHz)      |
>> +			+-------------+-----------------+
>> +			| 25          | 39.7/40         |
>> +			| 41          | 24.4            |
>> +			| 50          | 20              |
>> +			| 52          | 19.2            |
>> +			| 58          | 17.2            |
>> +			| 62          | 16.1            |
>> +			+-------------+-----------------+
>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>> +			transfers by running SOF/ITP counters using the
>> +			reference clock. Only valid for DWC_usb31 peripheral
>> +			controller v1.80a and higher. Both
>> +			"snps,dis_u2_susphy_quirk" and
>> +			"snps,dis_enblslpm_quirk" must not be set.
> sounds like you should rely on clk API here. Then on driver call
> clk_get_rate() to computer whatever you need to compute.
>
There's nothing to compute here. We can simply enable this feature with
"snps, enable-refclk-lpm" and the controller will use the default refclk
settings.

Thinh
Felipe Balbi Nov. 7, 2018, 6:37 a.m. UTC | #3
Hi,

Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>> Add two new device properties to program the reference clock period and
>>> to enable low power management using the reference clock. This allows a
>>> higher demand to go in low power for Audio Device Class devices. This
>>> feature is currently only valid for DWC_usb31 peripheral controller
>>> v1.80a and higher.
>>>
>>> Set "snps,refclk-period-ns" to program the reference clock period. The
>>> valid input periods are as follow:
>>>  +-------------+-----------------+
>>>  | Period (ns) | Freq (MHz)      |
>>>  +-------------+-----------------+
>>>  | 25          | 39.7/40         |
>>>  | 41          | 24.4            |
>>>  | 50          | 20              |
>>>  | 52          | 19.2            |
>>>  | 58          | 17.2            |
>>>  | 62          | 16.1            |
>>>  +-------------+-----------------+
>>>
>>> Set "snps,refclk-lpm" to enable low power scheduling of isochronous
>>> transfers by running SOF/ITP counters using the reference clock. Both
>>> "snps,dis_u2_susphy_quirk" and "snps,dis_enblslpm_quirk" must not be
>>> set for this feature to be enabled.
>>>
>>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
>>> ---
>>>  Documentation/devicetree/bindings/usb/dwc3.txt | 18 ++++++++++++++++++
>>>  1 file changed, 18 insertions(+)
>>>
>>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>>> index 636630fb92d7..712b344c3a31 100644
>>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>>> @@ -95,6 +95,24 @@ Optional properties:
>>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>>  			enable periodic ESS TX threshold.
>>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>>> +   			input periods are as follow:
>>> +			+-------------+-----------------+
>>> +			| Period (ns) | Freq (MHz)      |
>>> +			+-------------+-----------------+
>>> +			| 25          | 39.7/40         |
>>> +			| 41          | 24.4            |
>>> +			| 50          | 20              |
>>> +			| 52          | 19.2            |
>>> +			| 58          | 17.2            |
>>> +			| 62          | 16.1            |
>>> +			+-------------+-----------------+
>>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>>> +			transfers by running SOF/ITP counters using the
>>> +			reference clock. Only valid for DWC_usb31 peripheral
>>> +			controller v1.80a and higher. Both
>>> +			"snps,dis_u2_susphy_quirk" and
>>> +			"snps,dis_enblslpm_quirk" must not be set.
>> sounds like you should rely on clk API here. Then on driver call
>> clk_get_rate() to computer whatever you need to compute.
>>
> There's nothing to compute here. We can simply enable this feature with
> "snps, enable-refclk-lpm" and the controller will use the default refclk
> settings.

Right, right. What I'm saying, though, is that we have a clock API for
describing a clock. So why wouldn't we rely on that API for this? I
think both of these new properties can be replaced with standard clock
API properties:

	clocks = <&clk1>, ..., <&lpm_clk>
        clock-names = "clock1", ...., "lpm";

Then dwc3 core could, simply, check if we have a clock named "lpm" and
if there is, use NSECS_PER_SEC / clk_get_rate() to get its period and
write it to the register that needs the information.
Thinh Nguyen Nov. 7, 2018, 10:49 p.m. UTC | #4
Hi Felipe,

On 11/6/2018 10:37 PM, Felipe Balbi wrote:
> Hi,
>
> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>> Add two new device properties to program the reference clock period and
>>>> to enable low power management using the reference clock. This allows a
>>>> higher demand to go in low power for Audio Device Class devices. This
>>>> feature is currently only valid for DWC_usb31 peripheral controller
>>>> v1.80a and higher.
>>>>
>>>> Set "snps,refclk-period-ns" to program the reference clock period. The
>>>> valid input periods are as follow:
>>>>  +-------------+-----------------+
>>>>  | Period (ns) | Freq (MHz)      |
>>>>  +-------------+-----------------+
>>>>  | 25          | 39.7/40         |
>>>>  | 41          | 24.4            |
>>>>  | 50          | 20              |
>>>>  | 52          | 19.2            |
>>>>  | 58          | 17.2            |
>>>>  | 62          | 16.1            |
>>>>  +-------------+-----------------+
>>>>
>>>> Set "snps,refclk-lpm" to enable low power scheduling of isochronous
>>>> transfers by running SOF/ITP counters using the reference clock. Both
>>>> "snps,dis_u2_susphy_quirk" and "snps,dis_enblslpm_quirk" must not be
>>>> set for this feature to be enabled.
>>>>
>>>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
>>>> ---
>>>>  Documentation/devicetree/bindings/usb/dwc3.txt | 18 ++++++++++++++++++
>>>>  1 file changed, 18 insertions(+)
>>>>
>>>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>> index 636630fb92d7..712b344c3a31 100644
>>>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>>>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>> @@ -95,6 +95,24 @@ Optional properties:
>>>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>>>  			enable periodic ESS TX threshold.
>>>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>>>> +   			input periods are as follow:
>>>> +			+-------------+-----------------+
>>>> +			| Period (ns) | Freq (MHz)      |
>>>> +			+-------------+-----------------+
>>>> +			| 25          | 39.7/40         |
>>>> +			| 41          | 24.4            |
>>>> +			| 50          | 20              |
>>>> +			| 52          | 19.2            |
>>>> +			| 58          | 17.2            |
>>>> +			| 62          | 16.1            |
>>>> +			+-------------+-----------------+
>>>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>>>> +			transfers by running SOF/ITP counters using the
>>>> +			reference clock. Only valid for DWC_usb31 peripheral
>>>> +			controller v1.80a and higher. Both
>>>> +			"snps,dis_u2_susphy_quirk" and
>>>> +			"snps,dis_enblslpm_quirk" must not be set.
>>> sounds like you should rely on clk API here. Then on driver call
>>> clk_get_rate() to computer whatever you need to compute.
>>>
>> There's nothing to compute here. We can simply enable this feature with
>> "snps, enable-refclk-lpm" and the controller will use the default refclk
>> settings.
> Right, right. What I'm saying, though, is that we have a clock API for
> describing a clock. So why wouldn't we rely on that API for this? I
> think both of these new properties can be replaced with standard clock
> API properties:
>
> 	clocks = <&clk1>, ..., <&lpm_clk>
>         clock-names = "clock1", ...., "lpm";
>
> Then dwc3 core could, simply, check if we have a clock named "lpm" and
> if there is, use NSECS_PER_SEC / clk_get_rate() to get its period and
> write it to the register that needs the information.
There's no new clock here. We are using the ref_clk for SOF and ITP
counter for this feature. Also, clocks are optional on non-DT platforms.
To use the clock API, then we need to update the driver to allow some
optional clock such as "ref" clock for non-DT platforms. Do you want to
do it like this?

Thinh
Felipe Balbi Nov. 8, 2018, 7:17 a.m. UTC | #5
Hi,

Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>> index 636630fb92d7..712b344c3a31 100644
>>>>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>> @@ -95,6 +95,24 @@ Optional properties:
>>>>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>>>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>>>>  			enable periodic ESS TX threshold.
>>>>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>>>>> +   			input periods are as follow:
>>>>> +			+-------------+-----------------+
>>>>> +			| Period (ns) | Freq (MHz)      |
>>>>> +			+-------------+-----------------+
>>>>> +			| 25          | 39.7/40         |
>>>>> +			| 41          | 24.4            |
>>>>> +			| 50          | 20              |
>>>>> +			| 52          | 19.2            |
>>>>> +			| 58          | 17.2            |
>>>>> +			| 62          | 16.1            |
>>>>> +			+-------------+-----------------+
>>>>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>>>>> +			transfers by running SOF/ITP counters using the
>>>>> +			reference clock. Only valid for DWC_usb31 peripheral
>>>>> +			controller v1.80a and higher. Both
>>>>> +			"snps,dis_u2_susphy_quirk" and
>>>>> +			"snps,dis_enblslpm_quirk" must not be set.
>>>> sounds like you should rely on clk API here. Then on driver call
>>>> clk_get_rate() to computer whatever you need to compute.
>>>>
>>> There's nothing to compute here. We can simply enable this feature with
>>> "snps, enable-refclk-lpm" and the controller will use the default refclk
>>> settings.
>> Right, right. What I'm saying, though, is that we have a clock API for
>> describing a clock. So why wouldn't we rely on that API for this? I
>> think both of these new properties can be replaced with standard clock
>> API properties:
>>
>> 	clocks = <&clk1>, ..., <&lpm_clk>
>>         clock-names = "clock1", ...., "lpm";
>>
>> Then dwc3 core could, simply, check if we have a clock named "lpm" and
>> if there is, use NSECS_PER_SEC / clk_get_rate() to get its period and
>> write it to the register that needs the information.
> There's no new clock here. We are using the ref_clk for SOF and ITP
> counter for this feature. Also, clocks are optional on non-DT platforms.
> To use the clock API, then we need to update the driver to allow some
> optional clock such as "ref" clock for non-DT platforms. Do you want to
> do it like this?

I can't think of a problem that would arise from that. Can you? Mark,
Rob, what do you think?
Thinh Nguyen Nov. 8, 2018, 7:51 p.m. UTC | #6
Hi Felipe,

On 11/7/2018 11:17 PM, Felipe Balbi wrote:
> Hi,
>
> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>>>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>> index 636630fb92d7..712b344c3a31 100644
>>>>>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>> @@ -95,6 +95,24 @@ Optional properties:
>>>>>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>>>>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>>>>>  			enable periodic ESS TX threshold.
>>>>>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>>>>>> +   			input periods are as follow:
>>>>>> +			+-------------+-----------------+
>>>>>> +			| Period (ns) | Freq (MHz)      |
>>>>>> +			+-------------+-----------------+
>>>>>> +			| 25          | 39.7/40         |
>>>>>> +			| 41          | 24.4            |
>>>>>> +			| 50          | 20              |
>>>>>> +			| 52          | 19.2            |
>>>>>> +			| 58          | 17.2            |
>>>>>> +			| 62          | 16.1            |
>>>>>> +			+-------------+-----------------+
>>>>>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>>>>>> +			transfers by running SOF/ITP counters using the
>>>>>> +			reference clock. Only valid for DWC_usb31 peripheral
>>>>>> +			controller v1.80a and higher. Both
>>>>>> +			"snps,dis_u2_susphy_quirk" and
>>>>>> +			"snps,dis_enblslpm_quirk" must not be set.
>>>>> sounds like you should rely on clk API here. Then on driver call
>>>>> clk_get_rate() to computer whatever you need to compute.
>>>>>
>>>> There's nothing to compute here. We can simply enable this feature with
>>>> "snps, enable-refclk-lpm" and the controller will use the default refclk
>>>> settings.
>>> Right, right. What I'm saying, though, is that we have a clock API for
>>> describing a clock. So why wouldn't we rely on that API for this? I
>>> think both of these new properties can be replaced with standard clock
>>> API properties:
>>>
>>> 	clocks = <&clk1>, ..., <&lpm_clk>
>>>         clock-names = "clock1", ...., "lpm";
>>>
>>> Then dwc3 core could, simply, check if we have a clock named "lpm" and
>>> if there is, use NSECS_PER_SEC / clk_get_rate() to get its period and
>>> write it to the register that needs the information.
>> There's no new clock here. We are using the ref_clk for SOF and ITP
>> counter for this feature. Also, clocks are optional on non-DT platforms.
>> To use the clock API, then we need to update the driver to allow some
>> optional clock such as "ref" clock for non-DT platforms. Do you want to
>> do it like this?
> I can't think of a problem that would arise from that. Can you? Mark,
> Rob, what do you think?
>
No problem. That can be done. This will remove the
"snps,refclk-period-ns" property. But we should have
"snps,enable-refclk-lpm" to enable this feature.

Thinh
Felipe Balbi Nov. 9, 2018, 7:14 a.m. UTC | #7
Hi,

Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>>>>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>> index 636630fb92d7..712b344c3a31 100644
>>>>>>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>> @@ -95,6 +95,24 @@ Optional properties:
>>>>>>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>>>>>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>>>>>>  			enable periodic ESS TX threshold.
>>>>>>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>>>>>>> +   			input periods are as follow:
>>>>>>> +			+-------------+-----------------+
>>>>>>> +			| Period (ns) | Freq (MHz)      |
>>>>>>> +			+-------------+-----------------+
>>>>>>> +			| 25          | 39.7/40         |
>>>>>>> +			| 41          | 24.4            |
>>>>>>> +			| 50          | 20              |
>>>>>>> +			| 52          | 19.2            |
>>>>>>> +			| 58          | 17.2            |
>>>>>>> +			| 62          | 16.1            |
>>>>>>> +			+-------------+-----------------+
>>>>>>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>>>>>>> +			transfers by running SOF/ITP counters using the
>>>>>>> +			reference clock. Only valid for DWC_usb31 peripheral
>>>>>>> +			controller v1.80a and higher. Both
>>>>>>> +			"snps,dis_u2_susphy_quirk" and
>>>>>>> +			"snps,dis_enblslpm_quirk" must not be set.
>>>>>> sounds like you should rely on clk API here. Then on driver call
>>>>>> clk_get_rate() to computer whatever you need to compute.
>>>>>>
>>>>> There's nothing to compute here. We can simply enable this feature with
>>>>> "snps, enable-refclk-lpm" and the controller will use the default refclk
>>>>> settings.
>>>> Right, right. What I'm saying, though, is that we have a clock API for
>>>> describing a clock. So why wouldn't we rely on that API for this? I
>>>> think both of these new properties can be replaced with standard clock
>>>> API properties:
>>>>
>>>> 	clocks = <&clk1>, ..., <&lpm_clk>
>>>>         clock-names = "clock1", ...., "lpm";
>>>>
>>>> Then dwc3 core could, simply, check if we have a clock named "lpm" and
>>>> if there is, use NSECS_PER_SEC / clk_get_rate() to get its period and
>>>> write it to the register that needs the information.
>>> There's no new clock here. We are using the ref_clk for SOF and ITP
>>> counter for this feature. Also, clocks are optional on non-DT platforms.
>>> To use the clock API, then we need to update the driver to allow some
>>> optional clock such as "ref" clock for non-DT platforms. Do you want to
>>> do it like this?
>> I can't think of a problem that would arise from that. Can you? Mark,
>> Rob, what do you think?
>>
> No problem. That can be done. This will remove the
> "snps,refclk-period-ns" property. But we should have
> "snps,enable-refclk-lpm" to enable this feature.

not really. Just check if you have a clock named lpm. If you do, then
you enable the feature.
Thinh Nguyen Nov. 9, 2018, 7:45 a.m. UTC | #8
Hi Felipe,

On 11/8/2018 11:14 PM, Felipe Balbi wrote:
> Hi,
>
> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>>>>>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>> index 636630fb92d7..712b344c3a31 100644
>>>>>>>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>> @@ -95,6 +95,24 @@ Optional properties:
>>>>>>>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>>>>>>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>>>>>>>  			enable periodic ESS TX threshold.
>>>>>>>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>>>>>>>> +   			input periods are as follow:
>>>>>>>> +			+-------------+-----------------+
>>>>>>>> +			| Period (ns) | Freq (MHz)      |
>>>>>>>> +			+-------------+-----------------+
>>>>>>>> +			| 25          | 39.7/40         |
>>>>>>>> +			| 41          | 24.4            |
>>>>>>>> +			| 50          | 20              |
>>>>>>>> +			| 52          | 19.2            |
>>>>>>>> +			| 58          | 17.2            |
>>>>>>>> +			| 62          | 16.1            |
>>>>>>>> +			+-------------+-----------------+
>>>>>>>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>>>>>>>> +			transfers by running SOF/ITP counters using the
>>>>>>>> +			reference clock. Only valid for DWC_usb31 peripheral
>>>>>>>> +			controller v1.80a and higher. Both
>>>>>>>> +			"snps,dis_u2_susphy_quirk" and
>>>>>>>> +			"snps,dis_enblslpm_quirk" must not be set.
>>>>>>> sounds like you should rely on clk API here. Then on driver call
>>>>>>> clk_get_rate() to computer whatever you need to compute.
>>>>>>>
>>>>>> There's nothing to compute here. We can simply enable this feature with
>>>>>> "snps, enable-refclk-lpm" and the controller will use the default refclk
>>>>>> settings.
>>>>> Right, right. What I'm saying, though, is that we have a clock API for
>>>>> describing a clock. So why wouldn't we rely on that API for this? I
>>>>> think both of these new properties can be replaced with standard clock
>>>>> API properties:
>>>>>
>>>>> 	clocks = <&clk1>, ..., <&lpm_clk>
>>>>>         clock-names = "clock1", ...., "lpm";
>>>>>
>>>>> Then dwc3 core could, simply, check if we have a clock named "lpm" and
>>>>> if there is, use NSECS_PER_SEC / clk_get_rate() to get its period and
>>>>> write it to the register that needs the information.
>>>> There's no new clock here. We are using the ref_clk for SOF and ITP
>>>> counter for this feature. Also, clocks are optional on non-DT platforms.
>>>> To use the clock API, then we need to update the driver to allow some
>>>> optional clock such as "ref" clock for non-DT platforms. Do you want to
>>>> do it like this?
>>> I can't think of a problem that would arise from that. Can you? Mark,
>>> Rob, what do you think?
>>>
>> No problem. That can be done. This will remove the
>> "snps,refclk-period-ns" property. But we should have
>> "snps,enable-refclk-lpm" to enable this feature.
> not really. Just check if you have a clock named lpm. If you do, then
> you enable the feature.
>
But this clock name should be "ref".  The new name "lpm" would make it
seem like it's a different clock.

Thinh
Felipe Balbi Nov. 9, 2018, 8:54 a.m. UTC | #9
Hi,

Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>>>>>>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>>> index 636630fb92d7..712b344c3a31 100644
>>>>>>>>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>>> @@ -95,6 +95,24 @@ Optional properties:
>>>>>>>>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>>>>>>>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>>>>>>>>  			enable periodic ESS TX threshold.
>>>>>>>>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>>>>>>>>> +   			input periods are as follow:
>>>>>>>>> +			+-------------+-----------------+
>>>>>>>>> +			| Period (ns) | Freq (MHz)      |
>>>>>>>>> +			+-------------+-----------------+
>>>>>>>>> +			| 25          | 39.7/40         |
>>>>>>>>> +			| 41          | 24.4            |
>>>>>>>>> +			| 50          | 20              |
>>>>>>>>> +			| 52          | 19.2            |
>>>>>>>>> +			| 58          | 17.2            |
>>>>>>>>> +			| 62          | 16.1            |
>>>>>>>>> +			+-------------+-----------------+
>>>>>>>>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>>>>>>>>> +			transfers by running SOF/ITP counters using the
>>>>>>>>> +			reference clock. Only valid for DWC_usb31 peripheral
>>>>>>>>> +			controller v1.80a and higher. Both
>>>>>>>>> +			"snps,dis_u2_susphy_quirk" and
>>>>>>>>> +			"snps,dis_enblslpm_quirk" must not be set.
>>>>>>>> sounds like you should rely on clk API here. Then on driver call
>>>>>>>> clk_get_rate() to computer whatever you need to compute.
>>>>>>>>
>>>>>>> There's nothing to compute here. We can simply enable this feature with
>>>>>>> "snps, enable-refclk-lpm" and the controller will use the default refclk
>>>>>>> settings.
>>>>>> Right, right. What I'm saying, though, is that we have a clock API for
>>>>>> describing a clock. So why wouldn't we rely on that API for this? I
>>>>>> think both of these new properties can be replaced with standard clock
>>>>>> API properties:
>>>>>>
>>>>>> 	clocks = <&clk1>, ..., <&lpm_clk>
>>>>>>         clock-names = "clock1", ...., "lpm";
>>>>>>
>>>>>> Then dwc3 core could, simply, check if we have a clock named "lpm" and
>>>>>> if there is, use NSECS_PER_SEC / clk_get_rate() to get its period and
>>>>>> write it to the register that needs the information.
>>>>> There's no new clock here. We are using the ref_clk for SOF and ITP
>>>>> counter for this feature. Also, clocks are optional on non-DT platforms.
>>>>> To use the clock API, then we need to update the driver to allow some
>>>>> optional clock such as "ref" clock for non-DT platforms. Do you want to
>>>>> do it like this?
>>>> I can't think of a problem that would arise from that. Can you? Mark,
>>>> Rob, what do you think?
>>>>
>>> No problem. That can be done. This will remove the
>>> "snps,refclk-period-ns" property. But we should have
>>> "snps,enable-refclk-lpm" to enable this feature.
>> not really. Just check if you have a clock named lpm. If you do, then
>> you enable the feature.
>>
> But this clock name should be "ref".  The new name "lpm" would make it
> seem like it's a different clock.

now I understand. There's no special LPM clock, this is just the regular
old reference clock being used for LPM. I agree with you, only
refclk-period-ns will be replaced.
Thinh Nguyen Dec. 8, 2018, 2:25 a.m. UTC | #10
Hi Felipe,

On 11/9/2018 12:54 AM, Felipe Balbi wrote:
> Hi,
>
> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>>> Thinh Nguyen <thinh.nguyen@synopsys.com> writes:
>>>>>>>>>> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>>>> index 636630fb92d7..712b344c3a31 100644
>>>>>>>>>> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>>>> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
>>>>>>>>>> @@ -95,6 +95,24 @@ Optional properties:
>>>>>>>>>>  			this and tx-thr-num-pkt-prd to a valid, non-zero value
>>>>>>>>>>  			1-16 (DWC_usb31 programming guide section 1.2.3) to
>>>>>>>>>>  			enable periodic ESS TX threshold.
>>>>>>>>>> + - snps,refclk-period-ns: set to program the reference clock period. The valid
>>>>>>>>>> +   			input periods are as follow:
>>>>>>>>>> +			+-------------+-----------------+
>>>>>>>>>> +			| Period (ns) | Freq (MHz)      |
>>>>>>>>>> +			+-------------+-----------------+
>>>>>>>>>> +			| 25          | 39.7/40         |
>>>>>>>>>> +			| 41          | 24.4            |
>>>>>>>>>> +			| 50          | 20              |
>>>>>>>>>> +			| 52          | 19.2            |
>>>>>>>>>> +			| 58          | 17.2            |
>>>>>>>>>> +			| 62          | 16.1            |
>>>>>>>>>> +			+-------------+-----------------+
>>>>>>>>>> + - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
>>>>>>>>>> +			transfers by running SOF/ITP counters using the
>>>>>>>>>> +			reference clock. Only valid for DWC_usb31 peripheral
>>>>>>>>>> +			controller v1.80a and higher. Both
>>>>>>>>>> +			"snps,dis_u2_susphy_quirk" and
>>>>>>>>>> +			"snps,dis_enblslpm_quirk" must not be set.
>>>>>>>>> sounds like you should rely on clk API here. Then on driver call
>>>>>>>>> clk_get_rate() to computer whatever you need to compute.
>>>>>>>>>
>>>>>>>> There's nothing to compute here. We can simply enable this feature with
>>>>>>>> "snps, enable-refclk-lpm" and the controller will use the default refclk
>>>>>>>> settings.
>>>>>>> Right, right. What I'm saying, though, is that we have a clock API for
>>>>>>> describing a clock. So why wouldn't we rely on that API for this? I
>>>>>>> think both of these new properties can be replaced with standard clock
>>>>>>> API properties:
>>>>>>>
>>>>>>> 	clocks = <&clk1>, ..., <&lpm_clk>
>>>>>>>         clock-names = "clock1", ...., "lpm";
>>>>>>>
>>>>>>> Then dwc3 core could, simply, check if we have a clock named "lpm" and
>>>>>>> if there is, use NSECS_PER_SEC / clk_get_rate() to get its period and
>>>>>>> write it to the register that needs the information.
>>>>>> There's no new clock here. We are using the ref_clk for SOF and ITP
>>>>>> counter for this feature. Also, clocks are optional on non-DT platforms.
>>>>>> To use the clock API, then we need to update the driver to allow some
>>>>>> optional clock such as "ref" clock for non-DT platforms. Do you want to
>>>>>> do it like this?
>>>>> I can't think of a problem that would arise from that. Can you? Mark,
>>>>> Rob, what do you think?
>>>>>
>>>> No problem. That can be done. This will remove the
>>>> "snps,refclk-period-ns" property. But we should have
>>>> "snps,enable-refclk-lpm" to enable this feature.
>>> not really. Just check if you have a clock named lpm. If you do, then
>>> you enable the feature.
>>>
>> But this clock name should be "ref".  The new name "lpm" would make it
>> seem like it's a different clock.
> now I understand. There's no special LPM clock, this is just the regular
> old reference clock being used for LPM. I agree with you, only
> refclk-period-ns will be replaced.
>

I had some misunderstanding with the purpose of GUCTL.REFCLKPER. After a
discussion with the RTL engineers, it's not to control the reference
clock. Setting this register field does not control the reference clock
rate. The controller uses this value to perform internal timing
calculations that are based on the reference clock. So, we will still
need this property to set this value. I will resend the patch series
with some changes and correct the commit messages with the proper
definition of this feature.

Thanks,
Thinh
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
index 636630fb92d7..712b344c3a31 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -95,6 +95,24 @@  Optional properties:
 			this and tx-thr-num-pkt-prd to a valid, non-zero value
 			1-16 (DWC_usb31 programming guide section 1.2.3) to
 			enable periodic ESS TX threshold.
+ - snps,refclk-period-ns: set to program the reference clock period. The valid
+   			input periods are as follow:
+			+-------------+-----------------+
+			| Period (ns) | Freq (MHz)      |
+			+-------------+-----------------+
+			| 25          | 39.7/40         |
+			| 41          | 24.4            |
+			| 50          | 20              |
+			| 52          | 19.2            |
+			| 58          | 17.2            |
+			| 62          | 16.1            |
+			+-------------+-----------------+
+ - snps,enable-refclk-lpm: set to enable low power scheduling of isochronous
+			transfers by running SOF/ITP counters using the
+			reference clock. Only valid for DWC_usb31 peripheral
+			controller v1.80a and higher. Both
+			"snps,dis_u2_susphy_quirk" and
+			"snps,dis_enblslpm_quirk" must not be set.
 
  - <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be reallocated.
  - snps,incr-burst-type-adjustment: Value for INCR burst type of GSBUSCFG0