18c2ecf20Sopenharmony_ci=======================================================
28c2ecf20Sopenharmony_ciARM CCI cache coherent interconnect binding description
38c2ecf20Sopenharmony_ci=======================================================
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ciARM multi-cluster systems maintain intra-cluster coherency through a
68c2ecf20Sopenharmony_cicache coherent interconnect (CCI) that is capable of monitoring bus
78c2ecf20Sopenharmony_citransactions and manage coherency, TLB invalidations and memory barriers.
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciIt allows snooping and distributed virtual memory message broadcast across
108c2ecf20Sopenharmony_ciclusters, through memory mapped interface, with a global control register
118c2ecf20Sopenharmony_cispace and multiple sets of interface control registers, one per slave
128c2ecf20Sopenharmony_ciinterface.
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci* CCI interconnect node
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci	Description: Describes a CCI cache coherent Interconnect component
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci	Node name must be "cci".
198c2ecf20Sopenharmony_ci	Node's parent must be the root node /, and the address space visible
208c2ecf20Sopenharmony_ci	through the CCI interconnect is the same as the one seen from the
218c2ecf20Sopenharmony_ci	root node (ie from CPUs perspective as per DT standard).
228c2ecf20Sopenharmony_ci	Every CCI node has to define the following properties:
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	- compatible
258c2ecf20Sopenharmony_ci		Usage: required
268c2ecf20Sopenharmony_ci		Value type: <string>
278c2ecf20Sopenharmony_ci		Definition: must contain one of the following:
288c2ecf20Sopenharmony_ci			    "arm,cci-400"
298c2ecf20Sopenharmony_ci			    "arm,cci-500"
308c2ecf20Sopenharmony_ci			    "arm,cci-550"
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	- reg
338c2ecf20Sopenharmony_ci		Usage: required
348c2ecf20Sopenharmony_ci		Value type: Integer cells. A register entry, expressed as a pair
358c2ecf20Sopenharmony_ci			    of cells, containing base and size.
368c2ecf20Sopenharmony_ci		Definition: A standard property. Specifies base physical
378c2ecf20Sopenharmony_ci			    address of CCI control registers common to all
388c2ecf20Sopenharmony_ci			    interfaces.
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci	- ranges:
418c2ecf20Sopenharmony_ci		Usage: required
428c2ecf20Sopenharmony_ci		Value type: Integer cells. An array of range entries, expressed
438c2ecf20Sopenharmony_ci			    as a tuple of cells, containing child address,
448c2ecf20Sopenharmony_ci			    parent address and the size of the region in the
458c2ecf20Sopenharmony_ci			    child address space.
468c2ecf20Sopenharmony_ci		Definition: A standard property. Follow rules in the Devicetree
478c2ecf20Sopenharmony_ci			    Specification for hierarchical bus addressing. CCI
488c2ecf20Sopenharmony_ci			    interfaces addresses refer to the parent node
498c2ecf20Sopenharmony_ci			    addressing scheme to declare their register bases.
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci	CCI interconnect node can define the following child nodes:
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci	- CCI control interface nodes
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci		Node name must be "slave-if".
568c2ecf20Sopenharmony_ci		Parent node must be CCI interconnect node.
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci		A CCI control interface node must contain the following
598c2ecf20Sopenharmony_ci		properties:
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci		- compatible
628c2ecf20Sopenharmony_ci			Usage: required
638c2ecf20Sopenharmony_ci			Value type: <string>
648c2ecf20Sopenharmony_ci			Definition: must be set to
658c2ecf20Sopenharmony_ci				    "arm,cci-400-ctrl-if"
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci		- interface-type:
688c2ecf20Sopenharmony_ci			Usage: required
698c2ecf20Sopenharmony_ci			Value type: <string>
708c2ecf20Sopenharmony_ci			Definition: must be set to one of {"ace", "ace-lite"}
718c2ecf20Sopenharmony_ci				    depending on the interface type the node
728c2ecf20Sopenharmony_ci				    represents.
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci		- reg:
758c2ecf20Sopenharmony_ci			Usage: required
768c2ecf20Sopenharmony_ci			Value type: Integer cells. A register entry, expressed
778c2ecf20Sopenharmony_ci				    as a pair of cells, containing base and
788c2ecf20Sopenharmony_ci				    size.
798c2ecf20Sopenharmony_ci			Definition: the base address and size of the
808c2ecf20Sopenharmony_ci				    corresponding interface programming
818c2ecf20Sopenharmony_ci				    registers.
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci	- CCI PMU node
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ci		Parent node must be CCI interconnect node.
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci		A CCI pmu node must contain the following properties:
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci		- compatible
908c2ecf20Sopenharmony_ci			Usage: required
918c2ecf20Sopenharmony_ci			Value type: <string>
928c2ecf20Sopenharmony_ci			Definition: Must contain one of:
938c2ecf20Sopenharmony_ci				 "arm,cci-400-pmu,r0"
948c2ecf20Sopenharmony_ci				 "arm,cci-400-pmu,r1"
958c2ecf20Sopenharmony_ci				 "arm,cci-400-pmu"  - DEPRECATED, permitted only where OS has
968c2ecf20Sopenharmony_ci						      secure access to CCI registers
978c2ecf20Sopenharmony_ci				 "arm,cci-500-pmu,r0"
988c2ecf20Sopenharmony_ci				 "arm,cci-550-pmu,r0"
998c2ecf20Sopenharmony_ci		- reg:
1008c2ecf20Sopenharmony_ci			Usage: required
1018c2ecf20Sopenharmony_ci			Value type: Integer cells. A register entry, expressed
1028c2ecf20Sopenharmony_ci				    as a pair of cells, containing base and
1038c2ecf20Sopenharmony_ci				    size.
1048c2ecf20Sopenharmony_ci			Definition: the base address and size of the
1058c2ecf20Sopenharmony_ci				    corresponding interface programming
1068c2ecf20Sopenharmony_ci				    registers.
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ci		- interrupts:
1098c2ecf20Sopenharmony_ci			Usage: required
1108c2ecf20Sopenharmony_ci			Value type: Integer cells. Array of interrupt specifier
1118c2ecf20Sopenharmony_ci				    entries, as defined in
1128c2ecf20Sopenharmony_ci				    ../interrupt-controller/interrupts.txt.
1138c2ecf20Sopenharmony_ci			Definition: list of counter overflow interrupts, one per
1148c2ecf20Sopenharmony_ci				    counter. The interrupts must be specified
1158c2ecf20Sopenharmony_ci				    starting with the cycle counter overflow
1168c2ecf20Sopenharmony_ci				    interrupt, followed by counter0 overflow
1178c2ecf20Sopenharmony_ci				    interrupt, counter1 overflow interrupt,...
1188c2ecf20Sopenharmony_ci				    ,counterN overflow interrupt.
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_ci				    The CCI PMU has an interrupt signal for each
1218c2ecf20Sopenharmony_ci				    counter. The number of interrupts must be
1228c2ecf20Sopenharmony_ci				    equal to the number of counters.
1238c2ecf20Sopenharmony_ci
1248c2ecf20Sopenharmony_ci* CCI interconnect bus masters
1258c2ecf20Sopenharmony_ci
1268c2ecf20Sopenharmony_ci	Description: masters in the device tree connected to a CCI port
1278c2ecf20Sopenharmony_ci		     (inclusive of CPUs and their cpu nodes).
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ci	A CCI interconnect bus master node must contain the following
1308c2ecf20Sopenharmony_ci	properties:
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ci	- cci-control-port:
1338c2ecf20Sopenharmony_ci		Usage: required
1348c2ecf20Sopenharmony_ci		Value type: <phandle>
1358c2ecf20Sopenharmony_ci		Definition: a phandle containing the CCI control interface node
1368c2ecf20Sopenharmony_ci			    the master is connected to.
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ciExample:
1398c2ecf20Sopenharmony_ci
1408c2ecf20Sopenharmony_ci	cpus {
1418c2ecf20Sopenharmony_ci		#size-cells = <0>;
1428c2ecf20Sopenharmony_ci		#address-cells = <1>;
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ci		CPU0: cpu@0 {
1458c2ecf20Sopenharmony_ci			device_type = "cpu";
1468c2ecf20Sopenharmony_ci			compatible = "arm,cortex-a15";
1478c2ecf20Sopenharmony_ci			cci-control-port = <&cci_control1>;
1488c2ecf20Sopenharmony_ci			reg = <0x0>;
1498c2ecf20Sopenharmony_ci		};
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ci		CPU1: cpu@1 {
1528c2ecf20Sopenharmony_ci			device_type = "cpu";
1538c2ecf20Sopenharmony_ci			compatible = "arm,cortex-a15";
1548c2ecf20Sopenharmony_ci			cci-control-port = <&cci_control1>;
1558c2ecf20Sopenharmony_ci			reg = <0x1>;
1568c2ecf20Sopenharmony_ci		};
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ci		CPU2: cpu@100 {
1598c2ecf20Sopenharmony_ci			device_type = "cpu";
1608c2ecf20Sopenharmony_ci			compatible = "arm,cortex-a7";
1618c2ecf20Sopenharmony_ci			cci-control-port = <&cci_control2>;
1628c2ecf20Sopenharmony_ci			reg = <0x100>;
1638c2ecf20Sopenharmony_ci		};
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ci		CPU3: cpu@101 {
1668c2ecf20Sopenharmony_ci			device_type = "cpu";
1678c2ecf20Sopenharmony_ci			compatible = "arm,cortex-a7";
1688c2ecf20Sopenharmony_ci			cci-control-port = <&cci_control2>;
1698c2ecf20Sopenharmony_ci			reg = <0x101>;
1708c2ecf20Sopenharmony_ci		};
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ci	};
1738c2ecf20Sopenharmony_ci
1748c2ecf20Sopenharmony_ci	dma0: dma@3000000 {
1758c2ecf20Sopenharmony_ci		compatible = "arm,pl330", "arm,primecell";
1768c2ecf20Sopenharmony_ci		cci-control-port = <&cci_control0>;
1778c2ecf20Sopenharmony_ci		reg = <0x0 0x3000000 0x0 0x1000>;
1788c2ecf20Sopenharmony_ci		interrupts = <10>;
1798c2ecf20Sopenharmony_ci		#dma-cells = <1>;
1808c2ecf20Sopenharmony_ci		#dma-channels = <8>;
1818c2ecf20Sopenharmony_ci		#dma-requests = <32>;
1828c2ecf20Sopenharmony_ci	};
1838c2ecf20Sopenharmony_ci
1848c2ecf20Sopenharmony_ci	cci@2c090000 {
1858c2ecf20Sopenharmony_ci		compatible = "arm,cci-400";
1868c2ecf20Sopenharmony_ci		#address-cells = <1>;
1878c2ecf20Sopenharmony_ci		#size-cells = <1>;
1888c2ecf20Sopenharmony_ci		reg = <0x0 0x2c090000 0 0x1000>;
1898c2ecf20Sopenharmony_ci		ranges = <0x0 0x0 0x2c090000 0x10000>;
1908c2ecf20Sopenharmony_ci
1918c2ecf20Sopenharmony_ci		cci_control0: slave-if@1000 {
1928c2ecf20Sopenharmony_ci			compatible = "arm,cci-400-ctrl-if";
1938c2ecf20Sopenharmony_ci			interface-type = "ace-lite";
1948c2ecf20Sopenharmony_ci			reg = <0x1000 0x1000>;
1958c2ecf20Sopenharmony_ci		};
1968c2ecf20Sopenharmony_ci
1978c2ecf20Sopenharmony_ci		cci_control1: slave-if@4000 {
1988c2ecf20Sopenharmony_ci			compatible = "arm,cci-400-ctrl-if";
1998c2ecf20Sopenharmony_ci			interface-type = "ace";
2008c2ecf20Sopenharmony_ci			reg = <0x4000 0x1000>;
2018c2ecf20Sopenharmony_ci		};
2028c2ecf20Sopenharmony_ci
2038c2ecf20Sopenharmony_ci		cci_control2: slave-if@5000 {
2048c2ecf20Sopenharmony_ci			compatible = "arm,cci-400-ctrl-if";
2058c2ecf20Sopenharmony_ci			interface-type = "ace";
2068c2ecf20Sopenharmony_ci			reg = <0x5000 0x1000>;
2078c2ecf20Sopenharmony_ci		};
2088c2ecf20Sopenharmony_ci
2098c2ecf20Sopenharmony_ci		pmu@9000 {
2108c2ecf20Sopenharmony_ci			 compatible = "arm,cci-400-pmu";
2118c2ecf20Sopenharmony_ci			 reg = <0x9000 0x5000>;
2128c2ecf20Sopenharmony_ci			 interrupts = <0 101 4>,
2138c2ecf20Sopenharmony_ci				      <0 102 4>,
2148c2ecf20Sopenharmony_ci				      <0 103 4>,
2158c2ecf20Sopenharmony_ci				      <0 104 4>,
2168c2ecf20Sopenharmony_ci				      <0 105 4>;
2178c2ecf20Sopenharmony_ci		};
2188c2ecf20Sopenharmony_ci	};
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ciThis CCI node corresponds to a CCI component whose control registers sits
2218c2ecf20Sopenharmony_ciat address 0x000000002c090000.
2228c2ecf20Sopenharmony_ciCCI slave interface @0x000000002c091000 is connected to dma controller dma0.
2238c2ecf20Sopenharmony_ciCCI slave interface @0x000000002c094000 is connected to CPUs {CPU0, CPU1};
2248c2ecf20Sopenharmony_ciCCI slave interface @0x000000002c095000 is connected to CPUs {CPU2, CPU3};
225