Re: [RFC 1/3] dt-bindings: usb: qcom,dwc3: Add support for multiple power-domains

From: Dmitry Baryshkov
Date: Wed Mar 06 2024 - 14:52:02 EST


On Wed, 6 Mar 2024 at 17:52, Sriram Dash <quic_sriramd@xxxxxxxxxxx> wrote:
>
> On 3/6/2024 12:33 AM, Dmitry Baryshkov wrote:
> > On Tue, 5 Mar 2024 at 18:58, Sriram Dash <quic_sriramd@xxxxxxxxxxx> wrote:
> >>
> >> Some target systems allow multiple resources to be managed by firmware.
> >> On these targets, tasks related to clocks, regulators, resets, and
> >> interconnects can be delegated to the firmware, while the remaining
> >> responsibilities are handled by Linux.
> >>
> >> To support the management of partial resources in Linux and leave the rest
> >> to firmware, multiple power domains are introduced. Each power domain can
> >> manage one or more resources, depending on the specific use case.
> >>
> >> These power domains handle SCMI calls to the firmware, enabling the
> >> activation and deactivation of firmware-managed resources.
> >>
> >> Signed-off-by: Sriram Dash <quic_sriramd@xxxxxxxxxxx>
> >> ---
> >> .../phy/qcom,sc8280xp-qmp-usb3-uni-phy.yaml | 74 ++++++++++++++++------
> >> .../bindings/phy/qcom,usb-snps-femto-v2.yaml | 49 ++++++++++++--
> >> .../devicetree/bindings/usb/qcom,dwc3.yaml | 37 ++++++++++-
> >> 3 files changed, 130 insertions(+), 30 deletions(-)
> >>
> >> diff --git a/Documentation/devicetree/bindings/phy/qcom,sc8280xp-qmp-usb3-uni-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,sc8280xp-qmp-usb3-uni-phy.yaml
> >> index 1e2d4dd..53b9ba9 100644
> >> --- a/Documentation/devicetree/bindings/phy/qcom,sc8280xp-qmp-usb3-uni-phy.yaml
> >> +++ b/Documentation/devicetree/bindings/phy/qcom,sc8280xp-qmp-usb3-uni-phy.yaml
> >> @@ -44,7 +44,32 @@ properties:
> >> maxItems: 5
> >>
> >> power-domains:
> >> - maxItems: 1
> >> + description: specifies a phandle to PM domain provider node
> >> + minItems: 1
> >> + maxItems: 2
> >> +
> >> + power-domain-names:
> >> + description:
> >> + A list of power domain name strings sorted in the same order as the
> >> + power-domains property.
> >> +
> >> + For platforms where some resource are firmware managed, the name
> >> + corresponding to the index of an SCMI domain provider can be
> >> + "usb_core" or "usb_transfer".
> >> + items:
> >> + - const: usb_core
> >> + - const: usb_transfer
> >> +
> >> + qmp,fw-managed:
> >> + description:
> >> + Some targets allow multiple resources to be managed by firmware.
> >> + On these targets, tasks related to clocks, regulators, resets, and
> >> + interconnects can be delegated to the firmware, while the remaining
> >> + responsibilities are handled by Linux.
> >> +
> >> + Decide if the target resources will be managed by firmware or High level
> >> + OS.
> >> + type: boolean
> >>
> >> resets:
> >> maxItems: 2
> >> @@ -70,14 +95,6 @@ properties:
> >> required:
> >> - compatible
> >> - reg
> >> - - clocks
> >> - - clock-names
> >> - - resets
> >> - - reset-names
> >> - - vdda-phy-supply
> >> - - vdda-pll-supply
> >> - - "#clock-cells"
> >> - - clock-output-names
> >> - "#phy-cells"
> >>
> >> allOf:
> >> @@ -86,6 +103,33 @@ allOf:
> >> compatible:
> >> contains:
> >> enum:
> >> + - qcom,sa8775p-qmp-usb3-uni-phy
> >> + - qcom,sc8280xp-qmp-usb3-uni-phy
> >> + - qcom,x1e80100-qmp-usb3-uni-phy
> >> + then:
> >> + required:
> >> + - power-domains
> >> +
> >> + - if:
> >> + not:
> >> + required:
> >> + - qmp,fw-managed
> >> + then:
> >> + required:
> >> + - clocks
> >> + - clock-names
> >> + - resets
> >> + - reset-names
> >> + - vdda-phy-supply
> >> + - vdda-pll-supply
> >> + - clock-output-names
> >> + - "#clock-cells"
> >> +
> >> + - if:
> >> + properties:
> >> + compatible:
> >> + contains:
> >> + enum:
> >> - qcom,ipq6018-qmp-usb3-phy
> >> - qcom,ipq8074-qmp-usb3-phy
> >> - qcom,ipq9574-qmp-usb3-phy
> >> @@ -144,18 +188,6 @@ allOf:
> >> - const: com_aux
> >> - const: pipe
> >>
> >> - - if:
> >> - properties:
> >> - compatible:
> >> - contains:
> >> - enum:
> >> - - qcom,sa8775p-qmp-usb3-uni-phy
> >> - - qcom,sc8280xp-qmp-usb3-uni-phy
> >> - - qcom,x1e80100-qmp-usb3-uni-phy
> >> - then:
> >> - required:
> >> - - power-domains
> >> -
> >> additionalProperties: false
> >>
> >> examples:
> >> 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 0f200e3..ad2f08f 100644
> >> --- a/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml
> >> +++ b/Documentation/devicetree/bindings/phy/qcom,usb-snps-femto-v2.yaml
> >> @@ -49,6 +49,34 @@ properties:
> >> items:
> >> - const: ref
> >>
> >> + power-domains:
> >> + description: specifies a phandle to PM domain provider node
> >> + minItems: 1
> >> + maxItems: 2
> >> +
> >> + power-domain-names:
> >> + description:
> >> + A list of power domain name strings sorted in the same order as the
> >> + power-domains property.
> >> +
> >> + For platforms where some resource are firmware managed, the name
> >> + corresponding to the index of an SCMI domain provider can be
> >> + "usb_core" or "usb_transfer".
> >> + items:
> >> + - const: usb_core
> >> + - const: usb_transfer
> >> +
> >> + hsphy,fw-managed:
> >> + description:
> >> + Some targets allow multiple resources to be managed by firmware.
> >> + On these targets, tasks related to clocks, regulators, resets, and
> >> + interconnects can be delegated to the firmware, while the remaining
> >> + responsibilities are handled by Linux.
> >> +
> >> + Decide if the target resources will be managed by firmware or High level
> >> + OS.
> >> + type: boolean
> >> +
> >> resets:
> >> items:
> >> - description: PHY core reset
> >> @@ -154,12 +182,21 @@ required:
> >> - compatible
> >> - reg
> >> - "#phy-cells"
> >> - - clocks
> >> - - clock-names
> >> - - resets
> >> - - vdda-pll-supply
> >> - - vdda18-supply
> >> - - vdda33-supply
> >> +
> >> +
> >> +allOf:
> >> + - if:
> >> + not:
> >> + required:
> >> + - hsphy,fw-managed
> >> + then:
> >> + required:
> >> + - clocks
> >> + - clock-names
> >> + - resets
> >> + - vdda-pll-supply
> >> + - vdda18-supply
> >> + - vdda33-supply
> >>
> >> additionalProperties: false
> >>
> >> diff --git a/Documentation/devicetree/bindings/usb/qcom,dwc3.yaml b/Documentation/devicetree/bindings/usb/qcom,dwc3.yaml
> >> index 63d150b..5bf3a29 100644
> >> --- a/Documentation/devicetree/bindings/usb/qcom,dwc3.yaml
> >> +++ b/Documentation/devicetree/bindings/usb/qcom,dwc3.yaml
> >> @@ -64,7 +64,31 @@ properties:
> >>
> >> power-domains:
> >> description: specifies a phandle to PM domain provider node
> >> - maxItems: 1
> >> + minItems: 1
> >> + maxItems: 2
> >> +
> >> + power-domain-names:
> >> + description:
> >> + A list of power domain name strings sorted in the same order as the
> >> + power-domains property.
> >> +
> >> + For platforms where some resource are firmware managed, the name
> >> + corresponding to the index of an SCMI domain provider can be
> >> + "usb_core" or "usb_transfer".
> >> + items:
> >> + - const: usb_core
> >> + - const: usb_transfer
> >> +
> >> + qcom,fw-managed:
> >> + description:
> >> + Some targets allow multiple resources to be managed by firmware.
> >> + On these targets, tasks related to clocks, regulators, resets, and
> >> + interconnects can be delegated to the firmware, while the remaining
> >> + responsibilities are handled by Linux.
> >> +
> >> + Decide if the target resources will be managed by firmware or High level
> >> + OS.
> >> + type: boolean
> >
> > I think this is an overkill. You know that SA8775 is going to use
> > SCMI-based clocks / PD management. Thus I'd suggest adding new
> > bindings file targeting qcom,sa8775-dwc3. Also you can drop the
> > qcom,fw-managed property at all, let the driver decide basing on the
> > compat string.
> >
> >
>
> Thank you for the suggestion Dmitry. I will include
> new compat string for SA8775 which will decide whether
> to use scmi based clock/ PD.

As a reminder:
- same hardware = same compatible string
- existing DT better to continue to work. Or ask for explicit
permission from Bjorn to break the ABI.

>
> >>
> >> required-opps:
> >> maxItems: 1
> >> @@ -148,13 +172,20 @@ required:
> >> - "#address-cells"
> >> - "#size-cells"
> >> - ranges
> >> - - clocks
> >> - - clock-names
> >> - interrupts
> >> - interrupt-names
> >>
> >> allOf:
> >> - if:
> >> + not:
> >> + required:
> >> + - qcom,fw-managed
> >> + then:
> >> + required:
> >> + - clocks
> >> + - clock-names
> >> +
> >> + - if:
> >> properties:
> >> compatible:
> >> contains:
> >> --
> >> 2.7.4
> >>
> >>
> >
> >
> > --
> > With best wishes
> > Dmitry



--
With best wishes
Dmitry