========================================== 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: 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: 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