On Wed, Sep 30, 2015 at 10:30 AM, Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> wrote: > Am Freitag, den 18.09.2015, 15:33 -0500 schrieb Rob Herring: >> On Fri, Sep 18, 2015 at 11:11 AM, Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> wrote: >> > From: CK Hu <ck.hu@xxxxxxxxxxxx> >> > >> > Add device tree binding documentation for the display subsystem in >> > Mediatek MT8173 SoCs. >> > >> > Signed-off-by: CK Hu <ck.hu@xxxxxxxxxxxx> >> > Signed-off-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> >> > --- >> > .../bindings/drm/mediatek/mediatek,disp.txt | 131 +++++++++++++++++++++ >> > .../bindings/drm/mediatek/mediatek,dsi.txt | 29 +++++ >> > 2 files changed, 160 insertions(+) >> > create mode 100644 Documentation/devicetree/bindings/drm/mediatek/mediatek,disp.txt >> > create mode 100644 Documentation/devicetree/bindings/drm/mediatek/mediatek,dsi.txt >> > >> > diff --git a/Documentation/devicetree/bindings/drm/mediatek/mediatek,disp.txt b/Documentation/devicetree/bindings/drm/mediatek/mediatek,disp.txt >> > new file mode 100644 >> > index 0000000..a3811bd >> > --- /dev/null >> > +++ b/Documentation/devicetree/bindings/drm/mediatek/mediatek,disp.txt >> > @@ -0,0 +1,131 @@ >> > +Mediatek display subsystem >> > +========================== >> > + >> > +The Mediatek display subsystem consists of various DISP function blocks in the >> > +MMSYS register space. The connections between them can be configured by output >> > +and input selectors in the MMSYS_CONFIG register space and register updates can >> > +be synchronized to video frame boundaries with help of a DISP_MUTEX function >> > +block. >> > + >> > +The display-subsystem node binds together all individual device nodes that >> > +comprise the DISP subsystem. >> > + >> > +Required properties: >> > + >> > +- compatible: "mediatek,<chip>-disp" >> >> > +- components: Should contain a list of phandles pointing to the DISP function >> > + block device nodes. >> > +- component-names: Should contain the name of the function block pointed to >> > + by the components phandle of the same index. >> >> NAK. Group these nodes under a parent node, use of-graph or just don't >> put this into DT. Don't invent a new way. > > If I connect the DISP nodes using of-graph bindings, the full graph will > look somewhat like this (including the currently unused function blocks, > all properties but ports and endpoints removed for brevity): > > ovl0@1400c000 { > port { > ovl0_to_color0: endpoint@0 { > remote-endpoint = <&color0_from_ovl0>; > }; > > ovl0_to_wdma0: endpoint@1 { > remote-endpoint = <&wdma0_from_ovl0>; > }; > }; > }; > > ovl1@1400d000 { > port { > ovl1_to_color1: endpoint@0 { > remote-endpoint = <&color1_from_ovl1>; > }; > > ovl1_to_wdma1: endpoint@1 { > remote-endpoint = <&wdma1_from_ovl1>; > }; > }; > }; > > rdma0@1400e000 { > port@0 { > rdma0_from_od: endpoint { > remote-endpoint = <&od_to_rdma0>; > }; > }; > > port@1 { > rdma0_to_ufoe: endpoint@0 { > remote-endpoint = <&ufoe_from_rdma0>; > }; > > rdma0_to_split0: endpoint@1 { > remote-endpoint = <&split0_from_rdma0>; > }; > > rdma0_to_color0: endpoint@2 { > remote-endpoint = <&color0_from_rdma0>; > }; > }; > }; > > rdma1@1400f000 { > port@0 { > rdma1_from_gamma: endpoint { > remote-endpoint = <&gamma_to_rdma1>; > }; > }; > > port@1 { > rdma1_to_dsi0: endpoint@0 { > remote-endpoint = <&dsi0_from_rdma1>; > }; > > rdma1_to_dsi1: endpoint@1 { > remote-endpoint = <&dsi1_from_rdma1>; > }; > > rdma1_to_dpi0: endpoint@2 { > remote-endpoint = <&dpi0_from_rdma1>; > }; > > rdma1_to_color1: endpoint@3 { > remote-endpoint = <&color1_from_rdma1>; > }; > }; > }; > > rdma2@14010000 { > port { > rdma2_to_dsi1: endpoint@0 { > remote-endpoint = <&dsi1_from_rdma2>; > }; > > rdma2_to_dpi0: endpoint@1 { > remote-endpoint = <&dpi0_from_rdma2>; > }; > }; > }; > > wdma0@14011000 { > port { > wdma0_from_ovl0: endpoint@0 { > remote-endpoint = <&ovl0_to_wdma0>; > }; > > wdma0_from_od: endpoint@1 { > remote-endpoint = <&od_to_wdma0>; > }; > > wdma0_from_ufoe: endpoint@2 { > remote-endpoint = <&ufoe_to_wdma0>; > }; > }; > }; > > wdma1@14012000 { > port { > wdma1_from_ovl1: endpoint@0 { > remote-endpoint = <&ovl1_to_wdma1>; > }; > > wdma1_from_gamma: endpoint@1 { > remote-endpoint = <&gamma_to_wdma1>; > }; > }; > }; > > color0@14013000 { > port@0 { > color0_from_rdma0: endpoint@0 { > remote-endpoint = <&rdma0_to_color0>; > }; > > color0_from_ovl0: endpoint@1 { > remote-endpoint = <&ovl0_to_color0>; > }; > }; > > port@1 { > color0_to_aal: endpoint@0 { > remote-endpoint = <&aal_from_color0>; > }; > > color0_to_merge: endpoint@1 { > remote-endpoint = <&merge_from_color0>; > }; > }; > }; > > color1@14014000 { > port@0 { > color1_from_rdma1: endpoint@0 { > remote-endpoint = <&rdma1_to_color1>; > }; > > color1_from_ovl1: endpoint@1 { > remote-endpoint = <&ovl1_to_color1>; > }; > }; > > port@1 { > color1_to_gamma: endpoint@0 { > remote-endpoint = <&gamma_from_color1>; > }; > > color1_to_merge: endpoint@1 { > remote-endpoint = <&merge_from_color1>; > }; > }; > }; > > aal@14015000 { > port@0 { > aal_from_color0: endpoint@0 { > remote-endpoint = <&color0_to_aal>; > }; > > aal_from_merge: endpoint@1 { > remote-endpoint = <&merge_to_aal>; > }; > }; > > port@1 { > aal_to_od: endpoint { > remote-endpoint = <&od_from_aal>; > }; > }; > }; > > gamma@14016000 { > port@0 { > gamma_from_color1: endpoint { > remote-endpoint = <&color1_to_gamma>; > }; > }; > > port@1 { > gamma_to_rdma1: endpoint@0 { > remote-endpoint = <&rdma1_from_gamma>; > }; > > gamma_to_dsi0: endpoint@1 { > remote-endpoint = <&dsi0_from_gamma>; > }; > > gamma_to_dsi1: endpoint@2 { > remote-endpoint = <&dsi1_from_gamma>; > }; > > gamma_to_dpi0: endpoint@3 { > remote-endpoint = <&dpi0_from_gamma>; > }; > > gamma_to_wdma1: endpoint@4 { > remote-endpoint = <&wdma1_from_gamma>; > }; > }; > }; > > merge@14017000 { > port@0 { > merge_from_color0: endpoint { > remote-endpoint = <&color0_to_merge>; > }; > }; > > port@1 { > merge_from_color1: endpoint { > remote-endpoint = <&color1_to_merge>; > }; > }; > > port@2 { > merge_to_aal: endpoint { > remote-endpoint = <&aal_from_merge>; > }; > }; > }; > > split0@14018000 { > port@0 { > split0_from_rdma0: endpoint@0 { > remote-endpoint = <&rdma0_to_split0>; > }; > > split0_from_od: endpoint@1 { > remote-endpoint = <&od_to_split0>; > }; > }; > > port@1 { > split0_to_ufoe: endpoint { > remote-endpoint = <&ufoe_from_split0>; > }; > }; > > port@2 { > split0_to_dsi0: endpoint@0 { > remote-endpoint = <&dsi0_from_split0>; > }; > > split0_to_dsi1: endpoint@1 { > remote-endpoint = <&dsi1_from_split0>; > }; > > split0_to_dpi0: endpoint@2 { > remote-endpoint = <&dpi0_from_split0>; > }; > }; > }; > > split1@14019000 { > port@0 { > split1_from_ufoe: endpoint { > remote-endpoint = <&ufoe_to_split1>; > }; > }; > > port@1 { > split1_to_dsi0: endpoint { > remote-endpoint = <&dsi0_from_split1>; > }; > }; > > port@2 { > split1_to_dsi1: endpoint { > remote-endpoint = <&dsi1_from_split1>; > }; > }; > }; > > ufoe@1401a000 { > port@0 { > ufoe_from_rdma0: endpoint@0 { > remote-endpoint = <&rdma0_to_ufoe>; > }; > > ufoe_from_od: endpoint@1 { > remote-endpoint = <&od_to_ufoe>; > }; > > ufoe_from_split0: endpoint@2 { > remote-endpoint = <&split0_to_ufoe>; > }; > }; > > port@1 { > ufoe_to_dsi0: endpoint@0 { > remote-endpoint = <&dsi0_from_ufoe>; > }; > > ufoe_to_split1: endpoint@1 { > remote-endpoint = <&split1_from_ufoe>; > }; > > ufoe_to_dpi0: endpoint@2 { > remote-endpoint = <&dpi0_from_ufoe>; > }; > > ufoe_to_wdma0: endpoint@3 { > remote-endpoint = <&wdma0_from_ufoe>; > }; > > ufoe_to_dsi1: endpoint@4 { > remote-endpoint = <&dsi1_from_ufoe>; > }; > }; > }; > > dsi0: dsi0@1401b000 { > port@0 { > dsi0_from_ufoe: endpoint@0 { > remote-endpoint = <&ufoe_to_dsi0>; > }; > > dsi0_from_split1: endpoint@1 { > remote-endpoint = <&split1_to_dsi0>; > }; > > dsi0_from_rdma1: endpoint@2 { > remote-endpoint = <&rdma1_to_dsi0>; > }; > > dsi0_from_gamma: endpoint@3 { > remote-endpoint = <&gamma_to_dsi0>; > }; > > dsi0_from_split0: endpoint@4 { > remote-endpoint = <&split0_to_dsi0>; > }; > }; > }; > > dsi1: dsi1@1401c000 { > port@0 { > dsi1_from_split1: endpoint@0 { > remote-endpoint = <&split1_to_dsi1>; > }; > > dsi1_from_rdma1: endpoint@1 { > remote-endpoint = <&rdma1_to_dsi1>; > }; > > dsi1_from_gamma: endpoint@2 { > remote-endpoint = <&gamma_to_dsi1>; > }; > > dsi1_from_split0: endpoint@3 { > remote-endpoint = <&split0_to_dsi1>; > }; > > dsi1_from_rdma2: endpoint@4 { > remote-endpoint = <&rdma2_to_dsi1>; > }; > > dsi1_from_ufoe: endpoint@5 { > remote-endpoint = <&ufoe_to_dsi1>; > }; > }; > }; > > dpi0: dpi0@1401d000 { > port@0 { > dpi0_from_ufoe: endpoint@0 { > remote-endpoint = <&ufoe_to_dpi0>; > }; > > dpi0_from_rdma1: endpoint@1 { > remote-endpoint = <&rdma1_to_dpi0>; > }; > > dpi0_from_gamma: endpoint@2 { > remote-endpoint = <&gamma_to_dpi0>; > }; > > dpi0_from_split0: endpoint@3 { > remote-endpoint = <&split0_to_dpi0>; > }; > > dpi0_from_rdma2: endpoint@4 { > remote-endpoint = <&rdma2_to_dpi0>; > }; > }; > }; > > od@14023000 { > port@0 { > od_from_aal: endpoint { > remote-endpoint = <&aal_to_od>; > }; > }; > > port@1 { > od_to_rdma0: endpoint@0 { > remote-endpoint = <&rdma0_from_od>; > }; > > od_to_ufoe: endpoint@1 { > remote-endpoint = <&ufoe_from_od>; > }; > > od_to_split0: endpoint@2 { > remote-endpoint = <&split0_from_od>; > }; > > od_to_wdma0: endpoint@3 { > remote-endpoint = <&wdma0_from_od>; > }; > }; > }; > > Adding the graph to the mediatek oak-rev3 device tree increases the size > from currently 33 KiB to 41.5 KiB. > As a proponent of the of-graph bindings I certainly like to describe the > hardware connections using DT, but I'm not sure if maybe this is a bit > verbose. We need a graph visualizer... I think there has to be a balance with how much is put into the DT. If the relationship between blocks is pretty fixed then it doesn't really help much to put all this into DT. If every SOC or board can have differing combinations of blocks or connections between blocks then the graph makes sense. Rob -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html