cci.txt 6.2 KB

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