xref: /freebsd/sys/contrib/device-tree/Bindings/arm/arm,cci-400.yaml (revision 7ef62cebc2f965b0f640263e179276928885e33d)
18cc087a1SEmmanuel Vadot# SPDX-License-Identifier: GPL-2.0
28cc087a1SEmmanuel Vadot%YAML 1.2
38cc087a1SEmmanuel Vadot---
48cc087a1SEmmanuel Vadot$id: http://devicetree.org/schemas/arm/arm,cci-400.yaml#
58cc087a1SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
68cc087a1SEmmanuel Vadot
7*7ef62cebSEmmanuel Vadottitle: ARM CCI Cache Coherent Interconnect
88cc087a1SEmmanuel Vadot
98cc087a1SEmmanuel Vadotmaintainers:
108cc087a1SEmmanuel Vadot  - Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
118cc087a1SEmmanuel Vadot
128cc087a1SEmmanuel Vadotdescription: >
138cc087a1SEmmanuel Vadot  ARM multi-cluster systems maintain intra-cluster coherency through a cache
148cc087a1SEmmanuel Vadot  coherent interconnect (CCI) that is capable of monitoring bus transactions
158cc087a1SEmmanuel Vadot  and manage coherency, TLB invalidations and memory barriers.
168cc087a1SEmmanuel Vadot
178cc087a1SEmmanuel Vadot  It allows snooping and distributed virtual memory message broadcast across
188cc087a1SEmmanuel Vadot  clusters, through memory mapped interface, with a global control register
198cc087a1SEmmanuel Vadot  space and multiple sets of interface control registers, one per slave
208cc087a1SEmmanuel Vadot  interface.
218cc087a1SEmmanuel Vadot
228cc087a1SEmmanuel Vadotproperties:
238cc087a1SEmmanuel Vadot  $nodename:
248cc087a1SEmmanuel Vadot    pattern: "^cci(@[0-9a-f]+)?$"
258cc087a1SEmmanuel Vadot
268cc087a1SEmmanuel Vadot  compatible:
278cc087a1SEmmanuel Vadot    enum:
288cc087a1SEmmanuel Vadot      - arm,cci-400
298cc087a1SEmmanuel Vadot      - arm,cci-500
308cc087a1SEmmanuel Vadot      - arm,cci-550
318cc087a1SEmmanuel Vadot
328cc087a1SEmmanuel Vadot  reg:
338cc087a1SEmmanuel Vadot    maxItems: 1
348cc087a1SEmmanuel Vadot    description: >
358cc087a1SEmmanuel Vadot      Specifies base physical address of CCI control registers common to all
368cc087a1SEmmanuel Vadot      interfaces.
378cc087a1SEmmanuel Vadot
388cc087a1SEmmanuel Vadot  "#address-cells": true
398cc087a1SEmmanuel Vadot  "#size-cells": true
408cc087a1SEmmanuel Vadot  ranges: true
418cc087a1SEmmanuel Vadot
428cc087a1SEmmanuel VadotpatternProperties:
438cc087a1SEmmanuel Vadot  "^slave-if@[0-9a-f]+$":
448cc087a1SEmmanuel Vadot    type: object
458cc087a1SEmmanuel Vadot
468cc087a1SEmmanuel Vadot    properties:
478cc087a1SEmmanuel Vadot      compatible:
488cc087a1SEmmanuel Vadot        const: arm,cci-400-ctrl-if
498cc087a1SEmmanuel Vadot
508cc087a1SEmmanuel Vadot      interface-type:
518cc087a1SEmmanuel Vadot        enum:
528cc087a1SEmmanuel Vadot          - ace
538cc087a1SEmmanuel Vadot          - ace-lite
548cc087a1SEmmanuel Vadot
558cc087a1SEmmanuel Vadot      reg:
568cc087a1SEmmanuel Vadot        maxItems: 1
578cc087a1SEmmanuel Vadot
588cc087a1SEmmanuel Vadot    required:
598cc087a1SEmmanuel Vadot      - compatible
608cc087a1SEmmanuel Vadot      - interface-type
618cc087a1SEmmanuel Vadot      - reg
628cc087a1SEmmanuel Vadot
638cc087a1SEmmanuel Vadot    additionalProperties: false
648cc087a1SEmmanuel Vadot
658cc087a1SEmmanuel Vadot  "^pmu@[0-9a-f]+$":
668cc087a1SEmmanuel Vadot    type: object
678cc087a1SEmmanuel Vadot
688cc087a1SEmmanuel Vadot    properties:
698cc087a1SEmmanuel Vadot      compatible:
708cc087a1SEmmanuel Vadot        oneOf:
718cc087a1SEmmanuel Vadot          - const: arm,cci-400-pmu,r0
728cc087a1SEmmanuel Vadot          - const: arm,cci-400-pmu,r1
738cc087a1SEmmanuel Vadot          - const: arm,cci-400-pmu
748cc087a1SEmmanuel Vadot            deprecated: true
758cc087a1SEmmanuel Vadot            description: >
768cc087a1SEmmanuel Vadot              Permitted only where OS has secure access to CCI registers
778cc087a1SEmmanuel Vadot          - const: arm,cci-500-pmu,r0
788cc087a1SEmmanuel Vadot          - const: arm,cci-550-pmu,r0
798cc087a1SEmmanuel Vadot
808cc087a1SEmmanuel Vadot      interrupts:
818cc087a1SEmmanuel Vadot        minItems: 1
828cc087a1SEmmanuel Vadot        maxItems: 8
838cc087a1SEmmanuel Vadot        description: >
848cc087a1SEmmanuel Vadot          List of counter overflow interrupts, one per counter. The interrupts
858cc087a1SEmmanuel Vadot          must be specified starting with the cycle counter overflow interrupt,
868cc087a1SEmmanuel Vadot          followed by counter0 overflow interrupt, counter1 overflow
878cc087a1SEmmanuel Vadot          interrupt,...  ,counterN overflow interrupt.
888cc087a1SEmmanuel Vadot
898cc087a1SEmmanuel Vadot          The CCI PMU has an interrupt signal for each counter. The number of
908cc087a1SEmmanuel Vadot          interrupts must be equal to the number of counters.
918cc087a1SEmmanuel Vadot
928cc087a1SEmmanuel Vadot      reg:
938cc087a1SEmmanuel Vadot        maxItems: 1
948cc087a1SEmmanuel Vadot
958cc087a1SEmmanuel Vadot    required:
968cc087a1SEmmanuel Vadot      - compatible
978cc087a1SEmmanuel Vadot      - interrupts
988cc087a1SEmmanuel Vadot      - reg
998cc087a1SEmmanuel Vadot
1008cc087a1SEmmanuel Vadot    additionalProperties: false
1018cc087a1SEmmanuel Vadot
1028cc087a1SEmmanuel Vadotrequired:
1038cc087a1SEmmanuel Vadot  - "#address-cells"
1048cc087a1SEmmanuel Vadot  - "#size-cells"
1058cc087a1SEmmanuel Vadot  - compatible
1068cc087a1SEmmanuel Vadot  - ranges
1078cc087a1SEmmanuel Vadot  - reg
1088cc087a1SEmmanuel Vadot
1098cc087a1SEmmanuel VadotadditionalProperties: false
1108cc087a1SEmmanuel Vadot
1118cc087a1SEmmanuel Vadotexamples:
1128cc087a1SEmmanuel Vadot  - |
1138cc087a1SEmmanuel Vadot      / {
1148cc087a1SEmmanuel Vadot          #address-cells = <2>;
1158cc087a1SEmmanuel Vadot          #size-cells = <2>;
1168cc087a1SEmmanuel Vadot
1178cc087a1SEmmanuel Vadot          compatible = "arm,vexpress,v2p-ca15_a7", "arm,vexpress";
1188cc087a1SEmmanuel Vadot          model = "V2P-CA15_CA7";
1198cc087a1SEmmanuel Vadot          arm,hbi = <0x249>;
1208cc087a1SEmmanuel Vadot          interrupt-parent = <&gic>;
1218cc087a1SEmmanuel Vadot
122c9ccf3a3SEmmanuel Vadot          gic: interrupt-controller {
123c9ccf3a3SEmmanuel Vadot              interrupt-controller;
124c9ccf3a3SEmmanuel Vadot              #interrupt-cells = <3>;
125c9ccf3a3SEmmanuel Vadot          };
126c9ccf3a3SEmmanuel Vadot
1278cc087a1SEmmanuel Vadot          /*
1288cc087a1SEmmanuel Vadot           * This CCI node corresponds to a CCI component whose control
1298cc087a1SEmmanuel Vadot           * registers sits at address 0x000000002c090000.
1308cc087a1SEmmanuel Vadot           *
1318cc087a1SEmmanuel Vadot           * CCI slave interface @0x000000002c091000 is connected to dma
1328cc087a1SEmmanuel Vadot           * controller dma0.
1338cc087a1SEmmanuel Vadot           *
1348cc087a1SEmmanuel Vadot           * CCI slave interface @0x000000002c094000 is connected to CPUs
1358cc087a1SEmmanuel Vadot           * {CPU0, CPU1};
1368cc087a1SEmmanuel Vadot           *
1378cc087a1SEmmanuel Vadot           * CCI slave interface @0x000000002c095000 is connected to CPUs
1388cc087a1SEmmanuel Vadot           * {CPU2, CPU3};
1398cc087a1SEmmanuel Vadot           */
1408cc087a1SEmmanuel Vadot
1418cc087a1SEmmanuel Vadot          cpus {
1428cc087a1SEmmanuel Vadot              #size-cells = <0>;
1438cc087a1SEmmanuel Vadot              #address-cells = <1>;
1448cc087a1SEmmanuel Vadot
1458cc087a1SEmmanuel Vadot              CPU0: cpu@0 {
1468cc087a1SEmmanuel Vadot                  device_type = "cpu";
1478cc087a1SEmmanuel Vadot                  compatible = "arm,cortex-a15";
1488cc087a1SEmmanuel Vadot                  cci-control-port = <&cci_control1>;
1498cc087a1SEmmanuel Vadot                  reg = <0x0>;
1508cc087a1SEmmanuel Vadot              };
1518cc087a1SEmmanuel Vadot
1528cc087a1SEmmanuel Vadot              CPU1: cpu@1 {
1538cc087a1SEmmanuel Vadot                  device_type = "cpu";
1548cc087a1SEmmanuel Vadot                  compatible = "arm,cortex-a15";
1558cc087a1SEmmanuel Vadot                  cci-control-port = <&cci_control1>;
1568cc087a1SEmmanuel Vadot                  reg = <0x1>;
1578cc087a1SEmmanuel Vadot              };
1588cc087a1SEmmanuel Vadot
1598cc087a1SEmmanuel Vadot              CPU2: cpu@100 {
1608cc087a1SEmmanuel Vadot                  device_type = "cpu";
1618cc087a1SEmmanuel Vadot                  compatible = "arm,cortex-a7";
1628cc087a1SEmmanuel Vadot                  cci-control-port = <&cci_control2>;
1638cc087a1SEmmanuel Vadot                  reg = <0x100>;
1648cc087a1SEmmanuel Vadot              };
1658cc087a1SEmmanuel Vadot
1668cc087a1SEmmanuel Vadot              CPU3: cpu@101 {
1678cc087a1SEmmanuel Vadot                  device_type = "cpu";
1688cc087a1SEmmanuel Vadot                  compatible = "arm,cortex-a7";
1698cc087a1SEmmanuel Vadot                  cci-control-port = <&cci_control2>;
1708cc087a1SEmmanuel Vadot                  reg = <0x101>;
1718cc087a1SEmmanuel Vadot              };
1728cc087a1SEmmanuel Vadot          };
1738cc087a1SEmmanuel Vadot
1748cc087a1SEmmanuel Vadot          cci@2c090000 {
1758cc087a1SEmmanuel Vadot              compatible = "arm,cci-400";
1768cc087a1SEmmanuel Vadot              #address-cells = <1>;
1778cc087a1SEmmanuel Vadot              #size-cells = <1>;
1788cc087a1SEmmanuel Vadot              reg = <0x0 0x2c090000 0 0x1000>;
1798cc087a1SEmmanuel Vadot              ranges = <0x0 0x0 0x2c090000 0x10000>;
1808cc087a1SEmmanuel Vadot
1818cc087a1SEmmanuel Vadot              cci_control0: slave-if@1000 {
1828cc087a1SEmmanuel Vadot                  compatible = "arm,cci-400-ctrl-if";
1838cc087a1SEmmanuel Vadot                  interface-type = "ace-lite";
1848cc087a1SEmmanuel Vadot                  reg = <0x1000 0x1000>;
1858cc087a1SEmmanuel Vadot              };
1868cc087a1SEmmanuel Vadot
1878cc087a1SEmmanuel Vadot              cci_control1: slave-if@4000 {
1888cc087a1SEmmanuel Vadot                  compatible = "arm,cci-400-ctrl-if";
1898cc087a1SEmmanuel Vadot                  interface-type = "ace";
1908cc087a1SEmmanuel Vadot                  reg = <0x4000 0x1000>;
1918cc087a1SEmmanuel Vadot              };
1928cc087a1SEmmanuel Vadot
1938cc087a1SEmmanuel Vadot              cci_control2: slave-if@5000 {
1948cc087a1SEmmanuel Vadot                  compatible = "arm,cci-400-ctrl-if";
1958cc087a1SEmmanuel Vadot                  interface-type = "ace";
1968cc087a1SEmmanuel Vadot                  reg = <0x5000 0x1000>;
1978cc087a1SEmmanuel Vadot              };
1988cc087a1SEmmanuel Vadot
1998cc087a1SEmmanuel Vadot              pmu@9000 {
2008cc087a1SEmmanuel Vadot                  compatible = "arm,cci-400-pmu";
2018cc087a1SEmmanuel Vadot                  reg = <0x9000 0x5000>;
2028cc087a1SEmmanuel Vadot                  interrupts = <0 101 4>,
2038cc087a1SEmmanuel Vadot                    <0 102 4>,
2048cc087a1SEmmanuel Vadot                    <0 103 4>,
2058cc087a1SEmmanuel Vadot                    <0 104 4>,
2068cc087a1SEmmanuel Vadot                    <0 105 4>;
2078cc087a1SEmmanuel Vadot              };
2088cc087a1SEmmanuel Vadot          };
2098cc087a1SEmmanuel Vadot      };
2108cc087a1SEmmanuel Vadot
2118cc087a1SEmmanuel Vadot...
212