diff mbox series

[v4,2/3] dt-bindings: arm: mediatek: mmsys: Add OF graph support for board path

Message ID 20240516081104.83458-3-angelogioacchino.delregno@collabora.com (mailing list archive)
State New, archived
Headers show
Series drm/mediatek: Add support for OF graphs | expand

Commit Message

AngeloGioacchino Del Regno May 16, 2024, 8:11 a.m. UTC
Document OF graph on MMSYS/VDOSYS: this supports up to three DDP paths
per HW instance (so potentially up to six displays for multi-vdo SoCs).

The MMSYS or VDOSYS is always the first component in the DDP pipeline,
so it only supports an output port with multiple endpoints - where each
endpoint defines the starting point for one of the (currently three)
possible hardware paths.

Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
---
 .../bindings/arm/mediatek/mediatek,mmsys.yaml | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)

Comments

CK Hu (胡俊光) May 16, 2024, 9:23 a.m. UTC | #1
Hi, Angelo:

On Thu, 2024-05-16 at 10:11 +0200, AngeloGioacchino Del Regno wrote:
> Document OF graph on MMSYS/VDOSYS: this supports up to three DDP paths
> per HW instance (so potentially up to six displays for multi-vdo SoCs).
> 
> The MMSYS or VDOSYS is always the first component in the DDP pipeline,
> so it only supports an output port with multiple endpoints - where each
> endpoint defines the starting point for one of the (currently three)
> possible hardware paths.
> 
> Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> ---
>  .../bindings/arm/mediatek/mediatek,mmsys.yaml | 28 +++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
> index b3c6888c1457..0ef67ca4122b 100644
> --- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
> @@ -93,6 +93,34 @@ properties:
>    '#reset-cells':
>      const: 1
>  
> +  port:
> +    $ref: /schemas/graph.yaml#/properties/port
> +    description:
> +      Output port node. This port connects the MMSYS/VDOSYS output to
> +      the first component of one display pipeline, for example one of
> +      the available OVL or RDMA blocks.
> +      Some MediaTek SoCs support multiple display outputs per MMSYS.

The display pipeline number usually depend on how many display interface. Display interface is in the end of pipeline.

In below case, two RDMA is merged into one pipeline and output to one display interface DP_INTF. This is usually ONE display.

RDMA -+
      Merge -> ... -> DP_INTF
RDMA -+

In below case, one RDMA data output to two display interface DSI and DPI. This is usually TWO display with the same content.

               +-> DSI
RDMA -> ... -> +
               +-> DPI

So the display pipeline number does not depend on the number of first component. It usually depend on the number of display interface.

Regards,
CK


> +    properties:
> +      endpoint@0:
> +        $ref: /schemas/graph.yaml#/properties/endpoint
> +        description: Output to the primary display pipeline
> +
> +      endpoint@1:
> +        $ref: /schemas/graph.yaml#/properties/endpoint
> +        description: Output to the secondary display pipeline
> +
> +      endpoint@2:
> +        $ref: /schemas/graph.yaml#/properties/endpoint
> +        description: Output to the tertiary display pipeline
> +
> +    oneOf:
> +      - required:
> +          - endpoint@0
> +      - required:
> +          - endpoint@1
> +      - required:
> +          - endpoint@2
> +
>  required:
>    - compatible
>    - reg
AngeloGioacchino Del Regno May 16, 2024, 9:42 a.m. UTC | #2
Il 16/05/24 11:23, CK Hu (胡俊光) ha scritto:
> Hi, Angelo:
> 
> On Thu, 2024-05-16 at 10:11 +0200, AngeloGioacchino Del Regno wrote:
>> Document OF graph on MMSYS/VDOSYS: this supports up to three DDP paths
>> per HW instance (so potentially up to six displays for multi-vdo SoCs).
>>
>> The MMSYS or VDOSYS is always the first component in the DDP pipeline,
>> so it only supports an output port with multiple endpoints - where each
>> endpoint defines the starting point for one of the (currently three)
>> possible hardware paths.
>>
>> Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
>> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>> ---
>>   .../bindings/arm/mediatek/mediatek,mmsys.yaml | 28 +++++++++++++++++++
>>   1 file changed, 28 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
>> index b3c6888c1457..0ef67ca4122b 100644
>> --- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
>> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
>> @@ -93,6 +93,34 @@ properties:
>>     '#reset-cells':
>>       const: 1
>>   
>> +  port:
>> +    $ref: /schemas/graph.yaml#/properties/port
>> +    description:
>> +      Output port node. This port connects the MMSYS/VDOSYS output to
>> +      the first component of one display pipeline, for example one of
>> +      the available OVL or RDMA blocks.
>> +      Some MediaTek SoCs support multiple display outputs per MMSYS.
> 
> The display pipeline number usually depend on how many display interface. Display interface is in the end of pipeline.
> 

I have never stated that the display pipeline number depends on that.

Plus, the display interface is not described in the mmsys binding: this document
is only saying that mmsys' endpoint is to be connected to a (supported) component
of your choice. Nothing else.

> In below case, two RDMA is merged into one pipeline and output to one display interface DP_INTF. This is usually ONE display.
> 
> RDMA -+
>        Merge -> ... -> DP_INTF
> RDMA -+
> 
> In below case, one RDMA data output to two display interface DSI and DPI. This is usually TWO display with the same content.
> 
>                 +-> DSI
> RDMA -> ... -> +
>                 +-> DPI
> 

The actual content of a display is a software capability - if the hardware supports
that, and some MediaTek SoCs do, the connection does not happen at the endpoint of
mmsys, but later.

> So the display pipeline number does not depend on the number of first component. It usually depend on the number of display interface.
> 

I sure agree with that, but again, I have *never stated* that the display pipeline
number depends on the number of the first component.

> Regards,
> CK
> 
> 
>> +    properties:
>> +      endpoint@0:
>> +        $ref: /schemas/graph.yaml#/properties/endpoint
>> +        description: Output to the primary display pipeline
>> +
>> +      endpoint@1:
>> +        $ref: /schemas/graph.yaml#/properties/endpoint
>> +        description: Output to the secondary display pipeline
>> +
>> +      endpoint@2:
>> +        $ref: /schemas/graph.yaml#/properties/endpoint
>> +        description: Output to the tertiary display pipeline
>> +
>> +    oneOf:
>> +      - required:
>> +          - endpoint@0
>> +      - required:
>> +          - endpoint@1
>> +      - required:
>> +          - endpoint@2
>> +
>>   required:
>>     - compatible
>>     - reg
Alexandre Mergnat May 19, 2024, 5:18 p.m. UTC | #3
Hi Angelo,

On 16/05/2024 10:11, AngeloGioacchino Del Regno wrote:
> +    oneOf:
> +      - required:
> +          - endpoint@0
> +      - required:
> +          - endpoint@1
> +      - required:
> +          - endpoint@2

I'm not sure this is what you expect because I must remove this part to pass the dt-validate.

I have 2 possible display at the same time (DSI and DPI), then I add this in my DTSI:

		mmsys: syscon@14000000 {
			compatible = "mediatek,mt8365-mmsys", "syscon";
			reg = <0 0x14000000 0 0x1000>;
			#clock-cells = <1>;
			port {
				#address-cells = <1>;
				#size-cells = <0>;

				mmsys_main: endpoint@0 {
					reg = <0>;
					remote-endpoint = <&ovl0_in>;
				};
				mmsys_ext: endpoint@1 {
					reg = <1>;
					remote-endpoint = <&rdma1_in>;
				};
			};
		};

But the DTS check returns me an error:

dt-validate -s Documentation/devicetree/bindings arch/arm64/boot/dts/mediatek/mt8365-evk.dtb
/home/*******/linux-upstream/arch/arm64/boot/dts/mediatek/mt8365-evk.dtb: syscon@14000000: port: 
More than one condition true in oneOf schema:
         {'$ref': '/schemas/graph.yaml#/properties/port', 

          'oneOf': [{'required': ['endpoint@0']}, 

                    {'required': ['endpoint@1']}, 

                    {'required': ['endpoint@2']}], 

          'properties': {'endpoint@0': {'$ref': '/schemas/graph.yaml#/properties/endpoint'}, 

                         'endpoint@1': {'$ref': '/schemas/graph.yaml#/properties/endpoint'},
                         'endpoint@2': {'$ref': '/schemas/graph.yaml#/properties/endpoint'}}} 

         from schema $id: http://devicetree.org/schemas/arm/mediatek/mediatek,mmsys.yaml#


In other hand, if I use "ports" to keep only one endpoint for each port:

		mmsys: syscon@14000000 {
			compatible = "mediatek,mt8365-mmsys", "syscon";
			reg = <0 0x14000000 0 0x1000>;
			#clock-cells = <1>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;

				port@0 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <0>;
					mmsys_main: endpoint@0 {
						reg = <0>;
						remote-endpoint = <&ovl0_in>;
					};
				};

				port@1 {
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <1>;
					mmsys_ext: endpoint@1 {
						reg = <1>;
						remote-endpoint = <&rdma1_in>;
					};
				};
			};
		};

The DTS check returns another error:

dt-validate -s Documentation/devicetree/bindings arch/arm64/boot/dts/mediatek/mt8365-evk.dtb
/home/*******/linux-upstream/arch/arm64/boot/dts/mediatek/mt8365-evk.dtb: syscon@14000000: 'ports' 
does not match any of the regexes: 'pinctrl-[0-9]+'
         from schema $id: http://devicetree.org/schemas/arm/mediatek/mediatek,mmsys.yaml#

Additionally, with the last DTS example, displays aren't working, probably because "ports" isn't 
well parsed.

So, I don't know how you want to manage multiple display, but IMHO there are 2 ways:
- removing the current "oneOf".
- adding the "ports" support in the documentation and driver (to be parsed).

Still possible I missed something and I doing shit :)
AngeloGioacchino Del Regno May 20, 2024, 10:53 a.m. UTC | #4
Il 19/05/24 19:18, Alexandre Mergnat ha scritto:
> Hi Angelo,
> 
> On 16/05/2024 10:11, AngeloGioacchino Del Regno wrote:
>> +    oneOf:
>> +      - required:
>> +          - endpoint@0
>> +      - required:
>> +          - endpoint@1
>> +      - required:
>> +          - endpoint@2
> 
> I'm not sure this is what you expect because I must remove this part to pass the 
> dt-validate.
> 
> I have 2 possible display at the same time (DSI and DPI), then I add this in my DTSI:
> 
>          mmsys: syscon@14000000 {
>              compatible = "mediatek,mt8365-mmsys", "syscon";
>              reg = <0 0x14000000 0 0x1000>;
>              #clock-cells = <1>;
>              port {
>                  #address-cells = <1>;
>                  #size-cells = <0>;
> 
>                  mmsys_main: endpoint@0 {
>                      reg = <0>;
>                      remote-endpoint = <&ovl0_in>;
>                  };
>                  mmsys_ext: endpoint@1 {
>                      reg = <1>;
>                      remote-endpoint = <&rdma1_in>;
>                  };
>              };
>          };
> 
> But the DTS check returns me an error:
> 
> dt-validate -s Documentation/devicetree/bindings 
> arch/arm64/boot/dts/mediatek/mt8365-evk.dtb
> /home/*******/linux-upstream/arch/arm64/boot/dts/mediatek/mt8365-evk.dtb: 
> syscon@14000000: port: More than one condition true in oneOf schema:
>          {'$ref': '/schemas/graph.yaml#/properties/port',
>           'oneOf': [{'required': ['endpoint@0']},
>                     {'required': ['endpoint@1']},
>                     {'required': ['endpoint@2']}],
>           'properties': {'endpoint@0': {'$ref': 
> '/schemas/graph.yaml#/properties/endpoint'},
>                          'endpoint@1': {'$ref': 
> '/schemas/graph.yaml#/properties/endpoint'},
>                          'endpoint@2': {'$ref': 
> '/schemas/graph.yaml#/properties/endpoint'}}}
>          from schema $id: 
> http://devicetree.org/schemas/arm/mediatek/mediatek,mmsys.yaml#
> 
> 
> In other hand, if I use "ports" to keep only one endpoint for each port:
> 
>          mmsys: syscon@14000000 {
>              compatible = "mediatek,mt8365-mmsys", "syscon";
>              reg = <0 0x14000000 0 0x1000>;
>              #clock-cells = <1>;
>              ports {
>                  #address-cells = <1>;
>                  #size-cells = <0>;
> 
>                  port@0 {
>                      #address-cells = <1>;
>                      #size-cells = <0>;
>                      reg = <0>;
>                      mmsys_main: endpoint@0 {
>                          reg = <0>;
>                          remote-endpoint = <&ovl0_in>;
>                      };
>                  };
> 
>                  port@1 {
>                      #address-cells = <1>;
>                      #size-cells = <0>;
>                      reg = <1>;
>                      mmsys_ext: endpoint@1 {
>                          reg = <1>;
>                          remote-endpoint = <&rdma1_in>;
>                      };
>                  };
>              };
>          };
> 
> The DTS check returns another error:
> 
> dt-validate -s Documentation/devicetree/bindings 
> arch/arm64/boot/dts/mediatek/mt8365-evk.dtb
> /home/*******/linux-upstream/arch/arm64/boot/dts/mediatek/mt8365-evk.dtb: 
> syscon@14000000: 'ports' does not match any of the regexes: 'pinctrl-[0-9]+'
>          from schema $id: 
> http://devicetree.org/schemas/arm/mediatek/mediatek,mmsys.yaml#
> 
> Additionally, with the last DTS example, displays aren't working, probably because 
> "ports" isn't well parsed.
> 
> So, I don't know how you want to manage multiple display, but IMHO there are 2 ways:
> - removing the current "oneOf".

...eh I think this should be anyOf instead :-)

I'll check later and send a v5.

Cheers,
Angelo

> - adding the "ports" support in the documentation and driver (to be parsed).
> 
> Still possible I missed something and I doing shit :)
>
Alexandre Mergnat May 20, 2024, 11:49 a.m. UTC | #5
On 20/05/2024 12:53, AngeloGioacchino Del Regno wrote:
>> So, I don't know how you want to manage multiple display, but IMHO there are 2 ways:
>> - removing the current "oneOf".
> 
> ...eh I think this should be anyOf instead :-)
> 
> I'll check later and send a v5.

"anyOf" behavior works as expected on my side, dt-validate pass ;)
AngeloGioacchino Del Regno May 20, 2024, 11:55 a.m. UTC | #6
Il 20/05/24 13:49, Alexandre Mergnat ha scritto:
> 
> 
> On 20/05/2024 12:53, AngeloGioacchino Del Regno wrote:
>>> So, I don't know how you want to manage multiple display, but IMHO there are 2 
>>> ways:
>>> - removing the current "oneOf".
>>
>> ...eh I think this should be anyOf instead :-)
>>
>> I'll check later and send a v5.
> 
> "anyOf" behavior works as expected on my side, dt-validate pass ;)
> 

Hey, thanks for the test, buys me some important time.

Cheers!
Angelo
Alexandre Mergnat May 20, 2024, 3:33 p.m. UTC | #7
On 20/05/2024 13:55, AngeloGioacchino Del Regno wrote:
> Il 20/05/24 13:49, Alexandre Mergnat ha scritto:
>>
>>
>> On 20/05/2024 12:53, AngeloGioacchino Del Regno wrote:
>>>> So, I don't know how you want to manage multiple display, but IMHO there are 2 ways:
>>>> - removing the current "oneOf".
>>>
>>> ...eh I think this should be anyOf instead :-)
>>>
>>> I'll check later and send a v5.
>>
>> "anyOf" behavior works as expected on my side, dt-validate pass ;)
>>
> 
> Hey, thanks for the test, buys me some important time.

You're welcome, after that:

Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>
Tested-by: Alexandre Mergnat <amergnat@baylibre.com>
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
index b3c6888c1457..0ef67ca4122b 100644
--- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
+++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml
@@ -93,6 +93,34 @@  properties:
   '#reset-cells':
     const: 1
 
+  port:
+    $ref: /schemas/graph.yaml#/properties/port
+    description:
+      Output port node. This port connects the MMSYS/VDOSYS output to
+      the first component of one display pipeline, for example one of
+      the available OVL or RDMA blocks.
+      Some MediaTek SoCs support multiple display outputs per MMSYS.
+    properties:
+      endpoint@0:
+        $ref: /schemas/graph.yaml#/properties/endpoint
+        description: Output to the primary display pipeline
+
+      endpoint@1:
+        $ref: /schemas/graph.yaml#/properties/endpoint
+        description: Output to the secondary display pipeline
+
+      endpoint@2:
+        $ref: /schemas/graph.yaml#/properties/endpoint
+        description: Output to the tertiary display pipeline
+
+    oneOf:
+      - required:
+          - endpoint@0
+      - required:
+          - endpoint@1
+      - required:
+          - endpoint@2
+
 required:
   - compatible
   - reg