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 |
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
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
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 :)
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 :) >
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 ;)
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
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 --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