162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/cache/l2c2x0.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: ARM L2 Cache Controller
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Rob Herring <robh@kernel.org>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |+
1362306a36Sopenharmony_ci  ARM cores often have a separate L2C210/L2C220/L2C310 (also known as PL210/
1462306a36Sopenharmony_ci  PL220/PL310 and variants) based level 2 cache controller. All these various
1562306a36Sopenharmony_ci  implementations of the L2 cache controller have compatible programming
1662306a36Sopenharmony_ci  models (Note 1). Some of the properties that are just prefixed "cache-*" are
1762306a36Sopenharmony_ci  taken from section 3.7.3 of the Devicetree Specification which can be found
1862306a36Sopenharmony_ci  at:
1962306a36Sopenharmony_ci  https://www.devicetree.org/specifications/
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci  Note 1: The description in this document doesn't apply to integrated L2
2262306a36Sopenharmony_ci    cache controllers as found in e.g. Cortex-A15/A7/A57/A53. These
2362306a36Sopenharmony_ci    integrated L2 controllers are assumed to be all preconfigured by
2462306a36Sopenharmony_ci    early secure boot code. Thus no need to deal with their configuration
2562306a36Sopenharmony_ci    in the kernel at all.
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciallOf:
2862306a36Sopenharmony_ci  - $ref: /schemas/cache-controller.yaml#
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciproperties:
3162306a36Sopenharmony_ci  compatible:
3262306a36Sopenharmony_ci    oneOf:
3362306a36Sopenharmony_ci      - enum:
3462306a36Sopenharmony_ci          - arm,pl310-cache
3562306a36Sopenharmony_ci          - arm,l220-cache
3662306a36Sopenharmony_ci          - arm,l210-cache
3762306a36Sopenharmony_ci            # DEPRECATED by "brcm,bcm11351-a2-pl310-cache"
3862306a36Sopenharmony_ci          - bcm,bcm11351-a2-pl310-cache
3962306a36Sopenharmony_ci            # For Broadcom bcm11351 chipset where an
4062306a36Sopenharmony_ci            # offset needs to be added to the address before passing down to the L2
4162306a36Sopenharmony_ci            # cache controller
4262306a36Sopenharmony_ci          - brcm,bcm11351-a2-pl310-cache
4362306a36Sopenharmony_ci            # Marvell Controller designed to be
4462306a36Sopenharmony_ci            # compatible with the ARM one, with system cache mode (meaning
4562306a36Sopenharmony_ci            # maintenance operations on L1 are broadcasted to the L2 and L2
4662306a36Sopenharmony_ci            # performs the same operation).
4762306a36Sopenharmony_ci          - marvell,aurora-system-cache
4862306a36Sopenharmony_ci            # Marvell Controller designed to be
4962306a36Sopenharmony_ci            # compatible with the ARM one with outer cache mode.
5062306a36Sopenharmony_ci          - marvell,aurora-outer-cache
5162306a36Sopenharmony_ci      - items:
5262306a36Sopenharmony_ci           # Marvell Tauros3 cache controller, compatible
5362306a36Sopenharmony_ci           # with arm,pl310-cache controller.
5462306a36Sopenharmony_ci          - const: marvell,tauros3-cache
5562306a36Sopenharmony_ci          - const: arm,pl310-cache
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci  cache-level:
5862306a36Sopenharmony_ci    const: 2
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci  cache-unified: true
6162306a36Sopenharmony_ci  cache-size: true
6262306a36Sopenharmony_ci  cache-sets: true
6362306a36Sopenharmony_ci  cache-block-size: true
6462306a36Sopenharmony_ci  cache-line-size: true
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci  reg:
6762306a36Sopenharmony_ci    maxItems: 1
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci  arm,data-latency:
7062306a36Sopenharmony_ci    description: Cycles of latency for Data RAM accesses. Specifies 3 cells of
7162306a36Sopenharmony_ci      read, write and setup latencies. Minimum valid values are 1. Controllers
7262306a36Sopenharmony_ci      without setup latency control should use a value of 0.
7362306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
7462306a36Sopenharmony_ci    minItems: 2
7562306a36Sopenharmony_ci    maxItems: 3
7662306a36Sopenharmony_ci    items:
7762306a36Sopenharmony_ci      minimum: 0
7862306a36Sopenharmony_ci      maximum: 8
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci  arm,tag-latency:
8162306a36Sopenharmony_ci    description: Cycles of latency for Tag RAM accesses. Specifies 3 cells of
8262306a36Sopenharmony_ci      read, write and setup latencies. Controllers without setup latency control
8362306a36Sopenharmony_ci      should use 0. Controllers without separate read and write Tag RAM latency
8462306a36Sopenharmony_ci      values should only use the first cell.
8562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
8662306a36Sopenharmony_ci    minItems: 1
8762306a36Sopenharmony_ci    maxItems: 3
8862306a36Sopenharmony_ci    items:
8962306a36Sopenharmony_ci      minimum: 0
9062306a36Sopenharmony_ci      maximum: 8
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci  arm,dirty-latency:
9362306a36Sopenharmony_ci    description: Cycles of latency for Dirty RAMs. This is a single cell.
9462306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
9562306a36Sopenharmony_ci    minimum: 1
9662306a36Sopenharmony_ci    maximum: 8
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci  arm,filter-ranges:
9962306a36Sopenharmony_ci    description: <start length> Starting address and length of window to
10062306a36Sopenharmony_ci      filter. Addresses in the filter window are directed to the M1 port. Other
10162306a36Sopenharmony_ci      addresses will go to the M0 port.
10262306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32-array
10362306a36Sopenharmony_ci    items:
10462306a36Sopenharmony_ci      minItems: 2
10562306a36Sopenharmony_ci      maxItems: 2
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci  arm,io-coherent:
10862306a36Sopenharmony_ci    description: indicates that the system is operating in an hardware
10962306a36Sopenharmony_ci      I/O coherent mode. Valid only when the arm,pl310-cache compatible
11062306a36Sopenharmony_ci      string is used.
11162306a36Sopenharmony_ci    type: boolean
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci  interrupts:
11462306a36Sopenharmony_ci    # Either a single combined interrupt or up to 9 individual interrupts
11562306a36Sopenharmony_ci    minItems: 1
11662306a36Sopenharmony_ci    maxItems: 9
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci  cache-id-part:
11962306a36Sopenharmony_ci    description: cache id part number to be used if it is not present
12062306a36Sopenharmony_ci      on hardware
12162306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci  wt-override:
12462306a36Sopenharmony_ci    description: If present then L2 is forced to Write through mode
12562306a36Sopenharmony_ci    type: boolean
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci  arm,double-linefill:
12862306a36Sopenharmony_ci    description: Override double linefill enable setting. Enable if
12962306a36Sopenharmony_ci      non-zero, disable if zero.
13062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
13162306a36Sopenharmony_ci    enum: [0, 1]
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci  arm,double-linefill-incr:
13462306a36Sopenharmony_ci    description: Override double linefill on INCR read. Enable
13562306a36Sopenharmony_ci      if non-zero, disable if zero.
13662306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
13762306a36Sopenharmony_ci    enum: [0, 1]
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci  arm,double-linefill-wrap:
14062306a36Sopenharmony_ci    description: Override double linefill on WRAP read. Enable
14162306a36Sopenharmony_ci      if non-zero, disable if zero.
14262306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
14362306a36Sopenharmony_ci    enum: [0, 1]
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci  arm,prefetch-drop:
14662306a36Sopenharmony_ci    description: Override prefetch drop enable setting. Enable if non-zero,
14762306a36Sopenharmony_ci      disable if zero.
14862306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
14962306a36Sopenharmony_ci    enum: [0, 1]
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci  arm,prefetch-offset:
15262306a36Sopenharmony_ci    description: Override prefetch offset value.
15362306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
15462306a36Sopenharmony_ci    enum: [0, 1, 2, 3, 4, 5, 6, 7, 15, 23, 31]
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci  arm,shared-override:
15762306a36Sopenharmony_ci    description: The default behavior of the L220 or PL310 cache
15862306a36Sopenharmony_ci      controllers with respect to the shareable attribute is to transform "normal
15962306a36Sopenharmony_ci      memory non-cacheable transactions" into "cacheable no allocate" (for reads)
16062306a36Sopenharmony_ci      or "write through no write allocate" (for writes).
16162306a36Sopenharmony_ci      On systems where this may cause DMA buffer corruption, this property must
16262306a36Sopenharmony_ci      be specified to indicate that such transforms are precluded.
16362306a36Sopenharmony_ci    type: boolean
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci  arm,parity-enable:
16662306a36Sopenharmony_ci    description: enable parity checking on the L2 cache (L220 or PL310).
16762306a36Sopenharmony_ci    type: boolean
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci  arm,parity-disable:
17062306a36Sopenharmony_ci    description: disable parity checking on the L2 cache (L220 or PL310).
17162306a36Sopenharmony_ci    type: boolean
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci  marvell,ecc-enable:
17462306a36Sopenharmony_ci    description: enable ECC protection on the L2 cache
17562306a36Sopenharmony_ci    type: boolean
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci  arm,outer-sync-disable:
17862306a36Sopenharmony_ci    description: disable the outer sync operation on the L2 cache.
17962306a36Sopenharmony_ci      Some core tiles, especially ARM PB11MPCore have a faulty L220 cache that
18062306a36Sopenharmony_ci      will randomly hang unless outer sync operations are disabled.
18162306a36Sopenharmony_ci    type: boolean
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci  prefetch-data:
18462306a36Sopenharmony_ci    description: |
18562306a36Sopenharmony_ci      Data prefetch. Value: <0> (forcibly disable), <1>
18662306a36Sopenharmony_ci      (forcibly enable), property absent (retain settings set by firmware)
18762306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
18862306a36Sopenharmony_ci    enum: [0, 1]
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ci  prefetch-instr:
19162306a36Sopenharmony_ci    description: |
19262306a36Sopenharmony_ci      Instruction prefetch. Value: <0> (forcibly disable),
19362306a36Sopenharmony_ci      <1> (forcibly enable), property absent (retain settings set by
19462306a36Sopenharmony_ci      firmware)
19562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
19662306a36Sopenharmony_ci    enum: [0, 1]
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ci  arm,dynamic-clock-gating:
19962306a36Sopenharmony_ci    description: |
20062306a36Sopenharmony_ci      L2 dynamic clock gating. Value: <0> (forcibly
20162306a36Sopenharmony_ci      disable), <1> (forcibly enable), property absent (OS specific behavior,
20262306a36Sopenharmony_ci      preferably retain firmware settings)
20362306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
20462306a36Sopenharmony_ci    enum: [0, 1]
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci  arm,standby-mode:
20762306a36Sopenharmony_ci    description: L2 standby mode enable. Value <0> (forcibly disable),
20862306a36Sopenharmony_ci      <1> (forcibly enable), property absent (OS specific behavior,
20962306a36Sopenharmony_ci      preferably retain firmware settings)
21062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
21162306a36Sopenharmony_ci    enum: [0, 1]
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci  arm,early-bresp-disable:
21462306a36Sopenharmony_ci    description: Disable the CA9 optimization Early BRESP (PL310)
21562306a36Sopenharmony_ci    type: boolean
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_ci  arm,full-line-zero-disable:
21862306a36Sopenharmony_ci    description: Disable the CA9 optimization Full line of zero
21962306a36Sopenharmony_ci      write (PL310)
22062306a36Sopenharmony_ci    type: boolean
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_cirequired:
22362306a36Sopenharmony_ci  - compatible
22462306a36Sopenharmony_ci  - cache-unified
22562306a36Sopenharmony_ci  - reg
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ciadditionalProperties: false
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ciexamples:
23062306a36Sopenharmony_ci  - |
23162306a36Sopenharmony_ci    cache-controller@fff12000 {
23262306a36Sopenharmony_ci        compatible = "arm,pl310-cache";
23362306a36Sopenharmony_ci        reg = <0xfff12000 0x1000>;
23462306a36Sopenharmony_ci        arm,data-latency = <1 1 1>;
23562306a36Sopenharmony_ci        arm,tag-latency = <2 2 2>;
23662306a36Sopenharmony_ci        arm,filter-ranges = <0x80000000 0x8000000>;
23762306a36Sopenharmony_ci        cache-unified;
23862306a36Sopenharmony_ci        cache-level = <2>;
23962306a36Sopenharmony_ci        interrupts = <45>;
24062306a36Sopenharmony_ci    };
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_ci...
243