Message ID | 20221219191038.1973807-1-robh@kernel.org |
---|---|
State | New |
Headers | show |
Series | [1/2] dt-bindings: usb: snps,dwc3: Allow power-domains property | expand |
Hi, Rob Herring <robh@kernel.org> writes: >> > The Rockchip RK3399 DWC3 node has 'power-domain' property which isn't >> > allowed by the schema: >> > >> > usb@fe900000: Unevaluated properties are not allowed ('power-domains' was unexpected) >> > >> > Allow DWC3 nodes to have a single power-domains entry. We could instead >> > move the power-domains property to the parent wrapper node, but the >> > could be an ABI break (Linux shouldn't care). Also, we don't want to >> > encourage the pattern of wrapper nodes just to define resources such as >> > clocks, resets, power-domains, etc. when not necessary. >> > >> > Signed-off-by: Rob Herring <robh@kernel.org> >> > --- >> > Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ >> > 1 file changed, 3 insertions(+) >> > >> > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> > index 6d78048c4613..bcefd1c2410a 100644 >> > --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> > @@ -91,6 +91,9 @@ properties: >> > - usb2-phy >> > - usb3-phy >> > >> > + power-domains: >> > + maxItems: 1 >> >> AFAICT this can be incorrect. Also, you could have Cc the dwc3 >> maintainer to get comments. > > When we have a user with more and know what each one is, then we can > extend it. All the other users (upstream), put 'power-domains' in the Won't that be an ABI break at that point? You'll change the maximum number of power-domains. > wrapper node. But this is what we need now for RK3399. > > I used get_maintainers.pl. If that's the wrong output, fix it please. @Thinh, perhaps you should add dwc3 binding file to the list of maintained files for you?
Rob Herring <robh@kernel.org> writes: > On Tue, Dec 20, 2022 at 1:37 AM Felipe Balbi <balbi@kernel.org> wrote: >> >> Rob Herring <robh@kernel.org> writes: >> >> > The rockchip,dwc3.yaml schema defines a single DWC3 node, but the RK3399 >> > uses the discouraged parent wrapper node and child 'generic' DWC3 node. >> >> Why discouraged? Splitting those two separate devices (yes, they are >> separate physical modules) has greatly simplified e.g. power management >> and encapsulation of the core module. > > Sometimes they are separate and that's fine, but often it's just > different clocks, resets, etc. and that's no different from every > other block. Right, then the argument is that all other blocks are not modelling the HW as they should :) > If there's wrapper registers or something clearly extra, then I agree > a wrapper parent node makes sense. There's always wrapper-specific registers. Some wrappers even add custom functionality. IIRC Qcom added a HW-based URB "scheduler" or some sort. > Otherwise, for cases like RK3399, I don't think it does, but we're > stuck with it now. > > Also, we have this pattern pretty much nowhere else and DWC3 is not > special. No, it's not. But it could just be the first example of the driver actually modelling the underlying HW. In any case, I was just curious with your opinion that this model is discouraged, as it's not stated anywhere in the kernel's documentation. Happy holidays
On 23/12/2022 11:31, Felipe Balbi wrote: > > Hi, > > Rob Herring <robh@kernel.org> writes: >>>> The Rockchip RK3399 DWC3 node has 'power-domain' property which isn't >>>> allowed by the schema: >>>> >>>> usb@fe900000: Unevaluated properties are not allowed ('power-domains' was unexpected) >>>> >>>> Allow DWC3 nodes to have a single power-domains entry. We could instead >>>> move the power-domains property to the parent wrapper node, but the >>>> could be an ABI break (Linux shouldn't care). Also, we don't want to >>>> encourage the pattern of wrapper nodes just to define resources such as >>>> clocks, resets, power-domains, etc. when not necessary. >>>> >>>> Signed-off-by: Rob Herring <robh@kernel.org> >>>> --- >>>> Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ >>>> 1 file changed, 3 insertions(+) >>>> >>>> diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >>>> index 6d78048c4613..bcefd1c2410a 100644 >>>> --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >>>> +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >>>> @@ -91,6 +91,9 @@ properties: >>>> - usb2-phy >>>> - usb3-phy >>>> >>>> + power-domains: >>>> + maxItems: 1 >>> >>> AFAICT this can be incorrect. Also, you could have Cc the dwc3 >>> maintainer to get comments. >> >> When we have a user with more and know what each one is, then we can >> extend it. All the other users (upstream), put 'power-domains' in the > > Won't that be an ABI break at that point? You'll change the maximum > number of power-domains. Usually extending properties (in flexible way) is not an ABI break. What would be broken here if it becomes three at some point? Does Linux or other SW depends now on this being equal to 1? Best regards, Krzysztof
Hi, On Fri, Dec 23, 2022, Felipe Balbi wrote: > > Hi, > > Rob Herring <robh@kernel.org> writes: > >> > The Rockchip RK3399 DWC3 node has 'power-domain' property which isn't > >> > allowed by the schema: > >> > > >> > usb@fe900000: Unevaluated properties are not allowed ('power-domains' was unexpected) > >> > > >> > Allow DWC3 nodes to have a single power-domains entry. We could instead > >> > move the power-domains property to the parent wrapper node, but the > >> > could be an ABI break (Linux shouldn't care). Also, we don't want to > >> > encourage the pattern of wrapper nodes just to define resources such as > >> > clocks, resets, power-domains, etc. when not necessary. > >> > > >> > Signed-off-by: Rob Herring <robh@kernel.org> > >> > --- > >> > Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ > >> > 1 file changed, 3 insertions(+) > >> > > >> > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> > index 6d78048c4613..bcefd1c2410a 100644 > >> > --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> > @@ -91,6 +91,9 @@ properties: > >> > - usb2-phy > >> > - usb3-phy > >> > > >> > + power-domains: > >> > + maxItems: 1 > >> > >> AFAICT this can be incorrect. Also, you could have Cc the dwc3 > >> maintainer to get comments. Felipe is correct. We have 2 power-domains: Core domain and PMU. > > > > When we have a user with more and know what each one is, then we can > > extend it. All the other users (upstream), put 'power-domains' in the > > Won't that be an ABI break at that point? You'll change the maximum > number of power-domains. > > > wrapper node. But this is what we need now for RK3399. > > > > I used get_maintainers.pl. If that's the wrong output, fix it please. > > @Thinh, perhaps you should add dwc3 binding file to the list of > maintained files for you? > Sure, if makes sense to do so. If there's no objection, I can also maintain/review it. I can create a patch after coming back from my break in 2 weeks. Since I'm on a break at the moment, my response may be delayed. Thanks, Thinh
On Fri, Dec 23, 2022 at 5:57 PM Thinh Nguyen <Thinh.Nguyen@synopsys.com> wrote: > > Hi, > > On Fri, Dec 23, 2022, Felipe Balbi wrote: > > > > Hi, > > > > Rob Herring <robh@kernel.org> writes: > > >> > The Rockchip RK3399 DWC3 node has 'power-domain' property which isn't > > >> > allowed by the schema: > > >> > > > >> > usb@fe900000: Unevaluated properties are not allowed ('power-domains' was unexpected) > > >> > > > >> > Allow DWC3 nodes to have a single power-domains entry. We could instead > > >> > move the power-domains property to the parent wrapper node, but the > > >> > could be an ABI break (Linux shouldn't care). Also, we don't want to > > >> > encourage the pattern of wrapper nodes just to define resources such as > > >> > clocks, resets, power-domains, etc. when not necessary. > > >> > > > >> > Signed-off-by: Rob Herring <robh@kernel.org> > > >> > --- > > >> > Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ > > >> > 1 file changed, 3 insertions(+) > > >> > > > >> > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > >> > index 6d78048c4613..bcefd1c2410a 100644 > > >> > --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > >> > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > > >> > @@ -91,6 +91,9 @@ properties: > > >> > - usb2-phy > > >> > - usb3-phy > > >> > > > >> > + power-domains: > > >> > + maxItems: 1 > > >> > > >> AFAICT this can be incorrect. Also, you could have Cc the dwc3 > > >> maintainer to get comments. > > Felipe is correct. We have 2 power-domains: Core domain and PMU. Power management unit? Performance management unit? That doesn't change that the rk3399 is 1 and we're stuck with it. So I can say 1 or 2 domains, or we add the 2nd domain when someone needs it. Rob
Hi, Rob Herring <robh@kernel.org> writes: > On Fri, Dec 23, 2022 at 5:57 PM Thinh Nguyen <Thinh.Nguyen@synopsys.com> wrote: >> > Rob Herring <robh@kernel.org> writes: >> > >> > The Rockchip RK3399 DWC3 node has 'power-domain' property which isn't >> > >> > allowed by the schema: >> > >> > >> > >> > usb@fe900000: Unevaluated properties are not allowed ('power-domains' was unexpected) >> > >> > >> > >> > Allow DWC3 nodes to have a single power-domains entry. We could instead >> > >> > move the power-domains property to the parent wrapper node, but the >> > >> > could be an ABI break (Linux shouldn't care). Also, we don't want to >> > >> > encourage the pattern of wrapper nodes just to define resources such as >> > >> > clocks, resets, power-domains, etc. when not necessary. >> > >> > >> > >> > Signed-off-by: Rob Herring <robh@kernel.org> >> > >> > --- >> > >> > Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ >> > >> > 1 file changed, 3 insertions(+) >> > >> > >> > >> > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> > >> > index 6d78048c4613..bcefd1c2410a 100644 >> > >> > --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> > >> > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> > >> > @@ -91,6 +91,9 @@ properties: >> > >> > - usb2-phy >> > >> > - usb3-phy >> > >> > >> > >> > + power-domains: >> > >> > + maxItems: 1 >> > >> >> > >> AFAICT this can be incorrect. Also, you could have Cc the dwc3 >> > >> maintainer to get comments. >> >> Felipe is correct. We have 2 power-domains: Core domain and PMU. > > Power management unit? Performance management unit? > > That doesn't change that the rk3399 is 1 and we're stuck with it. So I > can say 1 or 2 domains, or we add the 2nd domain when someone needs > it. Isn't the snps,dwc3.yaml document supposed to document dwc3's view of the world? In that case, dwc3 expects 2 power domains. It just so happens that in rk3399 they are fed from the same power supply, but dwc3' still thinks there are two of them. No? It's a similar situation when you have multiple clock domains with the same parent clock.
On Fri, Dec 30, 2022 at 2:43 AM Felipe Balbi <balbi@kernel.org> wrote: > > > Hi, > > Rob Herring <robh@kernel.org> writes: > > On Fri, Dec 23, 2022 at 5:57 PM Thinh Nguyen <Thinh.Nguyen@synopsys.com> wrote: > >> > Rob Herring <robh@kernel.org> writes: > >> > >> > The Rockchip RK3399 DWC3 node has 'power-domain' property which isn't > >> > >> > allowed by the schema: > >> > >> > > >> > >> > usb@fe900000: Unevaluated properties are not allowed ('power-domains' was unexpected) > >> > >> > > >> > >> > Allow DWC3 nodes to have a single power-domains entry. We could instead > >> > >> > move the power-domains property to the parent wrapper node, but the > >> > >> > could be an ABI break (Linux shouldn't care). Also, we don't want to > >> > >> > encourage the pattern of wrapper nodes just to define resources such as > >> > >> > clocks, resets, power-domains, etc. when not necessary. > >> > >> > > >> > >> > Signed-off-by: Rob Herring <robh@kernel.org> > >> > >> > --- > >> > >> > Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ > >> > >> > 1 file changed, 3 insertions(+) > >> > >> > > >> > >> > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> > >> > index 6d78048c4613..bcefd1c2410a 100644 > >> > >> > --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> > >> > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> > >> > @@ -91,6 +91,9 @@ properties: > >> > >> > - usb2-phy > >> > >> > - usb3-phy > >> > >> > > >> > >> > + power-domains: > >> > >> > + maxItems: 1 > >> > >> > >> > >> AFAICT this can be incorrect. Also, you could have Cc the dwc3 > >> > >> maintainer to get comments. > >> > >> Felipe is correct. We have 2 power-domains: Core domain and PMU. > > > > Power management unit? Performance management unit? > > > > That doesn't change that the rk3399 is 1 and we're stuck with it. So I > > can say 1 or 2 domains, or we add the 2nd domain when someone needs > > it. > > Isn't the snps,dwc3.yaml document supposed to document dwc3's view of > the world? In that case, dwc3 expects 2 power domains. It just so > happens that in rk3399 they are fed from the same power supply, but > dwc3' still thinks there are two of them. No? Yes. That is how bindings *should* be. However, RK3399 defined one PD long ago and it's an ABI. So we are stuck with it. Everyone else put power-domains in the parent because obviously the DWC3 has 0 power-domains. > It's a similar situation when you have multiple clock domains with the > same parent clock. Yes, that's a common problem in clock bindings too. Not really anything we can do about that other than require a detailed reference manual with every binding and someone (me) reviewing the manual against the binding. Neither of those are going to happen. Even on Arm Primecell blocks which clearly (and publicly) document the clocks, we've gotten these wrong (or .dts authors just didn't follow the binding). Rob
Hi, Rob Herring <robh@kernel.org> writes: >> >> > >> > Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ >> >> > >> > 1 file changed, 3 insertions(+) >> >> > >> > >> >> > >> > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> >> > >> > index 6d78048c4613..bcefd1c2410a 100644 >> >> > >> > --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> >> > >> > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml >> >> > >> > @@ -91,6 +91,9 @@ properties: >> >> > >> > - usb2-phy >> >> > >> > - usb3-phy >> >> > >> > >> >> > >> > + power-domains: >> >> > >> > + maxItems: 1 >> >> > >> >> >> > >> AFAICT this can be incorrect. Also, you could have Cc the dwc3 >> >> > >> maintainer to get comments. >> >> >> >> Felipe is correct. We have 2 power-domains: Core domain and PMU. >> > >> > Power management unit? Performance management unit? >> > >> > That doesn't change that the rk3399 is 1 and we're stuck with it. So I >> > can say 1 or 2 domains, or we add the 2nd domain when someone needs >> > it. >> >> Isn't the snps,dwc3.yaml document supposed to document dwc3's view of >> the world? In that case, dwc3 expects 2 power domains. It just so >> happens that in rk3399 they are fed from the same power supply, but >> dwc3' still thinks there are two of them. No? > > Yes. That is how bindings *should* be. However, RK3399 defined one PD > long ago and it's an ABI. So we are stuck with it. Everyone else put Are you confusing things, perhaps? DWC3, the block Synopsys licenses, has, as Thinh confirmed, 2 internal power domains. How OEMs (TI, Intel, Rockchip, Allwinner, etc) decide to integrate the IP into their systems is something different. That is part of the (so-called) wrapper. Different integrators will wrap Synopsys IP however they see fit, as long as they can provide a suitable translation layer between Synopsys own view of the world (its own interconnect implementation, of which there are 3 to choose from, IIRC) and the rest of the SoC. Perhaps what RK3399 did was provide a single power domain at the wrapper level that feeds both of DWC3's own power domains, but DWC3 itself still has 2 power domains, that's not something rockchip can change without risking the loss of support from Synopsys, as it would not be Synopsys IP anymore. > power-domains in the parent because obviously the DWC3 has 0 > power-domains. How did you come to this conclusion? >> It's a similar situation when you have multiple clock domains with the >> same parent clock. > > Yes, that's a common problem in clock bindings too. Not really > anything we can do about that other than require a detailed reference > manual with every binding and someone (me) reviewing the manual > against the binding. Neither of those are going to happen. Even on Arm > Primecell blocks which clearly (and publicly) document the clocks, > we've gotten these wrong (or .dts authors just didn't follow the > binding). Heh
On Fri, Dec 30, 2022 at 11:09 AM Felipe Balbi <balbi@kernel.org> wrote: > > > Hi, > > Rob Herring <robh@kernel.org> writes: > >> >> > >> > Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ > >> >> > >> > 1 file changed, 3 insertions(+) > >> >> > >> > > >> >> > >> > diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> >> > >> > index 6d78048c4613..bcefd1c2410a 100644 > >> >> > >> > --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> >> > >> > +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml > >> >> > >> > @@ -91,6 +91,9 @@ properties: > >> >> > >> > - usb2-phy > >> >> > >> > - usb3-phy > >> >> > >> > > >> >> > >> > + power-domains: > >> >> > >> > + maxItems: 1 > >> >> > >> > >> >> > >> AFAICT this can be incorrect. Also, you could have Cc the dwc3 > >> >> > >> maintainer to get comments. > >> >> > >> >> Felipe is correct. We have 2 power-domains: Core domain and PMU. > >> > > >> > Power management unit? Performance management unit? > >> > > >> > That doesn't change that the rk3399 is 1 and we're stuck with it. So I > >> > can say 1 or 2 domains, or we add the 2nd domain when someone needs > >> > it. > >> > >> Isn't the snps,dwc3.yaml document supposed to document dwc3's view of > >> the world? In that case, dwc3 expects 2 power domains. It just so > >> happens that in rk3399 they are fed from the same power supply, but > >> dwc3' still thinks there are two of them. No? > > > > Yes. That is how bindings *should* be. However, RK3399 defined one PD > > long ago and it's an ABI. So we are stuck with it. Everyone else put > > Are you confusing things, perhaps? DWC3, the block Synopsys licenses, > has, as Thinh confirmed, 2 internal power domains. How OEMs (TI, Intel, > Rockchip, Allwinner, etc) decide to integrate the IP into their systems > is something different. That is part of the (so-called) > wrapper. Different integrators will wrap Synopsys IP however they see > fit, as long as they can provide a suitable translation layer between > Synopsys own view of the world (its own interconnect implementation, of > which there are 3 to choose from, IIRC) and the rest of the SoC. > > Perhaps what RK3399 did was provide a single power domain at the wrapper > level that feeds both of DWC3's own power domains, but DWC3 itself still > has 2 power domains, that's not something rockchip can change without > risking the loss of support from Synopsys, as it would not be Synopsys > IP anymore. Again, none of this matters. I'm documenting what is already in use and an ABI, not what is correct. The time for correctness was when this binding was added. To move forward, how about something like this: power-domains: description: Really there are 2 PDs, but some implementations defined a single PD. minItems: 1 items: - description: core - description: PMU We unfortunately can't constrain this to Rockchip in the schema because that specific information is in the parent node. (kind of crappy descriptions too, but that's the amount of information I have.) > > power-domains in the parent because obviously the DWC3 has 0 > > power-domains. > > How did you come to this conclusion? By testing the schema against the in tree .dts files. To date, no one other than Rockchip has power-domains in the DWC3 node. Rob
diff --git a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml index 6d78048c4613..bcefd1c2410a 100644 --- a/Documentation/devicetree/bindings/usb/snps,dwc3.yaml +++ b/Documentation/devicetree/bindings/usb/snps,dwc3.yaml @@ -91,6 +91,9 @@ properties: - usb2-phy - usb3-phy + power-domains: + maxItems: 1 + resets: minItems: 1
The Rockchip RK3399 DWC3 node has 'power-domain' property which isn't allowed by the schema: usb@fe900000: Unevaluated properties are not allowed ('power-domains' was unexpected) Allow DWC3 nodes to have a single power-domains entry. We could instead move the power-domains property to the parent wrapper node, but the could be an ABI break (Linux shouldn't care). Also, we don't want to encourage the pattern of wrapper nodes just to define resources such as clocks, resets, power-domains, etc. when not necessary. Signed-off-by: Rob Herring <robh@kernel.org> --- Documentation/devicetree/bindings/usb/snps,dwc3.yaml | 3 +++ 1 file changed, 3 insertions(+)