# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2 --- $id: http://devicetree.org/schemas/power/mediatek,power-controller.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: Mediatek Power Domains Controller maintainers: - Weiyi Lu - Matthias Brugger description: | Mediatek processors include support for multiple power domains which can be powered up/down by software based on different application scenes to save power. IP cores belonging to a power domain should contain a 'power-domains' property that is a phandle for SCPSYS node representing the domain. properties: $nodename: const: power-controller compatible: enum: - mediatek,mt6795-power-controller - mediatek,mt8167-power-controller - mediatek,mt8173-power-controller - mediatek,mt8183-power-controller - mediatek,mt8186-power-controller - mediatek,mt8192-power-controller - mediatek,mt8195-power-controller '#power-domain-cells': const: 1 '#address-cells': const: 1 '#size-cells': const: 0 patternProperties: "^power-domain@[0-9a-f]+$": type: object description: | Represents the power domains within the power controller node as documented in Documentation/devicetree/bindings/power/power-domain.yaml. properties: '#power-domain-cells': description: Must be 0 for nodes representing a single PM domain and 1 for nodes providing multiple PM domains. '#address-cells': const: 1 '#size-cells': const: 0 reg: description: | Power domain index. Valid values are defined in: "include/dt-bindings/power/mt6795-power.h" - for MT8167 type power domain. "include/dt-bindings/power/mt8167-power.h" - for MT8167 type power domain. "include/dt-bindings/power/mt8173-power.h" - for MT8173 type power domain. "include/dt-bindings/power/mt8183-power.h" - for MT8183 type power domain. "include/dt-bindings/power/mt8192-power.h" - for MT8192 type power domain. "include/dt-bindings/power/mt8195-power.h" - for MT8195 type power domain. maxItems: 1 clocks: description: | A number of phandles to clocks that need to be enabled during domain power-up sequencing. clock-names: description: | List of names of clocks, in order to match the power-up sequencing for each power domain we need to group the clocks by name. BASIC clocks need to be enabled before enabling the corresponding power domain, and should not have a '-' in their name (i.e mm, mfg, venc). SUSBYS clocks need to be enabled before releasing the bus protection, and should contain a '-' in their name (i.e mm-0, isp-0, cam-0). In order to follow properly the power-up sequencing, the clocks must be specified by order, adding first the BASIC clocks followed by the SUSBSYS clocks. domain-supply: description: domain regulator supply. mediatek,infracfg: $ref: /schemas/types.yaml#/definitions/phandle description: phandle to the device containing the INFRACFG register range. mediatek,smi: $ref: /schemas/types.yaml#/definitions/phandle description: phandle to the device containing the SMI register range. patternProperties: "^power-domain@[0-9a-f]+$": type: object description: | Represents a power domain child within a power domain parent node. properties: '#power-domain-cells': description: Must be 0 for nodes representing a single PM domain and 1 for nodes providing multiple PM domains. '#address-cells': const: 1 '#size-cells': const: 0 reg: maxItems: 1 clocks: description: | A number of phandles to clocks that need to be enabled during domain power-up sequencing. clock-names: description: | List of names of clocks, in order to match the power-up sequencing for each power domain we need to group the clocks by name. BASIC clocks need to be enabled before enabling the corresponding power domain, and should not have a '-' in their name (i.e mm, mfg, venc). SUSBYS clocks need to be enabled before releasing the bus protection, and should contain a '-' in their name (i.e mm-0, isp-0, cam-0). In order to follow properly the power-up sequencing, the clocks must be specified by order, adding first the BASIC clocks followed by the SUSBSYS clocks. domain-supply: description: domain regulator supply. mediatek,infracfg: $ref: /schemas/types.yaml#/definitions/phandle description: phandle to the device containing the INFRACFG register range. mediatek,smi: $ref: /schemas/types.yaml#/definitions/phandle description: phandle to the device containing the SMI register range. patternProperties: "^power-domain@[0-9a-f]+$": type: object description: | Represents a power domain child within a power domain parent node. properties: '#power-domain-cells': description: Must be 0 for nodes representing a single PM domain and 1 for nodes providing multiple PM domains. '#address-cells': const: 1 '#size-cells': const: 0 reg: maxItems: 1 clocks: description: | A number of phandles to clocks that need to be enabled during domain power-up sequencing. clock-names: description: | List of names of clocks, in order to match the power-up sequencing for each power domain we need to group the clocks by name. BASIC clocks need to be enabled before enabling the corresponding power domain, and should not have a '-' in their name (i.e mm, mfg, venc). SUSBYS clocks need to be enabled before releasing the bus protection, and should contain a '-' in their name (i.e mm-0, isp-0, cam-0). In order to follow properly the power-up sequencing, the clocks must be specified by order, adding first the BASIC clocks followed by the SUSBSYS clocks. domain-supply: description: domain regulator supply. mediatek,infracfg: $ref: /schemas/types.yaml#/definitions/phandle description: phandle to the device containing the INFRACFG register range. mediatek,smi: $ref: /schemas/types.yaml#/definitions/phandle description: phandle to the device containing the SMI register range. required: - reg additionalProperties: false required: - reg additionalProperties: false required: - reg additionalProperties: false required: - compatible additionalProperties: false examples: - | #include #include soc { #address-cells = <2>; #size-cells = <2>; scpsys: syscon@10006000 { compatible = "mediatek,mt8173-scpsys", "syscon", "simple-mfd"; reg = <0 0x10006000 0 0x1000>; spm: power-controller { compatible = "mediatek,mt8173-power-controller"; #address-cells = <1>; #size-cells = <0>; #power-domain-cells = <1>; /* power domains of the SoC */ power-domain@MT8173_POWER_DOMAIN_VDEC { reg = ; clocks = <&topckgen CLK_TOP_MM_SEL>; clock-names = "mm"; #power-domain-cells = <0>; }; power-domain@MT8173_POWER_DOMAIN_VENC { reg = ; clocks = <&topckgen CLK_TOP_MM_SEL>, <&topckgen CLK_TOP_VENC_SEL>; clock-names = "mm", "venc"; #power-domain-cells = <0>; }; power-domain@MT8173_POWER_DOMAIN_ISP { reg = ; clocks = <&topckgen CLK_TOP_MM_SEL>; clock-names = "mm"; #power-domain-cells = <0>; }; power-domain@MT8173_POWER_DOMAIN_MM { reg = ; clocks = <&topckgen CLK_TOP_MM_SEL>; clock-names = "mm"; #power-domain-cells = <0>; mediatek,infracfg = <&infracfg>; }; power-domain@MT8173_POWER_DOMAIN_VENC_LT { reg = ; clocks = <&topckgen CLK_TOP_MM_SEL>, <&topckgen CLK_TOP_VENC_LT_SEL>; clock-names = "mm", "venclt"; #power-domain-cells = <0>; }; power-domain@MT8173_POWER_DOMAIN_AUDIO { reg = ; #power-domain-cells = <0>; }; power-domain@MT8173_POWER_DOMAIN_USB { reg = ; #power-domain-cells = <0>; }; power-domain@MT8173_POWER_DOMAIN_MFG_ASYNC { reg = ; clocks = <&clk26m>; clock-names = "mfg"; #address-cells = <1>; #size-cells = <0>; #power-domain-cells = <1>; power-domain@MT8173_POWER_DOMAIN_MFG_2D { reg = ; #address-cells = <1>; #size-cells = <0>; #power-domain-cells = <1>; power-domain@MT8173_POWER_DOMAIN_MFG { reg = ; #power-domain-cells = <0>; mediatek,infracfg = <&infracfg>; }; }; }; }; }; };