Message ID | 1646288011-32242-2-git-send-email-quic_c_sanm@quicinc.com |
---|---|
State | New |
Headers | show |
Series | [v2,1/3] dt-bindings: phy: qcom,usb-snps-femto-v2: Add phy override params bindings | expand |
On 14/03/2022 09:16, Pavan Kondeti wrote: > Hi Krzysztof, > > On Mon, Mar 14, 2022 at 08:39:57AM +0100, Krzysztof Kozlowski wrote: >> On 14/03/2022 04:29, Pavan Kondeti wrote: >>> Hi Krzysztof, >>> >>> On Thu, Mar 03, 2022 at 04:59:22PM +0100, Krzysztof Kozlowski wrote: >>>> On 03/03/2022 07:13, Sandeep Maheswaram wrote: >>>>> Add device tree bindings for SNPS phy tuning parameters. >>>>> >>>>> Signed-off-by: Sandeep Maheswaram <quic_c_sanm@quicinc.com> >>>>> --- >>>>> .../bindings/phy/qcom,usb-snps-femto-v2.yaml | 125 +++++++++++++++++++++ >>>>> 1 file changed, 125 insertions(+) >>>>> >>>>> diff --git a/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml b/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml >>>>> index 0dfe691..227c097 100644 >>>>> --- a/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml >>>>> +++ b/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml >>>>> @@ -50,6 +50,131 @@ properties: >>>>> vdda33-supply: >>>>> description: phandle to the regulator 3.3V supply node. >>>>> >>>>> + qcom,hs-disconnect: >>>>> + $ref: /schemas/types.yaml#/definitions/uint32 >>>>> + description: >>>>> + This adjusts the voltage level for the threshold used to >>>>> + detect a disconnect event at the host. Possible values are. >>>> >>>> ':', instead of full stop. >>>> >>>>> + 7 -> +21.56% >>>>> + 6 -> +17.43% >>>>> + 5 -> +13.32% >>>>> + 4 -> +9.73% >>>>> + 3 -> +6.3 >>>>> + 2 -> +3.17% >>>>> + 1 -> 0, Design default% >>>> >>>> Use "default:" instead. Here and in other places. >>>> >>>>> + 0 -> -2.72% >>>> >>>> In current form this should be an enum... but actually current form is >>>> wrong. You should not store register values in DT. What if next version >>>> of hardware has a different meaning of these values? >>>> >>>> Instead, you should store here meaningful values, not register values. >>>> >>> >>> Thanks for the feedback. >>> >>> The values in % really makes the tuning easy. People look at the eye diagram >>> and decided whether to increase/decrease the margin. The absolute values >>> may not be that useful. All we need is an "adjustment" here. The databook >>> it self does not give any absolute values. >>> >>> I agree to the "enum" suggestion which we have been following for the >>> qusb2 driver already. >>> >>> The values have not changed in the last 5 years for this hardware block, so >>> defining enums for the % values would be really helpful. >> >> I did not say you cannot store here percentages. Quite opposite - store >> here the percentages. Just do not store register value. No. Please read >> my comment again - meaningful values are needed. >> > > IIUC, you are asking us to come up with a meaningful values to encode the > percentage values. However, all the % increments are not linear, so we can't > come up with {min, max} scheme. Lets take an example of hostdisconnect > threshold. > > As per the data book, > > + 7 -> +21.56% > + 6 -> +17.43% > + 5 -> +13.32% > + 4 -> +9.73% > + 3 -> +6.3 > + 2 -> +3.17% > + 1 -> 0, Design default% > + 0 -> -2.72% > > so how do we give meaningful values here? Does the below scheme make sense > to you? By "meaningful value" I mean something which has a understandable meaning to reader of this code or to hardware designer. For example percentage values or some units (ms, ns, Hz, mA, mV). The value used in register is not meaningful in that way to us because it has a meaning only to the hardware block. Storing register values is more difficult to read later, non-portable and non-scalable. > > #define QCOM_SNPS_FEMTO_HS_DISCONNECT_NEG_2P72 (-272) > #define QCOM_SNPS_FEMTO_HS_DISCONNECT_DEFAULT 0 > #define QCOM_SNPS_FEMTO_HS_DISCONNECT_3P17 317 > #define QCOM_SNPS_FEMTO_HS_DISCONNECT_6P3 63 This is some define in driver, does not look related to bindings. > In the driver, we have a mapping (which can be per SoC if required in future) > that takes these values and convert to the correct values for a given > register. You focus on driver but I am talking here only about bindings. What could be the meaningful value? Percentage could work. You have there a negative value, so I wonder what type of percentage is it? What is the formula? Your defines above look absolute, so maybe encode there absolute uV value? Best regards, Krzysztof
Hi Krzysztof, On Mon, Mar 14, 2022 at 11:08:05AM +0100, Krzysztof Kozlowski wrote: > On 14/03/2022 10:40, Pavan Kondeti wrote: > > Hi Krzysztof, > > > > Thanks for your suggestions and guidance on this. > > > > On Mon, Mar 14, 2022 at 09:36:02AM +0100, Krzysztof Kozlowski wrote: > >> On 14/03/2022 09:16, Pavan Kondeti wrote: > >>> Hi Krzysztof, > >>> > >>> On Mon, Mar 14, 2022 at 08:39:57AM +0100, Krzysztof Kozlowski wrote: > >>>> On 14/03/2022 04:29, Pavan Kondeti wrote: > >>>>> Hi Krzysztof, > >>>>> > >>>>> On Thu, Mar 03, 2022 at 04:59:22PM +0100, Krzysztof Kozlowski wrote: > >>>>>> On 03/03/2022 07:13, Sandeep Maheswaram wrote: > >>>>>>> Add device tree bindings for SNPS phy tuning parameters. > >>>>>>> > >>>>>>> Signed-off-by: Sandeep Maheswaram <quic_c_sanm@quicinc.com> > >>>>>>> --- > >>>>>>> .../bindings/phy/qcom,usb-snps-femto-v2.yaml | 125 +++++++++++++++++++++ > >>>>>>> 1 file changed, 125 insertions(+) > >>>>>>> > >>>>>>> diff --git a/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml b/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml > >>>>>>> index 0dfe691..227c097 100644 > >>>>>>> --- a/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml > >>>>>>> +++ b/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml > >>>>>>> @@ -50,6 +50,131 @@ properties: > >>>>>>> vdda33-supply: > >>>>>>> description: phandle to the regulator 3.3V supply node. > >>>>>>> > >>>>>>> + qcom,hs-disconnect: > >>>>>>> + $ref: /schemas/types.yaml#/definitions/uint32 > >>>>>>> + description: > >>>>>>> + This adjusts the voltage level for the threshold used to > >>>>>>> + detect a disconnect event at the host. Possible values are. > >>>>>> > >>>>>> ':', instead of full stop. > >>>>>> > >>>>>>> + 7 -> +21.56% > >>>>>>> + 6 -> +17.43% > >>>>>>> + 5 -> +13.32% > >>>>>>> + 4 -> +9.73% > >>>>>>> + 3 -> +6.3 > >>>>>>> + 2 -> +3.17% > >>>>>>> + 1 -> 0, Design default% > >>>>>> > >>>>>> Use "default:" instead. Here and in other places. > >>>>>> > >>>>>>> + 0 -> -2.72% > >>>>>> > >>>>>> In current form this should be an enum... but actually current form is > >>>>>> wrong. You should not store register values in DT. What if next version > >>>>>> of hardware has a different meaning of these values? > >>>>>> > >>>>>> Instead, you should store here meaningful values, not register values. > >>>>>> > >>>>> > >>>>> Thanks for the feedback. > >>>>> > >>>>> The values in % really makes the tuning easy. People look at the eye diagram > >>>>> and decided whether to increase/decrease the margin. The absolute values > >>>>> may not be that useful. All we need is an "adjustment" here. The databook > >>>>> it self does not give any absolute values. > >>>>> > >>>>> I agree to the "enum" suggestion which we have been following for the > >>>>> qusb2 driver already. > >>>>> > >>>>> The values have not changed in the last 5 years for this hardware block, so > >>>>> defining enums for the % values would be really helpful. > >>>> > >>>> I did not say you cannot store here percentages. Quite opposite - store > >>>> here the percentages. Just do not store register value. No. Please read > >>>> my comment again - meaningful values are needed. > >>>> > >>> > >>> IIUC, you are asking us to come up with a meaningful values to encode the > >>> percentage values. However, all the % increments are not linear, so we can't > >>> come up with {min, max} scheme. Lets take an example of hostdisconnect > >>> threshold. > >>> > >>> As per the data book, > >>> > >>> + 7 -> +21.56% > >>> + 6 -> +17.43% > >>> + 5 -> +13.32% > >>> + 4 -> +9.73% > >>> + 3 -> +6.3 > >>> + 2 -> +3.17% > >>> + 1 -> 0, Design default% > >>> + 0 -> -2.72% > >>> > >>> so how do we give meaningful values here? Does the below scheme make sense > >>> to you? > >> > >> By "meaningful value" I mean something which has a understandable > >> meaning to reader of this code or to hardware designer. For example > >> percentage values or some units (ms, ns, Hz, mA, mV). The value used in > >> register is not meaningful in that way to us because it has a meaning > >> only to the hardware block. Storing register values is more difficult to > >> read later, non-portable and non-scalable. > >> > >>> > >>> #define QCOM_SNPS_FEMTO_HS_DISCONNECT_NEG_2P72 (-272) > >>> #define QCOM_SNPS_FEMTO_HS_DISCONNECT_DEFAULT 0 > >>> #define QCOM_SNPS_FEMTO_HS_DISCONNECT_3P17 317 > >>> #define QCOM_SNPS_FEMTO_HS_DISCONNECT_6P3 63 > >> > >> This is some define in driver, does not look related to bindings. > >> > >>> In the driver, we have a mapping (which can be per SoC if required in future) > >>> that takes these values and convert to the correct values for a given > >>> register. > >> > >> You focus on driver but I am talking here only about bindings. > > > > I was saying we define those defines in include/dt-bindings/phy/... header and > > use it in the device tree and as well in the driver. > > Ah, I did not get it. That's not the solution for this case. defines in > dt-bindings are for constants which already can be in DT, e.g. IDs. Your > register values should not be stored in DT. > These are again not register definitions. These are encodings that dT and driver can use. These would be constants only, no? > > > >> > >> What could be the meaningful value? Percentage could work. You have > >> there a negative value, so I wonder what type of percentage is it? What > >> is the formula? > > > > I just multiplied by 100 since device tree has no support for floating (as per > > my knowledge). The negative value represents it lowers the disconnect > > threshold by 2.72% of the default value. if it makes sense, we could also > > start from 0 like below. > > ok > > > > > #define QCOM_SNPS_FEMTO_HS_DISCONNECT_NEG_2P72_PCT 0 > > #define QCOM_SNPS_FEMTO_HS_DISCONNECT_DEFAULT 1 > > #define QCOM_SNPS_FEMTO_HS_DISCONNECT_3P17_PCT 2 > > #define QCOM_SNPS_FEMTO_HS_DISCONNECT_6P3_PCT 3 > > > > The driver can have a table to map these bindings. This looks much better > > than those x100 formula values. > > Again mention driver how he can map it. I mostly don't care about the > driver. :) > > I think we are getting around the problem, so to emphasize again: do not > store register values in the bindings/DT but its meaning, so in your > case most likely percentages (or permille or ratio or some other value). > I am really confused on what is that you mean by not storing the registers here. We are only giving enum values for specific percentages supported by the PHY. if you see -2.72 corresponds to 0 value on 0:2 bits of a register. I did not mention that in the device tree. we are giving constant values (enums) for all the possible percentage values. The user can see the dt-bindings file and pass the approriate value based on the compliance results. What is the objection? can you please give an example if you have something in mind? Thanks, Pavan
Hi Krzysztof, On Mon, Mar 14, 2022 at 11:41:27AM +0100, Krzysztof Kozlowski wrote: > On 14/03/2022 11:30, Pavan Kondeti wrote: > > Hi Krzysztof, > > > >> > >> Ah, I did not get it. That's not the solution for this case. defines in > >> dt-bindings are for constants which already can be in DT, e.g. IDs. Your > >> register values should not be stored in DT. > >> > > These are again not register definitions. These are encodings that dT and > > driver can use. These would be constants only, no? > > What do you mean it is not a register value? I don't have access to > datasheet/manual but I can clearly see code: > > + if (or->hs_disconnect.override) > + qcom_snps_hsphy_write_mask(hsphy->base, > + USB2_PHY_USB_PHY_HS_PHY_OVERRIDE_X0, > + HS_DISCONNECT_MASK, > + or->hs_disconnect.value << HS_DISCONNECT_SHIFT); > > You read the value from DT (e.g. "3" which means 6.3% for hs-disconnect) > and you write it to a register. Directly. 3 is a value for the hardware, > meaningless outside of it. It has meaning only in this one hardware > programming model. For humans it means nothing. For humans 6.3% means > something. > Right, This is what I have been saying will change. we don't pass the direct register values anymore. Instead I am saying, we pass the percentage multiplied by 100. For 6.3%, user will be passing 630 in device tree. for -2.75% user will pass (-275). Are we on the same page now? Thanks, Pavan
diff --git a/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml b/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml index 0dfe691..227c097 100644 --- a/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml +++ b/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml @@ -50,6 +50,131 @@ properties: vdda33-supply: description: phandle to the regulator 3.3V supply node. + qcom,hs-disconnect: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + This adjusts the voltage level for the threshold used to + detect a disconnect event at the host. Possible values are. + 7 -> +21.56% + 6 -> +17.43% + 5 -> +13.32% + 4 -> +9.73% + 3 -> +6.3 + 2 -> +3.17% + 1 -> 0, Design default% + 0 -> -2.72% + + qcom,squelch-detector: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + This adjusts the voltage level for the threshold used to + detect valid high-speed data. Possible values are + 7-> -20.90% + 6-> -15.60% + 5-> -10.30% + 4-> -5.30% + 3-> 0, Design default% + 2-> +5.30% + 1-> +10.60% + 0-> +15.90% + + qcom,hs-amplitude: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + This adjusts the high-speed DC level voltage. + Possible values are + 15-> +26.70% + 14-> +24.30% + 13-> +22.20% + 12-> +20.00% + 11-> +17.80% + 10-> +15.60% + 9-> +13.30% + 8-> +11.10% + 7-> +8.90% + 6-> +6.50% + 5-> +4.40% + 4-> +2.30% + 3-> 0, Design default% + 2-> -2.20% + 1-> -4.40% + 0-> -6.60% + + qcom,pre-emphasis-duration: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + This signal controls the duration for which the + HS pre-emphasis current is sourced onto DP<#> or DM<#>. + The HS Transmitter pre-emphasis duration is defined in terms of + unit amounts. One unit of pre-emphasis duration is approximately + 650 ps and is defined as 1X pre-emphasis duration. + Possible values are + 1-> 1x, short pre-emphasis current duration + 0-> 2x, long pre-emphasis current duration + + qcom,pre-emphasis-amplitude: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + This signal controls the amount of current sourced to + DP<#> and DM<#> after a J-to-K or K-to-J transition. + The HS Transmitter pre-emphasis current is defined in terms of unit + amounts. One unit amount is approximately 2 mA and is defined as + 1X pre-emphasis current. + Possible values are + 3-> HS Transmitter pre-emphasis circuit sources 3x pre-emphasis + current. + 2-> (design default) HS Transmitter pre-emphasis circuit sources 2x + pre-emphasis current. + 1-> HS Transmitter pre-emphasis circuit sources 1x pre-emphasis + current. + 0-> HS Transmitter pre-emphasis circuit sources 4x pre-emphasis + current. + + qcom,hs-rise-fall-time: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + This adjusts the rise/fall times of the high-speed waveform. + Possible values are + 3-> -41.0% + 2-> 0, Design default + 1-> +28.1 + 0-> +54.3% + + qcom,hs-crossover-voltage: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + This adjusts the voltage at which the DP<#> and DM<#> + signals cross while transmitting in HS mode. + Possible values are + 3-> 0, Default setting + 2-> +28 mV + 1-> -31 mV + 0-> Reserved + + qcom,hs-output-impedance: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + In some applications, there can be significant series resistance + on the D+ and D- paths between the transceiver and cable. This adjusts + the driver source impedance to compensate for added series + resistance on the USB. + 3-> Source impedance is decreased by approximately 2.3 ohms + 2-> 0, Design default + 1-> Source impedance is increased by approximately 2.6 ohms + 0-> Source impedance is increased by approximately 6.1 ohms + + qcom,ls-fs-output-impedance: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + This adjusts the low- and full-speed single-ended source + impedance while driving high. The following adjustment values are based + on nominal process, voltage, and temperature. + 15-> -10.53% + 7-> -5.57% + 3-> 0, Design default + 1-> +6.12% + 0-> +13.10% + required: - compatible - reg
Add device tree bindings for SNPS phy tuning parameters. Signed-off-by: Sandeep Maheswaram <quic_c_sanm@quicinc.com> --- .../bindings/phy/qcom,usb-snps-femto-v2.yaml | 125 +++++++++++++++++++++ 1 file changed, 125 insertions(+)