xref: /linux/Documentation/devicetree/bindings/interconnect/interconnect.txt (revision 9a34e7ad2e123b4ed02a1c579939aadf148683c5)
106b3773bSGeorgi DjakovInterconnect Provider Device Tree Bindings
206b3773bSGeorgi Djakov=========================================
306b3773bSGeorgi Djakov
406b3773bSGeorgi DjakovThe purpose of this document is to define a common set of generic interconnect
506b3773bSGeorgi Djakovproviders/consumers properties.
606b3773bSGeorgi Djakov
706b3773bSGeorgi Djakov
806b3773bSGeorgi Djakov= interconnect providers =
906b3773bSGeorgi Djakov
1006b3773bSGeorgi DjakovThe interconnect provider binding is intended to represent the interconnect
1106b3773bSGeorgi Djakovcontrollers in the system. Each provider registers a set of interconnect
1206b3773bSGeorgi Djakovnodes, which expose the interconnect related capabilities of the interconnect
1306b3773bSGeorgi Djakovto consumer drivers. These capabilities can be throughput, latency, priority
1406b3773bSGeorgi Djakovetc. The consumer drivers set constraints on interconnect path (or endpoints)
1506b3773bSGeorgi Djakovdepending on the use case. Interconnect providers can also be interconnect
1606b3773bSGeorgi Djakovconsumers, such as in the case where two network-on-chip fabrics interface
1706b3773bSGeorgi Djakovdirectly.
1806b3773bSGeorgi Djakov
1906b3773bSGeorgi DjakovRequired properties:
2006b3773bSGeorgi Djakov- compatible : contains the interconnect provider compatible string
2106b3773bSGeorgi Djakov- #interconnect-cells : number of cells in a interconnect specifier needed to
22*9a34e7adSGeorgi Djakov			encode the interconnect node id and optionally add a
23*9a34e7adSGeorgi Djakov			path tag
2406b3773bSGeorgi Djakov
2506b3773bSGeorgi DjakovExample:
2606b3773bSGeorgi Djakov
2706b3773bSGeorgi Djakov		snoc: interconnect@580000 {
2806b3773bSGeorgi Djakov			compatible = "qcom,msm8916-snoc";
2906b3773bSGeorgi Djakov			#interconnect-cells = <1>;
3006b3773bSGeorgi Djakov			reg = <0x580000 0x14000>;
3106b3773bSGeorgi Djakov			clock-names = "bus_clk", "bus_a_clk";
3206b3773bSGeorgi Djakov			clocks = <&rpmcc RPM_SMD_SNOC_CLK>,
3306b3773bSGeorgi Djakov				 <&rpmcc RPM_SMD_SNOC_A_CLK>;
3406b3773bSGeorgi Djakov		};
3506b3773bSGeorgi Djakov
3606b3773bSGeorgi Djakov
3706b3773bSGeorgi Djakov= interconnect consumers =
3806b3773bSGeorgi Djakov
3906b3773bSGeorgi DjakovThe interconnect consumers are device nodes which dynamically express their
4006b3773bSGeorgi Djakovbandwidth requirements along interconnect paths they are connected to. There
4106b3773bSGeorgi Djakovcan be multiple interconnect providers on a SoC and the consumer may consume
4206b3773bSGeorgi Djakovmultiple paths from different providers depending on use case and the
4306b3773bSGeorgi Djakovcomponents it has to interact with.
4406b3773bSGeorgi Djakov
4506b3773bSGeorgi DjakovRequired properties:
4606b3773bSGeorgi Djakovinterconnects : Pairs of phandles and interconnect provider specifier to denote
4706b3773bSGeorgi Djakov	        the edge source and destination ports of the interconnect path.
48*9a34e7adSGeorgi Djakov		An optional path tag value could specified as additional argument
49*9a34e7adSGeorgi Djakov		to both endpoints and in such cases, this information will be passed
50*9a34e7adSGeorgi Djakov		to the interconnect framework to do aggregation based on the attached
51*9a34e7adSGeorgi Djakov		tag.
5206b3773bSGeorgi Djakov
5306b3773bSGeorgi DjakovOptional properties:
5406b3773bSGeorgi Djakovinterconnect-names : List of interconnect path name strings sorted in the same
5506b3773bSGeorgi Djakov		     order as the interconnects property. Consumers drivers will use
5606b3773bSGeorgi Djakov		     interconnect-names to match interconnect paths with interconnect
5706b3773bSGeorgi Djakov		     specifier pairs.
5806b3773bSGeorgi Djakov
59c43a4469SMaxime Ripard                     Reserved interconnect names:
60c43a4469SMaxime Ripard			 * dma-mem: Path from the device to the main memory of
61c43a4469SMaxime Ripard			            the system
62c43a4469SMaxime Ripard
6306b3773bSGeorgi DjakovExample:
6406b3773bSGeorgi Djakov
6506b3773bSGeorgi Djakov	sdhci@7864000 {
6606b3773bSGeorgi Djakov		...
6706b3773bSGeorgi Djakov		interconnects = <&pnoc MASTER_SDCC_1 &bimc SLAVE_EBI_CH0>;
6806b3773bSGeorgi Djakov		interconnect-names = "sdhc-mem";
6906b3773bSGeorgi Djakov	};
70*9a34e7adSGeorgi Djakov
71*9a34e7adSGeorgi DjakovExample with path tags:
72*9a34e7adSGeorgi Djakov
73*9a34e7adSGeorgi Djakov	gnoc: interconnect@17900000 {
74*9a34e7adSGeorgi Djakov		...
75*9a34e7adSGeorgi Djakov		interconnect-cells = <2>;
76*9a34e7adSGeorgi Djakov	};
77*9a34e7adSGeorgi Djakov
78*9a34e7adSGeorgi Djakov	mnoc: interconnect@1380000 {
79*9a34e7adSGeorgi Djakov		...
80*9a34e7adSGeorgi Djakov		interconnect-cells = <2>;
81*9a34e7adSGeorgi Djakov	};
82*9a34e7adSGeorgi Djakov
83*9a34e7adSGeorgi Djakov	cpu@0 {
84*9a34e7adSGeorgi Djakov		...
85*9a34e7adSGeorgi Djakov		interconnects = <&gnoc MASTER_APPSS_PROC 3 &mnoc SLAVE_EBI1 3>;
86*9a34e7adSGeorgi Djakov	}
87