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