[PATCH v2 1/3] dt-bindings: add multidomain support to i.MX GPC DT binding

Lucas Stach l.stach at pengutronix.de
Tue Mar 22 06:02:31 PDT 2016


Am Freitag, den 18.03.2016, 16:25 -0500 schrieb Rob Herring:
> On Wed, Mar 16, 2016 at 12:41:52PM +0100, Lucas Stach wrote:
> > This adds a new binding for the Freescale i.MX GPC block, which allows
> > to describe multiple power domains in a more natural way. The driver
> > will continue to support the old binding for existing DTBs, but new
> > features like the additional domains present on i.MX6SX will only be
> > usable with the new binding.
> > 
> > Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> > ---
> > v2: clarify the number of interrupts (1)
> > ---
> >  .../devicetree/bindings/power/fsl,imx-gpc.txt      | 81 ++++++++++++++--------
> >  1 file changed, 54 insertions(+), 27 deletions(-)
> > 
> > diff --git a/Documentation/devicetree/bindings/power/fsl,imx-gpc.txt b/Documentation/devicetree/bindings/power/fsl,imx-gpc.txt
> > index 65cc0345747d..e5b660018d63 100644
> > --- a/Documentation/devicetree/bindings/power/fsl,imx-gpc.txt
> > +++ b/Documentation/devicetree/bindings/power/fsl,imx-gpc.txt
> > @@ -1,22 +1,41 @@
> >  Freescale i.MX General Power Controller
> >  =======================================
> >  
> > -The i.MX6Q General Power Control (GPC) block contains DVFS load tracking
> > -counters and Power Gating Control (PGC) for the CPU and PU (GPU/VPU) power
> > -domains.
> > +The i.MX6 General Power Control (GPC) block contains DVFS load tracking
> > +counters and Power Gating Control (PGC).
> >  
> >  Required properties:
> >  - compatible: Should be "fsl,imx6q-gpc" or "fsl,imx6sl-gpc"
> >  - reg: should be register base and length as documented in the
> >    datasheet
> > -- interrupts: Should contain GPC interrupt request 1
> > -- pu-supply: Link to the LDO regulator powering the PU power domain
> > -- clocks: Clock phandles to devices in the PU power domain that need
> > -	  to be enabled during domain power-up for reset propagation.
> > -- #power-domain-cells: Should be 1, see below:
> > +- interrupts: Should contain one interrupt specifier for the GPC interrupt
> > +- clocks: Must contain an entry for each entry in clock-names.
> > +  See Documentation/devicetree/bindings/clocks/clock-bindings.txt for details.
> > +- clock-names: Must include the following entries:
> > +  - ipg
> > +- pgc: a list of child nodes describing the SoC power domains controlled by the
> > +  power gating controller.
> 
> Why do you need this when you can iterate over the child nodes?
> 
The GPC has multiple functional units. One of them is the PGC (power
gating control), but it also includes DVFS functional blocks. I would
like to keep them separate also in the DT.

> >  
> > -The gpc node is a power-controller as documented by the generic power domain
> > -bindings in Documentation/devicetree/bindings/power/power_domain.txt.
> > +The power domains are generic power domain providers as documented in
> > +Documentation/devicetree/bindings/power/power_domain.txt. They are described as
> > +subnodes of the GPC and should contain the following
> > +
> > +Required properties:
> > +- reg: the DOMAIN_INDEX as used by the client devices to refer to this
> > +  power domain
> > +  The following DOMAIN_INDEX values are valid for i.MX6Q:
> > +  ARM_DOMAIN     0
> > +  PU_DOMAIN      1
> > +  The following additional DOMAIN_INDEX value is valid for i.MX6SL:
> > +  DISPLAY_DOMAIN 2
> 
> This shouldn't be needed now as cells is 0.
> 
This isn't the index to the domain cell anymore, but it redefines this
enum to be the reg index for the child nodes. We are still matching the
domains internally to add additional information, derived from the
compatible, to them. The matching requires a unique index for the domain
and rather than inventing unique names or such I've just opted to use a
simple enum. Is this okay?

> > +
> > +- #power-domain-cells: Should be 0
> > +
> > +Optional properties:
> > +- clocks: a number of phandles to clocks that need to be enabled during domain
> > +  power-up sequencing to ensure reset propagation into devices located inside
> > +  this power domain
> > +- domain-supply: a phandle to the regulator powering this domain
> >  
> >  Example:
> >  
> > @@ -25,14 +44,29 @@ Example:
> >  		reg = <0x020dc000 0x4000>;
> >  		interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>,
> >  			     <0 90 IRQ_TYPE_LEVEL_HIGH>;
> > -		pu-supply = <&reg_pu>;
> > -		clocks = <&clks IMX6QDL_CLK_GPU3D_CORE>,
> > -			 <&clks IMX6QDL_CLK_GPU3D_SHADER>,
> > -			 <&clks IMX6QDL_CLK_GPU2D_CORE>,
> > -			 <&clks IMX6QDL_CLK_GPU2D_AXI>,
> > -			 <&clks IMX6QDL_CLK_OPENVG_AXI>,
> > -			 <&clks IMX6QDL_CLK_VPU_AXI>;
> > -		#power-domain-cells = <1>;
> > +		clocks = <&clks IMX6QDL_CLK_IPG>;
> > +		clock-names = "ipg";
> > +		
> > +		pgc {
> > +			#address-cells = <1>;
> > +			#size-cells = <0>;
> > +
> > +			power-domain at 0 {
> > +				reg = <0>;
> > +				#power-domain-cells = <0>;
> > +			};
> > +			pd_pu: power-domain at 1 {
> > +				reg = <1>;
> > +				#power-domain-cells = <0>;
> > +				domain-supply = <&reg_pu>;
> > +				clocks = <&clks IMX6QDL_CLK_GPU3D_CORE>,
> > +				         <&clks IMX6QDL_CLK_GPU3D_SHADER>,
> > +				         <&clks IMX6QDL_CLK_GPU2D_CORE>,
> > +				         <&clks IMX6QDL_CLK_GPU2D_AXI>,
> > +				         <&clks IMX6QDL_CLK_OPENVG_AXI>,
> > +				         <&clks IMX6QDL_CLK_VPU_AXI>;
> > +			};
> > +		};
> >  	};
> >  
> >  
> > @@ -40,20 +74,13 @@ Specifying power domain for IP modules
> >  ======================================
> >  
> >  IP cores belonging to a power domain should contain a 'power-domains' property
> > -that is a phandle pointing to the gpc device node and a DOMAIN_INDEX specifying
> > -the power domain the device belongs to.
> > +that is a phandle pointing to the power domain the device belongs to.
> >  
> >  Example of a device that is part of the PU power domain:
> >  
> >  	vpu: vpu at 02040000 {
> >  		reg = <0x02040000 0x3c000>;
> >  		/* ... */
> > -		power-domains = <&gpc 1>;
> > +		power-domains = <&pd_pu>;
> >  		/* ... */
> >  	};
> > -
> > -The following DOMAIN_INDEX values are valid for i.MX6Q:
> > -ARM_DOMAIN     0
> > -PU_DOMAIN      1
> > -The following additional DOMAIN_INDEX value is valid for i.MX6SL:
> > -DISPLAY_DOMAIN 2
> > -- 
> > 2.7.0
> > 





More information about the linux-arm-kernel mailing list