162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci# Copyright (C) 2020 SiFive, Inc.
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/cache/sifive,ccache0.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: SiFive Composable Cache Controller
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Paul Walmsley <paul.walmsley@sifive.com>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription:
1462306a36Sopenharmony_ci  The SiFive Composable Cache Controller is used to provide access to fast copies
1562306a36Sopenharmony_ci  of memory for masters in a Core Complex. The Composable Cache Controller also
1662306a36Sopenharmony_ci  acts as directory-based coherency manager.
1762306a36Sopenharmony_ci  All the properties in ePAPR/DeviceTree specification applies for this platform.
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciselect:
2062306a36Sopenharmony_ci  properties:
2162306a36Sopenharmony_ci    compatible:
2262306a36Sopenharmony_ci      contains:
2362306a36Sopenharmony_ci        enum:
2462306a36Sopenharmony_ci          - sifive,ccache0
2562306a36Sopenharmony_ci          - sifive,fu540-c000-ccache
2662306a36Sopenharmony_ci          - sifive,fu740-c000-ccache
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci  required:
2962306a36Sopenharmony_ci    - compatible
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciproperties:
3262306a36Sopenharmony_ci  compatible:
3362306a36Sopenharmony_ci    oneOf:
3462306a36Sopenharmony_ci      - items:
3562306a36Sopenharmony_ci          - enum:
3662306a36Sopenharmony_ci              - sifive,ccache0
3762306a36Sopenharmony_ci              - sifive,fu540-c000-ccache
3862306a36Sopenharmony_ci              - sifive,fu740-c000-ccache
3962306a36Sopenharmony_ci          - const: cache
4062306a36Sopenharmony_ci      - items:
4162306a36Sopenharmony_ci          - const: starfive,jh7110-ccache
4262306a36Sopenharmony_ci          - const: sifive,ccache0
4362306a36Sopenharmony_ci          - const: cache
4462306a36Sopenharmony_ci      - items:
4562306a36Sopenharmony_ci          - const: microchip,mpfs-ccache
4662306a36Sopenharmony_ci          - const: sifive,fu540-c000-ccache
4762306a36Sopenharmony_ci          - const: cache
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci  cache-block-size:
5062306a36Sopenharmony_ci    const: 64
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci  cache-level:
5362306a36Sopenharmony_ci    enum: [2, 3]
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci  cache-sets:
5662306a36Sopenharmony_ci    enum: [1024, 2048]
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci  cache-size:
5962306a36Sopenharmony_ci    const: 2097152
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci  cache-unified: true
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci  interrupts:
6462306a36Sopenharmony_ci    minItems: 3
6562306a36Sopenharmony_ci    items:
6662306a36Sopenharmony_ci      - description: DirError interrupt
6762306a36Sopenharmony_ci      - description: DataError interrupt
6862306a36Sopenharmony_ci      - description: DataFail interrupt
6962306a36Sopenharmony_ci      - description: DirFail interrupt
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci  reg:
7262306a36Sopenharmony_ci    maxItems: 1
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci  next-level-cache: true
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci  memory-region:
7762306a36Sopenharmony_ci    maxItems: 1
7862306a36Sopenharmony_ci    description: |
7962306a36Sopenharmony_ci      The reference to the reserved-memory for the L2 Loosely Integrated Memory region.
8062306a36Sopenharmony_ci      The reserved memory node should be defined as per the bindings in reserved-memory.txt.
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciallOf:
8362306a36Sopenharmony_ci  - $ref: /schemas/cache-controller.yaml#
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci  - if:
8662306a36Sopenharmony_ci      properties:
8762306a36Sopenharmony_ci        compatible:
8862306a36Sopenharmony_ci          contains:
8962306a36Sopenharmony_ci            enum:
9062306a36Sopenharmony_ci              - sifive,fu740-c000-ccache
9162306a36Sopenharmony_ci              - starfive,jh7110-ccache
9262306a36Sopenharmony_ci              - microchip,mpfs-ccache
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci    then:
9562306a36Sopenharmony_ci      properties:
9662306a36Sopenharmony_ci        interrupts:
9762306a36Sopenharmony_ci          description: |
9862306a36Sopenharmony_ci            Must contain entries for DirError, DataError, DataFail, DirFail signals.
9962306a36Sopenharmony_ci          minItems: 4
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci    else:
10262306a36Sopenharmony_ci      properties:
10362306a36Sopenharmony_ci        interrupts:
10462306a36Sopenharmony_ci          description: |
10562306a36Sopenharmony_ci            Must contain entries for DirError, DataError and DataFail signals.
10662306a36Sopenharmony_ci          maxItems: 3
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci  - if:
10962306a36Sopenharmony_ci      properties:
11062306a36Sopenharmony_ci        compatible:
11162306a36Sopenharmony_ci          contains:
11262306a36Sopenharmony_ci            enum:
11362306a36Sopenharmony_ci              - sifive,fu740-c000-ccache
11462306a36Sopenharmony_ci              - starfive,jh7110-ccache
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci    then:
11762306a36Sopenharmony_ci      properties:
11862306a36Sopenharmony_ci        cache-sets:
11962306a36Sopenharmony_ci          const: 2048
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci    else:
12262306a36Sopenharmony_ci      properties:
12362306a36Sopenharmony_ci        cache-sets:
12462306a36Sopenharmony_ci          const: 1024
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci  - if:
12762306a36Sopenharmony_ci      properties:
12862306a36Sopenharmony_ci        compatible:
12962306a36Sopenharmony_ci          contains:
13062306a36Sopenharmony_ci            const: sifive,ccache0
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci    then:
13362306a36Sopenharmony_ci      properties:
13462306a36Sopenharmony_ci        cache-level:
13562306a36Sopenharmony_ci          enum: [2, 3]
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci    else:
13862306a36Sopenharmony_ci      properties:
13962306a36Sopenharmony_ci        cache-level:
14062306a36Sopenharmony_ci          const: 2
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ciadditionalProperties: false
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_cirequired:
14562306a36Sopenharmony_ci  - compatible
14662306a36Sopenharmony_ci  - cache-block-size
14762306a36Sopenharmony_ci  - cache-level
14862306a36Sopenharmony_ci  - cache-sets
14962306a36Sopenharmony_ci  - cache-size
15062306a36Sopenharmony_ci  - cache-unified
15162306a36Sopenharmony_ci  - interrupts
15262306a36Sopenharmony_ci  - reg
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ciexamples:
15562306a36Sopenharmony_ci  - |
15662306a36Sopenharmony_ci    cache-controller@2010000 {
15762306a36Sopenharmony_ci        compatible = "sifive,fu540-c000-ccache", "cache";
15862306a36Sopenharmony_ci        cache-block-size = <64>;
15962306a36Sopenharmony_ci        cache-level = <2>;
16062306a36Sopenharmony_ci        cache-sets = <1024>;
16162306a36Sopenharmony_ci        cache-size = <2097152>;
16262306a36Sopenharmony_ci        cache-unified;
16362306a36Sopenharmony_ci        reg = <0x2010000 0x1000>;
16462306a36Sopenharmony_ci        interrupt-parent = <&plic0>;
16562306a36Sopenharmony_ci        interrupts = <1>,
16662306a36Sopenharmony_ci                     <2>,
16762306a36Sopenharmony_ci                     <3>;
16862306a36Sopenharmony_ci        next-level-cache = <&L25>;
16962306a36Sopenharmony_ci        memory-region = <&l2_lim>;
17062306a36Sopenharmony_ci    };
171