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

From: Dmitry Baryshkov
Date: Tue Mar 05 2024 - 14:04:03 EST


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.


>
> 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