1*c66ec88fSEmmanuel Vadot======================================================= 2*c66ec88fSEmmanuel VadotARM CCI cache coherent interconnect binding description 3*c66ec88fSEmmanuel Vadot======================================================= 4*c66ec88fSEmmanuel Vadot 5*c66ec88fSEmmanuel VadotARM multi-cluster systems maintain intra-cluster coherency through a 6*c66ec88fSEmmanuel Vadotcache coherent interconnect (CCI) that is capable of monitoring bus 7*c66ec88fSEmmanuel Vadottransactions and manage coherency, TLB invalidations and memory barriers. 8*c66ec88fSEmmanuel Vadot 9*c66ec88fSEmmanuel VadotIt allows snooping and distributed virtual memory message broadcast across 10*c66ec88fSEmmanuel Vadotclusters, through memory mapped interface, with a global control register 11*c66ec88fSEmmanuel Vadotspace and multiple sets of interface control registers, one per slave 12*c66ec88fSEmmanuel Vadotinterface. 13*c66ec88fSEmmanuel Vadot 14*c66ec88fSEmmanuel Vadot* CCI interconnect node 15*c66ec88fSEmmanuel Vadot 16*c66ec88fSEmmanuel Vadot Description: Describes a CCI cache coherent Interconnect component 17*c66ec88fSEmmanuel Vadot 18*c66ec88fSEmmanuel Vadot Node name must be "cci". 19*c66ec88fSEmmanuel Vadot Node's parent must be the root node /, and the address space visible 20*c66ec88fSEmmanuel Vadot through the CCI interconnect is the same as the one seen from the 21*c66ec88fSEmmanuel Vadot root node (ie from CPUs perspective as per DT standard). 22*c66ec88fSEmmanuel Vadot Every CCI node has to define the following properties: 23*c66ec88fSEmmanuel Vadot 24*c66ec88fSEmmanuel Vadot - compatible 25*c66ec88fSEmmanuel Vadot Usage: required 26*c66ec88fSEmmanuel Vadot Value type: <string> 27*c66ec88fSEmmanuel Vadot Definition: must contain one of the following: 28*c66ec88fSEmmanuel Vadot "arm,cci-400" 29*c66ec88fSEmmanuel Vadot "arm,cci-500" 30*c66ec88fSEmmanuel Vadot "arm,cci-550" 31*c66ec88fSEmmanuel Vadot 32*c66ec88fSEmmanuel Vadot - reg 33*c66ec88fSEmmanuel Vadot Usage: required 34*c66ec88fSEmmanuel Vadot Value type: Integer cells. A register entry, expressed as a pair 35*c66ec88fSEmmanuel Vadot of cells, containing base and size. 36*c66ec88fSEmmanuel Vadot Definition: A standard property. Specifies base physical 37*c66ec88fSEmmanuel Vadot address of CCI control registers common to all 38*c66ec88fSEmmanuel Vadot interfaces. 39*c66ec88fSEmmanuel Vadot 40*c66ec88fSEmmanuel Vadot - ranges: 41*c66ec88fSEmmanuel Vadot Usage: required 42*c66ec88fSEmmanuel Vadot Value type: Integer cells. An array of range entries, expressed 43*c66ec88fSEmmanuel Vadot as a tuple of cells, containing child address, 44*c66ec88fSEmmanuel Vadot parent address and the size of the region in the 45*c66ec88fSEmmanuel Vadot child address space. 46*c66ec88fSEmmanuel Vadot Definition: A standard property. Follow rules in the Devicetree 47*c66ec88fSEmmanuel Vadot Specification for hierarchical bus addressing. CCI 48*c66ec88fSEmmanuel Vadot interfaces addresses refer to the parent node 49*c66ec88fSEmmanuel Vadot addressing scheme to declare their register bases. 50*c66ec88fSEmmanuel Vadot 51*c66ec88fSEmmanuel Vadot CCI interconnect node can define the following child nodes: 52*c66ec88fSEmmanuel Vadot 53*c66ec88fSEmmanuel Vadot - CCI control interface nodes 54*c66ec88fSEmmanuel Vadot 55*c66ec88fSEmmanuel Vadot Node name must be "slave-if". 56*c66ec88fSEmmanuel Vadot Parent node must be CCI interconnect node. 57*c66ec88fSEmmanuel Vadot 58*c66ec88fSEmmanuel Vadot A CCI control interface node must contain the following 59*c66ec88fSEmmanuel Vadot properties: 60*c66ec88fSEmmanuel Vadot 61*c66ec88fSEmmanuel Vadot - compatible 62*c66ec88fSEmmanuel Vadot Usage: required 63*c66ec88fSEmmanuel Vadot Value type: <string> 64*c66ec88fSEmmanuel Vadot Definition: must be set to 65*c66ec88fSEmmanuel Vadot "arm,cci-400-ctrl-if" 66*c66ec88fSEmmanuel Vadot 67*c66ec88fSEmmanuel Vadot - interface-type: 68*c66ec88fSEmmanuel Vadot Usage: required 69*c66ec88fSEmmanuel Vadot Value type: <string> 70*c66ec88fSEmmanuel Vadot Definition: must be set to one of {"ace", "ace-lite"} 71*c66ec88fSEmmanuel Vadot depending on the interface type the node 72*c66ec88fSEmmanuel Vadot represents. 73*c66ec88fSEmmanuel Vadot 74*c66ec88fSEmmanuel Vadot - reg: 75*c66ec88fSEmmanuel Vadot Usage: required 76*c66ec88fSEmmanuel Vadot Value type: Integer cells. A register entry, expressed 77*c66ec88fSEmmanuel Vadot as a pair of cells, containing base and 78*c66ec88fSEmmanuel Vadot size. 79*c66ec88fSEmmanuel Vadot Definition: the base address and size of the 80*c66ec88fSEmmanuel Vadot corresponding interface programming 81*c66ec88fSEmmanuel Vadot registers. 82*c66ec88fSEmmanuel Vadot 83*c66ec88fSEmmanuel Vadot - CCI PMU node 84*c66ec88fSEmmanuel Vadot 85*c66ec88fSEmmanuel Vadot Parent node must be CCI interconnect node. 86*c66ec88fSEmmanuel Vadot 87*c66ec88fSEmmanuel Vadot A CCI pmu node must contain the following properties: 88*c66ec88fSEmmanuel Vadot 89*c66ec88fSEmmanuel Vadot - compatible 90*c66ec88fSEmmanuel Vadot Usage: required 91*c66ec88fSEmmanuel Vadot Value type: <string> 92*c66ec88fSEmmanuel Vadot Definition: Must contain one of: 93*c66ec88fSEmmanuel Vadot "arm,cci-400-pmu,r0" 94*c66ec88fSEmmanuel Vadot "arm,cci-400-pmu,r1" 95*c66ec88fSEmmanuel Vadot "arm,cci-400-pmu" - DEPRECATED, permitted only where OS has 96*c66ec88fSEmmanuel Vadot secure access to CCI registers 97*c66ec88fSEmmanuel Vadot "arm,cci-500-pmu,r0" 98*c66ec88fSEmmanuel Vadot "arm,cci-550-pmu,r0" 99*c66ec88fSEmmanuel Vadot - reg: 100*c66ec88fSEmmanuel Vadot Usage: required 101*c66ec88fSEmmanuel Vadot Value type: Integer cells. A register entry, expressed 102*c66ec88fSEmmanuel Vadot as a pair of cells, containing base and 103*c66ec88fSEmmanuel Vadot size. 104*c66ec88fSEmmanuel Vadot Definition: the base address and size of the 105*c66ec88fSEmmanuel Vadot corresponding interface programming 106*c66ec88fSEmmanuel Vadot registers. 107*c66ec88fSEmmanuel Vadot 108*c66ec88fSEmmanuel Vadot - interrupts: 109*c66ec88fSEmmanuel Vadot Usage: required 110*c66ec88fSEmmanuel Vadot Value type: Integer cells. Array of interrupt specifier 111*c66ec88fSEmmanuel Vadot entries, as defined in 112*c66ec88fSEmmanuel Vadot ../interrupt-controller/interrupts.txt. 113*c66ec88fSEmmanuel Vadot Definition: list of counter overflow interrupts, one per 114*c66ec88fSEmmanuel Vadot counter. The interrupts must be specified 115*c66ec88fSEmmanuel Vadot starting with the cycle counter overflow 116*c66ec88fSEmmanuel Vadot interrupt, followed by counter0 overflow 117*c66ec88fSEmmanuel Vadot interrupt, counter1 overflow interrupt,... 118*c66ec88fSEmmanuel Vadot ,counterN overflow interrupt. 119*c66ec88fSEmmanuel Vadot 120*c66ec88fSEmmanuel Vadot The CCI PMU has an interrupt signal for each 121*c66ec88fSEmmanuel Vadot counter. The number of interrupts must be 122*c66ec88fSEmmanuel Vadot equal to the number of counters. 123*c66ec88fSEmmanuel Vadot 124*c66ec88fSEmmanuel Vadot* CCI interconnect bus masters 125*c66ec88fSEmmanuel Vadot 126*c66ec88fSEmmanuel Vadot Description: masters in the device tree connected to a CCI port 127*c66ec88fSEmmanuel Vadot (inclusive of CPUs and their cpu nodes). 128*c66ec88fSEmmanuel Vadot 129*c66ec88fSEmmanuel Vadot A CCI interconnect bus master node must contain the following 130*c66ec88fSEmmanuel Vadot properties: 131*c66ec88fSEmmanuel Vadot 132*c66ec88fSEmmanuel Vadot - cci-control-port: 133*c66ec88fSEmmanuel Vadot Usage: required 134*c66ec88fSEmmanuel Vadot Value type: <phandle> 135*c66ec88fSEmmanuel Vadot Definition: a phandle containing the CCI control interface node 136*c66ec88fSEmmanuel Vadot the master is connected to. 137*c66ec88fSEmmanuel Vadot 138*c66ec88fSEmmanuel VadotExample: 139*c66ec88fSEmmanuel Vadot 140*c66ec88fSEmmanuel Vadot cpus { 141*c66ec88fSEmmanuel Vadot #size-cells = <0>; 142*c66ec88fSEmmanuel Vadot #address-cells = <1>; 143*c66ec88fSEmmanuel Vadot 144*c66ec88fSEmmanuel Vadot CPU0: cpu@0 { 145*c66ec88fSEmmanuel Vadot device_type = "cpu"; 146*c66ec88fSEmmanuel Vadot compatible = "arm,cortex-a15"; 147*c66ec88fSEmmanuel Vadot cci-control-port = <&cci_control1>; 148*c66ec88fSEmmanuel Vadot reg = <0x0>; 149*c66ec88fSEmmanuel Vadot }; 150*c66ec88fSEmmanuel Vadot 151*c66ec88fSEmmanuel Vadot CPU1: cpu@1 { 152*c66ec88fSEmmanuel Vadot device_type = "cpu"; 153*c66ec88fSEmmanuel Vadot compatible = "arm,cortex-a15"; 154*c66ec88fSEmmanuel Vadot cci-control-port = <&cci_control1>; 155*c66ec88fSEmmanuel Vadot reg = <0x1>; 156*c66ec88fSEmmanuel Vadot }; 157*c66ec88fSEmmanuel Vadot 158*c66ec88fSEmmanuel Vadot CPU2: cpu@100 { 159*c66ec88fSEmmanuel Vadot device_type = "cpu"; 160*c66ec88fSEmmanuel Vadot compatible = "arm,cortex-a7"; 161*c66ec88fSEmmanuel Vadot cci-control-port = <&cci_control2>; 162*c66ec88fSEmmanuel Vadot reg = <0x100>; 163*c66ec88fSEmmanuel Vadot }; 164*c66ec88fSEmmanuel Vadot 165*c66ec88fSEmmanuel Vadot CPU3: cpu@101 { 166*c66ec88fSEmmanuel Vadot device_type = "cpu"; 167*c66ec88fSEmmanuel Vadot compatible = "arm,cortex-a7"; 168*c66ec88fSEmmanuel Vadot cci-control-port = <&cci_control2>; 169*c66ec88fSEmmanuel Vadot reg = <0x101>; 170*c66ec88fSEmmanuel Vadot }; 171*c66ec88fSEmmanuel Vadot 172*c66ec88fSEmmanuel Vadot }; 173*c66ec88fSEmmanuel Vadot 174*c66ec88fSEmmanuel Vadot dma0: dma@3000000 { 175*c66ec88fSEmmanuel Vadot compatible = "arm,pl330", "arm,primecell"; 176*c66ec88fSEmmanuel Vadot cci-control-port = <&cci_control0>; 177*c66ec88fSEmmanuel Vadot reg = <0x0 0x3000000 0x0 0x1000>; 178*c66ec88fSEmmanuel Vadot interrupts = <10>; 179*c66ec88fSEmmanuel Vadot #dma-cells = <1>; 180*c66ec88fSEmmanuel Vadot #dma-channels = <8>; 181*c66ec88fSEmmanuel Vadot #dma-requests = <32>; 182*c66ec88fSEmmanuel Vadot }; 183*c66ec88fSEmmanuel Vadot 184*c66ec88fSEmmanuel Vadot cci@2c090000 { 185*c66ec88fSEmmanuel Vadot compatible = "arm,cci-400"; 186*c66ec88fSEmmanuel Vadot #address-cells = <1>; 187*c66ec88fSEmmanuel Vadot #size-cells = <1>; 188*c66ec88fSEmmanuel Vadot reg = <0x0 0x2c090000 0 0x1000>; 189*c66ec88fSEmmanuel Vadot ranges = <0x0 0x0 0x2c090000 0x10000>; 190*c66ec88fSEmmanuel Vadot 191*c66ec88fSEmmanuel Vadot cci_control0: slave-if@1000 { 192*c66ec88fSEmmanuel Vadot compatible = "arm,cci-400-ctrl-if"; 193*c66ec88fSEmmanuel Vadot interface-type = "ace-lite"; 194*c66ec88fSEmmanuel Vadot reg = <0x1000 0x1000>; 195*c66ec88fSEmmanuel Vadot }; 196*c66ec88fSEmmanuel Vadot 197*c66ec88fSEmmanuel Vadot cci_control1: slave-if@4000 { 198*c66ec88fSEmmanuel Vadot compatible = "arm,cci-400-ctrl-if"; 199*c66ec88fSEmmanuel Vadot interface-type = "ace"; 200*c66ec88fSEmmanuel Vadot reg = <0x4000 0x1000>; 201*c66ec88fSEmmanuel Vadot }; 202*c66ec88fSEmmanuel Vadot 203*c66ec88fSEmmanuel Vadot cci_control2: slave-if@5000 { 204*c66ec88fSEmmanuel Vadot compatible = "arm,cci-400-ctrl-if"; 205*c66ec88fSEmmanuel Vadot interface-type = "ace"; 206*c66ec88fSEmmanuel Vadot reg = <0x5000 0x1000>; 207*c66ec88fSEmmanuel Vadot }; 208*c66ec88fSEmmanuel Vadot 209*c66ec88fSEmmanuel Vadot pmu@9000 { 210*c66ec88fSEmmanuel Vadot compatible = "arm,cci-400-pmu"; 211*c66ec88fSEmmanuel Vadot reg = <0x9000 0x5000>; 212*c66ec88fSEmmanuel Vadot interrupts = <0 101 4>, 213*c66ec88fSEmmanuel Vadot <0 102 4>, 214*c66ec88fSEmmanuel Vadot <0 103 4>, 215*c66ec88fSEmmanuel Vadot <0 104 4>, 216*c66ec88fSEmmanuel Vadot <0 105 4>; 217*c66ec88fSEmmanuel Vadot }; 218*c66ec88fSEmmanuel Vadot }; 219*c66ec88fSEmmanuel Vadot 220*c66ec88fSEmmanuel VadotThis CCI node corresponds to a CCI component whose control registers sits 221*c66ec88fSEmmanuel Vadotat address 0x000000002c090000. 222*c66ec88fSEmmanuel VadotCCI slave interface @0x000000002c091000 is connected to dma controller dma0. 223*c66ec88fSEmmanuel VadotCCI slave interface @0x000000002c094000 is connected to CPUs {CPU0, CPU1}; 224*c66ec88fSEmmanuel VadotCCI slave interface @0x000000002c095000 is connected to CPUs {CPU2, CPU3}; 225