| ======================================================= | 
 | ARM CCI cache coherent interconnect binding description | 
 | ======================================================= | 
 |  | 
 | ARM multi-cluster systems maintain intra-cluster coherency through a | 
 | cache coherent interconnect (CCI) that is capable of monitoring bus | 
 | transactions and manage coherency, TLB invalidations and memory barriers. | 
 |  | 
 | It allows snooping and distributed virtual memory message broadcast across | 
 | clusters, through memory mapped interface, with a global control register | 
 | space and multiple sets of interface control registers, one per slave | 
 | interface. | 
 |  | 
 | Bindings for the CCI node follow the ePAPR standard, available from: | 
 |  | 
 | www.power.org/documentation/epapr-version-1-1/ | 
 |  | 
 | with the addition of the bindings described in this document which are | 
 | specific to ARM. | 
 |  | 
 | * CCI interconnect node | 
 |  | 
 | 	Description: Describes a CCI cache coherent Interconnect component | 
 |  | 
 | 	Node name must be "cci". | 
 | 	Node's parent must be the root node /, and the address space visible | 
 | 	through the CCI interconnect is the same as the one seen from the | 
 | 	root node (ie from CPUs perspective as per DT standard). | 
 | 	Every CCI node has to define the following properties: | 
 |  | 
 | 	- compatible | 
 | 		Usage: required | 
 | 		Value type: <string> | 
 | 		Definition: must be set to | 
 | 			    "arm,cci-400" | 
 |  | 
 | 	- reg | 
 | 		Usage: required | 
 | 		Value type: Integer cells. A register entry, expressed as a pair | 
 | 			    of cells, containing base and size. | 
 | 		Definition: A standard property. Specifies base physical | 
 | 			    address of CCI control registers common to all | 
 | 			    interfaces. | 
 |  | 
 | 	- ranges: | 
 | 		Usage: required | 
 | 		Value type: Integer cells. An array of range entries, expressed | 
 | 			    as a tuple of cells, containing child address, | 
 | 			    parent address and the size of the region in the | 
 | 			    child address space. | 
 | 		Definition: A standard property. Follow rules in the ePAPR for | 
 | 			    hierarchical bus addressing. CCI interfaces | 
 | 			    addresses refer to the parent node addressing | 
 | 			    scheme to declare their register bases. | 
 |  | 
 | 	CCI interconnect node can define the following child nodes: | 
 |  | 
 | 	- CCI control interface nodes | 
 |  | 
 | 		Node name must be "slave-if". | 
 | 		Parent node must be CCI interconnect node. | 
 |  | 
 | 		A CCI control interface node must contain the following | 
 | 		properties: | 
 |  | 
 | 		- compatible | 
 | 			Usage: required | 
 | 			Value type: <string> | 
 | 			Definition: must be set to | 
 | 				    "arm,cci-400-ctrl-if" | 
 |  | 
 | 		- interface-type: | 
 | 			Usage: required | 
 | 			Value type: <string> | 
 | 			Definition: must be set to one of {"ace", "ace-lite"} | 
 | 				    depending on the interface type the node | 
 | 				    represents. | 
 |  | 
 | 		- reg: | 
 | 			Usage: required | 
 | 			Value type: Integer cells. A register entry, expressed | 
 | 				    as a pair of cells, containing base and | 
 | 				    size. | 
 | 			Definition: the base address and size of the | 
 | 				    corresponding interface programming | 
 | 				    registers. | 
 |  | 
 | 	- CCI PMU node | 
 |  | 
 | 		Parent node must be CCI interconnect node. | 
 |  | 
 | 		A CCI pmu node must contain the following properties: | 
 |  | 
 | 		- compatible | 
 | 			Usage: required | 
 | 			Value type: <string> | 
 | 			Definition: Must contain one of: | 
 | 				 "arm,cci-400-pmu,r0" | 
 | 				 "arm,cci-400-pmu,r1" | 
 | 				 "arm,cci-400-pmu"  - DEPRECATED, permitted only where OS has | 
 | 						      secure acces to CCI registers | 
 | 		- reg: | 
 | 			Usage: required | 
 | 			Value type: Integer cells. A register entry, expressed | 
 | 				    as a pair of cells, containing base and | 
 | 				    size. | 
 | 			Definition: the base address and size of the | 
 | 				    corresponding interface programming | 
 | 				    registers. | 
 |  | 
 | 		- interrupts: | 
 | 			Usage: required | 
 | 			Value type: Integer cells. Array of interrupt specifier | 
 | 				    entries, as defined in | 
 | 				    ../interrupt-controller/interrupts.txt. | 
 | 			Definition: list of counter overflow interrupts, one per | 
 | 				    counter. The interrupts must be specified | 
 | 				    starting with the cycle counter overflow | 
 | 				    interrupt, followed by counter0 overflow | 
 | 				    interrupt, counter1 overflow interrupt,... | 
 | 				    ,counterN overflow interrupt. | 
 |  | 
 | 				    The CCI PMU has an interrupt signal for each | 
 | 				    counter. The number of interrupts must be | 
 | 				    equal to the number of counters. | 
 |  | 
 | * CCI interconnect bus masters | 
 |  | 
 | 	Description: masters in the device tree connected to a CCI port | 
 | 		     (inclusive of CPUs and their cpu nodes). | 
 |  | 
 | 	A CCI interconnect bus master node must contain the following | 
 | 	properties: | 
 |  | 
 | 	- cci-control-port: | 
 | 		Usage: required | 
 | 		Value type: <phandle> | 
 | 		Definition: a phandle containing the CCI control interface node | 
 | 			    the master is connected to. | 
 |  | 
 | Example: | 
 |  | 
 | 	cpus { | 
 | 		#size-cells = <0>; | 
 | 		#address-cells = <1>; | 
 |  | 
 | 		CPU0: cpu@0 { | 
 | 			device_type = "cpu"; | 
 | 			compatible = "arm,cortex-a15"; | 
 | 			cci-control-port = <&cci_control1>; | 
 | 			reg = <0x0>; | 
 | 		}; | 
 |  | 
 | 		CPU1: cpu@1 { | 
 | 			device_type = "cpu"; | 
 | 			compatible = "arm,cortex-a15"; | 
 | 			cci-control-port = <&cci_control1>; | 
 | 			reg = <0x1>; | 
 | 		}; | 
 |  | 
 | 		CPU2: cpu@100 { | 
 | 			device_type = "cpu"; | 
 | 			compatible = "arm,cortex-a7"; | 
 | 			cci-control-port = <&cci_control2>; | 
 | 			reg = <0x100>; | 
 | 		}; | 
 |  | 
 | 		CPU3: cpu@101 { | 
 | 			device_type = "cpu"; | 
 | 			compatible = "arm,cortex-a7"; | 
 | 			cci-control-port = <&cci_control2>; | 
 | 			reg = <0x101>; | 
 | 		}; | 
 |  | 
 | 	}; | 
 |  | 
 | 	dma0: dma@3000000 { | 
 | 		compatible = "arm,pl330", "arm,primecell"; | 
 | 		cci-control-port = <&cci_control0>; | 
 | 		reg = <0x0 0x3000000 0x0 0x1000>; | 
 | 		interrupts = <10>; | 
 | 		#dma-cells = <1>; | 
 | 		#dma-channels = <8>; | 
 | 		#dma-requests = <32>; | 
 | 	}; | 
 |  | 
 | 	cci@2c090000 { | 
 | 		compatible = "arm,cci-400"; | 
 | 		#address-cells = <1>; | 
 | 		#size-cells = <1>; | 
 | 		reg = <0x0 0x2c090000 0 0x1000>; | 
 | 		ranges = <0x0 0x0 0x2c090000 0x10000>; | 
 |  | 
 | 		cci_control0: slave-if@1000 { | 
 | 			compatible = "arm,cci-400-ctrl-if"; | 
 | 			interface-type = "ace-lite"; | 
 | 			reg = <0x1000 0x1000>; | 
 | 		}; | 
 |  | 
 | 		cci_control1: slave-if@4000 { | 
 | 			compatible = "arm,cci-400-ctrl-if"; | 
 | 			interface-type = "ace"; | 
 | 			reg = <0x4000 0x1000>; | 
 | 		}; | 
 |  | 
 | 		cci_control2: slave-if@5000 { | 
 | 			compatible = "arm,cci-400-ctrl-if"; | 
 | 			interface-type = "ace"; | 
 | 			reg = <0x5000 0x1000>; | 
 | 		}; | 
 |  | 
 | 		pmu@9000 { | 
 | 			 compatible = "arm,cci-400-pmu"; | 
 | 			 reg = <0x9000 0x5000>; | 
 | 			 interrupts = <0 101 4>, | 
 | 				      <0 102 4>, | 
 | 				      <0 103 4>, | 
 | 				      <0 104 4>, | 
 | 				      <0 105 4>; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | This CCI node corresponds to a CCI component whose control registers sits | 
 | at address 0x000000002c090000. | 
 | CCI slave interface @0x000000002c091000 is connected to dma controller dma0. | 
 | CCI slave interface @0x000000002c094000 is connected to CPUs {CPU0, CPU1}; | 
 | CCI slave interface @0x000000002c095000 is connected to CPUs {CPU2, CPU3}; |