blob: a9594f02650661237391b3ceb0f71bb2add9bde7 [file] [log] [blame]
==========================================
ARM processors cache binding description
==========================================
Device tree bindings for ARM processor caches adhere to the cache bindings
described in [3], in section 3.8 for multi-level and shared caches.
On ARM based systems most of the cache properties related to cache
geometry are probeable in HW, hence, unless otherwise stated, the properties
defined in ePAPR for multi-level and shared caches are to be considered
optional by default.
On ARM, caches are either architected (directly controlled by the processor
through coprocessor instructions and tightly coupled with the processor
implementation) or unarchitected (controlled through a memory mapped
interface, implemented as a stand-alone IP external to the processor
implementation).
This document provides the device tree bindings for ARM architected caches.
- ARM architected cache node
Description: must be a direct child of the cpu node. A system
can contain multiple architected cache nodes per cpu node,
linked through the next-level-cache phandle. The
next-level-cache property in the cpu node points to
the first level of architected cache for the CPU.
The next-level-cache property in architected cache nodes
points to the respective next level of caching in the
hierarchy. An architected cache node with an empty or
missing next-level-cache property represents the last
architected cache level for the CPU.
On ARM v7 and v8 architectures, the order in which cache
nodes are linked through the next-level-cache phandle must
follow the ordering specified in the processors CLIDR (v7)
and CLIDR_EL1 (v8) registers, as described in [1][2],
implying that a cache node pointed at by a
next-level-cache phandle must correspond to a level
defined in CLIDR (v7) and CLIDR_EL1 (v8) greater than the
one the cache node containing the next-level-cache
phandle corresponds to.
Since on ARM most of the cache properties are probeable in HW the
properties described in [3] - section 3.8 multi-level and shared
caches - shall be considered optional, with the following properties
updates, specific for the ARM architected cache node.
- compatible
Usage: Required
Value type: <string>
Definition: value shall be "arm,arch-cache".
- interrupts
Usage: Optional
Value type: See definition
Definition: standard device tree property [3] that defines
the interrupt line associated with the cache.
The property can be accompanied by an
interrupt-names property, as described in [4].
- power-domain
Usage: Optional
Value type: phandle
Definition: A phandle and power domain specifier as defined by
bindings of power controller specified by the
phandle [5].
- qcom,dump-size
Usage: Optional
Value type: <integer>
Definition: The memory size needed to contain a copy of the
cache data and associated tag ram.
size = nways * nsets * (bytes per cache line +
bytes tag ram per line)
Example(dual-cluster big.LITTLE system 32-bit)
cpus {
#size-cells = <0>;
#address-cells = <1>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x0>;
next-level-cache = <&L1_0>;
L1_0: l1-cache {
compatible = "arm,arch-cache";
next-level-cache = <&L2_0>;
};
L2_0: l2-cache {
compatible = "arm,arch-cache";
};
};
cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x1>;
next-level-cache = <&L1_1>;
L1_1: l1-cache {
compatible = "arm,arch-cache";
next-level-cache = <&L2_0>;
};
};
cpu@2 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x2>;
next-level-cache = <&L1_2>;
L1_2: l1-cache {
compatible = "arm,arch-cache";
next-level-cache = <&L2_0>;
};
};
cpu@3 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x3>;
next-level-cache = <&L1_3>;
L1_3: l1-cache {
compatible = "arm,arch-cache";
next-level-cache = <&L2_0>;
};
};
cpu@100 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x100>;
next-level-cache = <&L1_4>;
L1_4: l1-cache {
compatible = "arm,arch-cache";
next-level-cache = <&L2_1>;
};
L2_1: l2-cache {
compatible = "arm,arch-cache";
};
};
cpu@101 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x101>;
next-level-cache = <&L1_5>;
L1_5: l1-cache {
compatible = "arm,arch-cache";
next-level-cache = <&L2_1>;
};
};
cpu@102 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x102>;
next-level-cache = <&L1_6>;
L1_6: l1-cache {
compatible = "arm,arch-cache";
next-level-cache = <&L2_1>;
};
};
cpu@103 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x103>;
next-level-cache = <&L1_7>;
L1_7: l1-cache {
compatible = "arm,arch-cache";
next-level-cache = <&L2_1>;
};
};
};
[1] ARMv7-AR Reference Manual
http://infocenter.arm.com/help/index.jsp
[2] ARMv8-A Reference Manual
http://infocenter.arm.com/help/index.jsp
[3] ePAPR standard
https://www.power.org/documentation/epapr-version-1-1/
[4] Kernel documentation - resource property bindings
Documentation/devicetree/bindings/resource-names.txt
[5] Kernel documentation - power domain bindings
Documentation/devicetree/bindings/power/power_domain.txt