212 lines
5.5 KiB
YAML
212 lines
5.5 KiB
YAML
|
# SPDX-License-Identifier: GPL-2.0
|
||
|
%YAML 1.2
|
||
|
---
|
||
|
$id: http://devicetree.org/schemas/arm/arm,cci-400.yaml#
|
||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||
|
|
||
|
title: ARM CCI Cache Coherent Interconnect
|
||
|
|
||
|
maintainers:
|
||
|
- Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
|
||
|
|
||
|
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.
|
||
|
|
||
|
properties:
|
||
|
$nodename:
|
||
|
pattern: "^cci(@[0-9a-f]+)?$"
|
||
|
|
||
|
compatible:
|
||
|
enum:
|
||
|
- arm,cci-400
|
||
|
- arm,cci-500
|
||
|
- arm,cci-550
|
||
|
|
||
|
reg:
|
||
|
maxItems: 1
|
||
|
description: >
|
||
|
Specifies base physical address of CCI control registers common to all
|
||
|
interfaces.
|
||
|
|
||
|
"#address-cells": true
|
||
|
"#size-cells": true
|
||
|
ranges: true
|
||
|
|
||
|
patternProperties:
|
||
|
"^slave-if@[0-9a-f]+$":
|
||
|
type: object
|
||
|
|
||
|
properties:
|
||
|
compatible:
|
||
|
const: arm,cci-400-ctrl-if
|
||
|
|
||
|
interface-type:
|
||
|
enum:
|
||
|
- ace
|
||
|
- ace-lite
|
||
|
|
||
|
reg:
|
||
|
maxItems: 1
|
||
|
|
||
|
required:
|
||
|
- compatible
|
||
|
- interface-type
|
||
|
- reg
|
||
|
|
||
|
additionalProperties: false
|
||
|
|
||
|
"^pmu@[0-9a-f]+$":
|
||
|
type: object
|
||
|
|
||
|
properties:
|
||
|
compatible:
|
||
|
oneOf:
|
||
|
- const: arm,cci-400-pmu,r0
|
||
|
- const: arm,cci-400-pmu,r1
|
||
|
- const: arm,cci-400-pmu
|
||
|
deprecated: true
|
||
|
description: >
|
||
|
Permitted only where OS has secure access to CCI registers
|
||
|
- const: arm,cci-500-pmu,r0
|
||
|
- const: arm,cci-550-pmu,r0
|
||
|
|
||
|
interrupts:
|
||
|
minItems: 1
|
||
|
maxItems: 8
|
||
|
description: >
|
||
|
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.
|
||
|
|
||
|
reg:
|
||
|
maxItems: 1
|
||
|
|
||
|
required:
|
||
|
- compatible
|
||
|
- interrupts
|
||
|
- reg
|
||
|
|
||
|
additionalProperties: false
|
||
|
|
||
|
required:
|
||
|
- "#address-cells"
|
||
|
- "#size-cells"
|
||
|
- compatible
|
||
|
- ranges
|
||
|
- reg
|
||
|
|
||
|
additionalProperties: false
|
||
|
|
||
|
examples:
|
||
|
- |
|
||
|
/ {
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <2>;
|
||
|
|
||
|
compatible = "arm,vexpress,v2p-ca15_a7", "arm,vexpress";
|
||
|
model = "V2P-CA15_CA7";
|
||
|
arm,hbi = <0x249>;
|
||
|
interrupt-parent = <&gic>;
|
||
|
|
||
|
gic: interrupt-controller {
|
||
|
interrupt-controller;
|
||
|
#interrupt-cells = <3>;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* 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};
|
||
|
*/
|
||
|
|
||
|
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>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
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>;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
...
|