diff mbox

[v2,1/2] drm: rcar-du: Add a VSP channel index to the vsps DT property

Message ID 20170626162930.30240-2-laurent.pinchart+renesas@ideasonboard.com (mailing list archive)
State Superseded
Commit 422641716e4434f01158bcd5e413c6f8db2d5da5
Headers show

Commit Message

Laurent Pinchart June 26, 2017, 4:29 p.m. UTC
On some R-Car SoCs a single VSP can serve multiple DU channels through
multiple LIF instances in the VSP. The current DT bindings don't support
specifying that kind of SoC integration scheme. Extend them with a VSP
channel index.

Backward compatibility can be ensured in drivers by checking the length
of the vsps property and setting the channel to 0 when the property
doesn't contain channel indices.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 .../devicetree/bindings/display/renesas,du.txt     | 51 +++++++++++++---------
 1 file changed, 30 insertions(+), 21 deletions(-)

Comments

Geert Uytterhoeven June 26, 2017, 4:36 p.m. UTC | #1
Hi Laurent,

On Mon, Jun 26, 2017 at 6:29 PM, Laurent Pinchart
<laurent.pinchart+renesas@ideasonboard.com> wrote:
> On some R-Car SoCs a single VSP can serve multiple DU channels through
> multiple LIF instances in the VSP. The current DT bindings don't support
> specifying that kind of SoC integration scheme. Extend them with a VSP
> channel index.
>
> Backward compatibility can be ensured in drivers by checking the length
> of the vsps property and setting the channel to 0 when the property
> doesn't contain channel indices.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

Thanks for your patch!

> --- a/Documentation/devicetree/bindings/display/renesas,du.txt
> +++ b/Documentation/devicetree/bindings/display/renesas,du.txt
> @@ -36,8 +36,10 @@ Required Properties:
>        When supplied they must be named "dclkin.x" with "x" being the input
>        clock numerical index.
>
> -  - vsps: A list of phandles to the VSP nodes that handle the memory
> -    interfaces for the DU channels.
> +  - vsps: A list of phandle and channel index tuples to the VSPs that handle
> +    the memory interfaces for the DU channels. The phandle identifies the VSP
> +    instance that serves the DU channel, and the channel index identifies the
> +    LIF instances in that VSP.

instance

> @@ -59,24 +61,24 @@ corresponding to each DU output.
>   R8A7796 (M3-W)        DPAD            HDMI            LVDS            -
>
>
> -Example: R8A7790 (R-Car H2) DU
> +Example: R8A7795 (R-Car H3) ES2.0 DU
>
> -       du: du@feb00000 {
> -               compatible = "renesas,du-r8a7790";
> -               reg = <0 0xfeb00000 0 0x70000>,
> -                     <0 0xfeb90000 0 0x1c>,
> -                     <0 0xfeb94000 0 0x1c>;
> -               reg-names = "du", "lvds.0", "lvds.1";
> -               interrupt-parent = <&gic>;
> -               interrupts = <0 256 IRQ_TYPE_LEVEL_HIGH>,
> -                            <0 268 IRQ_TYPE_LEVEL_HIGH>,
> -                            <0 269 IRQ_TYPE_LEVEL_HIGH>;
> -               clocks = <&mstp7_clks R8A7790_CLK_DU0>,
> -                        <&mstp7_clks R8A7790_CLK_DU1>,
> -                        <&mstp7_clks R8A7790_CLK_DU2>,
> -                        <&mstp7_clks R8A7790_CLK_LVDS0>,
> -                        <&mstp7_clks R8A7790_CLK_LVDS1>;
> -               clock-names = "du.0", "du.1", "du.2", "lvds.0", "lvds.1";
> +       du: display@feb00000 {
> +               compatible = "renesas,du-r8a7795";
> +               reg = <0 0xfeb00000 0 0x80000>,
> +                     <0 0xfeb90000 0 0x14>;
> +               reg-names = "du", "lvds.0";
> +               interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
> +                            <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
> +                            <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
> +                            <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
> +               clocks = <&cpg CPG_MOD 724>,
> +                        <&cpg CPG_MOD 723>,
> +                        <&cpg CPG_MOD 722>,
> +                        <&cpg CPG_MOD 721>,
> +                        <&cpg CPG_MOD 727>;
> +               clock-names = "du.0", "du.1", "du.2", "du.3", "lvds.0";
> +               vsps = <&vspd0 0 &vspd1 0 &vspd2 0 &vspd0 1>;

For increased readability, I suggest formatting this as:

        vsps = <&vspd0 0>, <&vspd1 0>, <&vspd2 0>, <&vspd0 1>;

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Laurent Pinchart June 26, 2017, 4:55 p.m. UTC | #2
Hi Geert,

On Monday 26 Jun 2017 18:36:14 Geert Uytterhoeven wrote:
> On Mon, Jun 26, 2017 at 6:29 PM, Laurent Pinchart wrote:
> > On some R-Car SoCs a single VSP can serve multiple DU channels through
> > multiple LIF instances in the VSP. The current DT bindings don't support
> > specifying that kind of SoC integration scheme. Extend them with a VSP
> > channel index.
> > 
> > Backward compatibility can be ensured in drivers by checking the length
> > of the vsps property and setting the channel to 0 when the property
> > doesn't contain channel indices.
> > 
> > Signed-off-by: Laurent Pinchart
> > <laurent.pinchart+renesas@ideasonboard.com>
> 
> Thanks for your patch!
> 
> > --- a/Documentation/devicetree/bindings/display/renesas,du.txt
> > +++ b/Documentation/devicetree/bindings/display/renesas,du.txt
> > 
> > @@ -36,8 +36,10 @@ Required Properties:
> >        When supplied they must be named "dclkin.x" with "x" being the
> >        input
> >        clock numerical index.
> > 
> > -  - vsps: A list of phandles to the VSP nodes that handle the memory
> > -    interfaces for the DU channels.
> > +  - vsps: A list of phandle and channel index tuples to the VSPs that
> > handle +    the memory interfaces for the DU channels. The phandle
> > identifies the VSP +    instance that serves the DU channel, and the
> > channel index identifies the +    LIF instances in that VSP.
> 
> instance
> 
> > @@ -59,24 +61,24 @@ corresponding to each DU output.
> > 
> >   R8A7796 (M3-W)        DPAD            HDMI            LVDS            -
> > 
> > -Example: R8A7790 (R-Car H2) DU
> > +Example: R8A7795 (R-Car H3) ES2.0 DU
> > 
> > -       du: du@feb00000 {
> > -               compatible = "renesas,du-r8a7790";
> > -               reg = <0 0xfeb00000 0 0x70000>,
> > -                     <0 0xfeb90000 0 0x1c>,
> > -                     <0 0xfeb94000 0 0x1c>;
> > -               reg-names = "du", "lvds.0", "lvds.1";
> > -               interrupt-parent = <&gic>;
> > -               interrupts = <0 256 IRQ_TYPE_LEVEL_HIGH>,
> > -                            <0 268 IRQ_TYPE_LEVEL_HIGH>,
> > -                            <0 269 IRQ_TYPE_LEVEL_HIGH>;
> > -               clocks = <&mstp7_clks R8A7790_CLK_DU0>,
> > -                        <&mstp7_clks R8A7790_CLK_DU1>,
> > -                        <&mstp7_clks R8A7790_CLK_DU2>,
> > -                        <&mstp7_clks R8A7790_CLK_LVDS0>,
> > -                        <&mstp7_clks R8A7790_CLK_LVDS1>;
> > -               clock-names = "du.0", "du.1", "du.2", "lvds.0", "lvds.1";
> > +       du: display@feb00000 {
> > +               compatible = "renesas,du-r8a7795";
> > +               reg = <0 0xfeb00000 0 0x80000>,
> > +                     <0 0xfeb90000 0 0x14>;
> > +               reg-names = "du", "lvds.0";
> > +               interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
> > +                            <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
> > +                            <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
> > +                            <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
> > +               clocks = <&cpg CPG_MOD 724>,
> > +                        <&cpg CPG_MOD 723>,
> > +                        <&cpg CPG_MOD 722>,
> > +                        <&cpg CPG_MOD 721>,
> > +                        <&cpg CPG_MOD 727>;
> > +               clock-names = "du.0", "du.1", "du.2", "du.3", "lvds.0";
> > +               vsps = <&vspd0 0 &vspd1 0 &vspd2 0 &vspd0 1>;
> 
> For increased readability, I suggest formatting this as:
> 
>         vsps = <&vspd0 0>, <&vspd1 0>, <&vspd2 0>, <&vspd0 1>;

Good point. I'll address both comments in v3.
Rob Herring (Arm) June 28, 2017, 11:18 p.m. UTC | #3
On Mon, Jun 26, 2017 at 07:29:29PM +0300, Laurent Pinchart wrote:
> On some R-Car SoCs a single VSP can serve multiple DU channels through
> multiple LIF instances in the VSP. The current DT bindings don't support
> specifying that kind of SoC integration scheme. Extend them with a VSP
> channel index.

"dt-bindings: display: ..." for the subject.

> 
> Backward compatibility can be ensured in drivers by checking the length
> of the vsps property and setting the channel to 0 when the property
> doesn't contain channel indices.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
>  .../devicetree/bindings/display/renesas,du.txt     | 51 +++++++++++++---------
>  1 file changed, 30 insertions(+), 21 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/renesas,du.txt b/Documentation/devicetree/bindings/display/renesas,du.txt
> index c6cb96a4fa93..89bbc7950654 100644
> --- a/Documentation/devicetree/bindings/display/renesas,du.txt
> +++ b/Documentation/devicetree/bindings/display/renesas,du.txt
> @@ -36,8 +36,10 @@ Required Properties:
>        When supplied they must be named "dclkin.x" with "x" being the input
>        clock numerical index.
>  
> -  - vsps: A list of phandles to the VSP nodes that handle the memory
> -    interfaces for the DU channels.
> +  - vsps: A list of phandle and channel index tuples to the VSPs that handle
> +    the memory interfaces for the DU channels. The phandle identifies the VSP
> +    instance that serves the DU channel, and the channel index identifies the
> +    LIF instances in that VSP.
>  
>  Required nodes:
>  
> @@ -59,24 +61,24 @@ corresponding to each DU output.
>   R8A7796 (M3-W)	DPAD		HDMI		LVDS		-
>  
>  
> -Example: R8A7790 (R-Car H2) DU
> +Example: R8A7795 (R-Car H3) ES2.0 DU
>  
> -	du: du@feb00000 {
> -		compatible = "renesas,du-r8a7790";
> -		reg = <0 0xfeb00000 0 0x70000>,
> -		      <0 0xfeb90000 0 0x1c>,
> -		      <0 0xfeb94000 0 0x1c>;
> -		reg-names = "du", "lvds.0", "lvds.1";
> -		interrupt-parent = <&gic>;
> -		interrupts = <0 256 IRQ_TYPE_LEVEL_HIGH>,
> -			     <0 268 IRQ_TYPE_LEVEL_HIGH>,
> -			     <0 269 IRQ_TYPE_LEVEL_HIGH>;
> -		clocks = <&mstp7_clks R8A7790_CLK_DU0>,
> -		         <&mstp7_clks R8A7790_CLK_DU1>,
> -		         <&mstp7_clks R8A7790_CLK_DU2>,
> -		         <&mstp7_clks R8A7790_CLK_LVDS0>,
> -		         <&mstp7_clks R8A7790_CLK_LVDS1>;
> -		clock-names = "du.0", "du.1", "du.2", "lvds.0", "lvds.1";
> +	du: display@feb00000 {
> +		compatible = "renesas,du-r8a7795";
> +		reg = <0 0xfeb00000 0 0x80000>,
> +		      <0 0xfeb90000 0 0x14>;
> +		reg-names = "du", "lvds.0";
> +		interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
> +			     <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
> +			     <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
> +			     <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
> +		clocks = <&cpg CPG_MOD 724>,
> +			 <&cpg CPG_MOD 723>,
> +			 <&cpg CPG_MOD 722>,
> +			 <&cpg CPG_MOD 721>,
> +			 <&cpg CPG_MOD 727>;
> +		clock-names = "du.0", "du.1", "du.2", "du.3", "lvds.0";
> +		vsps = <&vspd0 0 &vspd1 0 &vspd2 0 &vspd0 1>;
>  
>  		ports {
>  			#address-cells = <1>;
> @@ -89,12 +91,19 @@ Example: R8A7790 (R-Car H2) DU
>  			};
>  			port@1 {
>  				reg = <1>;
> -				du_out_lvds0: endpoint {
> +				du_out_hdmi0: endpoint {
> +					remote-endpoint = <&dw_hdmi0_in>;
>  				};
>  			};
>  			port@2 {
>  				reg = <2>;
> -				du_out_lvds1: endpoint {
> +				du_out_hdmi1: endpoint {
> +					remote-endpoint = <&dw_hdmi1_in>;
> +				};
> +			};
> +			port@3 {

Shouldn't a new port be documented somewhere?

> +				reg = <3>;
> +				du_out_lvds0: endpoint {
>  				};
>  			};
>  		};
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Laurent Pinchart June 29, 2017, 9:42 a.m. UTC | #4
Hi Rob,

On Wednesday 28 Jun 2017 18:18:07 Rob Herring wrote:
> On Mon, Jun 26, 2017 at 07:29:29PM +0300, Laurent Pinchart wrote:
> > On some R-Car SoCs a single VSP can serve multiple DU channels through
> > multiple LIF instances in the VSP. The current DT bindings don't support
> > specifying that kind of SoC integration scheme. Extend them with a VSP
> > channel index.
> 
> "dt-bindings: display: ..." for the subject.

Sorry, I'll fix that.

> > Backward compatibility can be ensured in drivers by checking the length
> > of the vsps property and setting the channel to 0 when the property
> > doesn't contain channel indices.
> > 
> > Signed-off-by: Laurent Pinchart
> > <laurent.pinchart+renesas@ideasonboard.com>
> > ---
> > 
> >  .../devicetree/bindings/display/renesas,du.txt     | 51 +++++++++-------
> >  1 file changed, 30 insertions(+), 21 deletions(-)
> > 
> > diff --git a/Documentation/devicetree/bindings/display/renesas,du.txt
> > b/Documentation/devicetree/bindings/display/renesas,du.txt index
> > c6cb96a4fa93..89bbc7950654 100644
> > --- a/Documentation/devicetree/bindings/display/renesas,du.txt
> > +++ b/Documentation/devicetree/bindings/display/renesas,du.txt
> > 
> > @@ -36,8 +36,10 @@ Required Properties:
> >        When supplied they must be named "dclkin.x" with "x" being the
> >        input
> >        clock numerical index.
> > 
> > -  - vsps: A list of phandles to the VSP nodes that handle the memory
> > -    interfaces for the DU channels.
> > +  - vsps: A list of phandle and channel index tuples to the VSPs that
> > handle
> > +    the memory interfaces for the DU channels. The phandle identifies the
> > VSP
> > +    instance that serves the DU channel, and the channel index identifies
> > the
> > +    LIF instances in that VSP.
> > 
> >  Required nodes:
> > @@ -59,24 +61,24 @@ corresponding to each DU output.
> > 
> >   R8A7796 (M3-W)	DPAD		HDMI		LVDS		-
> > 
> > -Example: R8A7790 (R-Car H2) DU
> > +Example: R8A7795 (R-Car H3) ES2.0 DU
> > 
> > -	du: du@feb00000 {
> > -		compatible = "renesas,du-r8a7790";
> > -		reg = <0 0xfeb00000 0 0x70000>,
> > -		      <0 0xfeb90000 0 0x1c>,
> > -		      <0 0xfeb94000 0 0x1c>;
> > -		reg-names = "du", "lvds.0", "lvds.1";
> > -		interrupt-parent = <&gic>;
> > -		interrupts = <0 256 IRQ_TYPE_LEVEL_HIGH>,
> > -			     <0 268 IRQ_TYPE_LEVEL_HIGH>,
> > -			     <0 269 IRQ_TYPE_LEVEL_HIGH>;
> > -		clocks = <&mstp7_clks R8A7790_CLK_DU0>,
> > -		         <&mstp7_clks R8A7790_CLK_DU1>,
> > -		         <&mstp7_clks R8A7790_CLK_DU2>,
> > -		         <&mstp7_clks R8A7790_CLK_LVDS0>,
> > -		         <&mstp7_clks R8A7790_CLK_LVDS1>;
> > -		clock-names = "du.0", "du.1", "du.2", "lvds.0", "lvds.1";
> > +	du: display@feb00000 {
> > +		compatible = "renesas,du-r8a7795";
> > +		reg = <0 0xfeb00000 0 0x80000>,
> > +		      <0 0xfeb90000 0 0x14>;
> > +		reg-names = "du", "lvds.0";
> > +		interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
> > +			     <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
> > +			     <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
> > +			     <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
> > +		clocks = <&cpg CPG_MOD 724>,
> > +			 <&cpg CPG_MOD 723>,
> > +			 <&cpg CPG_MOD 722>,
> > +			 <&cpg CPG_MOD 721>,
> > +			 <&cpg CPG_MOD 727>;
> > +		clock-names = "du.0", "du.1", "du.2", "du.3", "lvds.0";
> > +		vsps = <&vspd0 0 &vspd1 0 &vspd2 0 &vspd0 1>;
> > 
> >  		ports {
> >  			#address-cells = <1>;
> > @@ -89,12 +91,19 @@ Example: R8A7790 (R-Car H2) DU
> >  			};
> >  			port@1 {
> >  				reg = <1>;
> > -				du_out_lvds0: endpoint {
> > +				du_out_hdmi0: endpoint {
> > +					remote-endpoint = <&dw_hdmi0_in>;
> >  				};
> >  			};
> >  			port@2 {
> >  				reg = <2>;
> > -				du_out_lvds1: endpoint {
> > +				du_out_hdmi1: endpoint {
> > +					remote-endpoint = <&dw_hdmi1_in>;
> > +				};
> > +			};
> > +			port@3 {
> 
> Shouldn't a new port be documented somewhere?

I've replaced the R8A7790-based example with one based on the R8A7795, as it 
gives a better idea of how to use the vsps property. Port 3 is already defined 
for the R8A7795 earlier in this file.

                Port 0          Port1           Port2           Port3
-----------------------------------------------------------------------------
 ...
 R8A7790 (H2)   DPAD            LVDS 0          LVDS 1          -
 ...
 R8A7795 (H3)   DPAD            HDMI 0          HDMI 1          LVDS

> > +				reg = <3>;
> > +				du_out_lvds0: endpoint {
> > 
> >  				};
> >  			
> >  			};
> >  		
> >  		};
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/display/renesas,du.txt b/Documentation/devicetree/bindings/display/renesas,du.txt
index c6cb96a4fa93..89bbc7950654 100644
--- a/Documentation/devicetree/bindings/display/renesas,du.txt
+++ b/Documentation/devicetree/bindings/display/renesas,du.txt
@@ -36,8 +36,10 @@  Required Properties:
       When supplied they must be named "dclkin.x" with "x" being the input
       clock numerical index.
 
-  - vsps: A list of phandles to the VSP nodes that handle the memory
-    interfaces for the DU channels.
+  - vsps: A list of phandle and channel index tuples to the VSPs that handle
+    the memory interfaces for the DU channels. The phandle identifies the VSP
+    instance that serves the DU channel, and the channel index identifies the
+    LIF instances in that VSP.
 
 Required nodes:
 
@@ -59,24 +61,24 @@  corresponding to each DU output.
  R8A7796 (M3-W)	DPAD		HDMI		LVDS		-
 
 
-Example: R8A7790 (R-Car H2) DU
+Example: R8A7795 (R-Car H3) ES2.0 DU
 
-	du: du@feb00000 {
-		compatible = "renesas,du-r8a7790";
-		reg = <0 0xfeb00000 0 0x70000>,
-		      <0 0xfeb90000 0 0x1c>,
-		      <0 0xfeb94000 0 0x1c>;
-		reg-names = "du", "lvds.0", "lvds.1";
-		interrupt-parent = <&gic>;
-		interrupts = <0 256 IRQ_TYPE_LEVEL_HIGH>,
-			     <0 268 IRQ_TYPE_LEVEL_HIGH>,
-			     <0 269 IRQ_TYPE_LEVEL_HIGH>;
-		clocks = <&mstp7_clks R8A7790_CLK_DU0>,
-		         <&mstp7_clks R8A7790_CLK_DU1>,
-		         <&mstp7_clks R8A7790_CLK_DU2>,
-		         <&mstp7_clks R8A7790_CLK_LVDS0>,
-		         <&mstp7_clks R8A7790_CLK_LVDS1>;
-		clock-names = "du.0", "du.1", "du.2", "lvds.0", "lvds.1";
+	du: display@feb00000 {
+		compatible = "renesas,du-r8a7795";
+		reg = <0 0xfeb00000 0 0x80000>,
+		      <0 0xfeb90000 0 0x14>;
+		reg-names = "du", "lvds.0";
+		interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&cpg CPG_MOD 724>,
+			 <&cpg CPG_MOD 723>,
+			 <&cpg CPG_MOD 722>,
+			 <&cpg CPG_MOD 721>,
+			 <&cpg CPG_MOD 727>;
+		clock-names = "du.0", "du.1", "du.2", "du.3", "lvds.0";
+		vsps = <&vspd0 0 &vspd1 0 &vspd2 0 &vspd0 1>;
 
 		ports {
 			#address-cells = <1>;
@@ -89,12 +91,19 @@  Example: R8A7790 (R-Car H2) DU
 			};
 			port@1 {
 				reg = <1>;
-				du_out_lvds0: endpoint {
+				du_out_hdmi0: endpoint {
+					remote-endpoint = <&dw_hdmi0_in>;
 				};
 			};
 			port@2 {
 				reg = <2>;
-				du_out_lvds1: endpoint {
+				du_out_hdmi1: endpoint {
+					remote-endpoint = <&dw_hdmi1_in>;
+				};
+			};
+			port@3 {
+				reg = <3>;
+				du_out_lvds0: endpoint {
 				};
 			};
 		};