1*dc8ea920SConor Dooley# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2*dc8ea920SConor Dooley# Copyright (C) 2020 SiFive, Inc.
3*dc8ea920SConor Dooley%YAML 1.2
4*dc8ea920SConor Dooley---
5*dc8ea920SConor Dooley$id: http://devicetree.org/schemas/cache/sifive,ccache0.yaml#
6*dc8ea920SConor Dooley$schema: http://devicetree.org/meta-schemas/core.yaml#
7*dc8ea920SConor Dooley
8*dc8ea920SConor Dooleytitle: SiFive Composable Cache Controller
9*dc8ea920SConor Dooley
10*dc8ea920SConor Dooleymaintainers:
11*dc8ea920SConor Dooley  - Paul Walmsley <paul.walmsley@sifive.com>
12*dc8ea920SConor Dooley
13*dc8ea920SConor Dooleydescription:
14*dc8ea920SConor Dooley  The SiFive Composable Cache Controller is used to provide access to fast copies
15*dc8ea920SConor Dooley  of memory for masters in a Core Complex. The Composable Cache Controller also
16*dc8ea920SConor Dooley  acts as directory-based coherency manager.
17*dc8ea920SConor Dooley  All the properties in ePAPR/DeviceTree specification applies for this platform.
18*dc8ea920SConor Dooley
19*dc8ea920SConor Dooleyselect:
20*dc8ea920SConor Dooley  properties:
21*dc8ea920SConor Dooley    compatible:
22*dc8ea920SConor Dooley      contains:
23*dc8ea920SConor Dooley        enum:
24*dc8ea920SConor Dooley          - sifive,ccache0
25*dc8ea920SConor Dooley          - sifive,fu540-c000-ccache
26*dc8ea920SConor Dooley          - sifive,fu740-c000-ccache
27*dc8ea920SConor Dooley
28*dc8ea920SConor Dooley  required:
29*dc8ea920SConor Dooley    - compatible
30*dc8ea920SConor Dooley
31*dc8ea920SConor Dooleyproperties:
32*dc8ea920SConor Dooley  compatible:
33*dc8ea920SConor Dooley    oneOf:
34*dc8ea920SConor Dooley      - items:
35*dc8ea920SConor Dooley          - enum:
36*dc8ea920SConor Dooley              - sifive,ccache0
37*dc8ea920SConor Dooley              - sifive,fu540-c000-ccache
38*dc8ea920SConor Dooley              - sifive,fu740-c000-ccache
39*dc8ea920SConor Dooley          - const: cache
40*dc8ea920SConor Dooley      - items:
41*dc8ea920SConor Dooley          - const: starfive,jh7110-ccache
42*dc8ea920SConor Dooley          - const: sifive,ccache0
43*dc8ea920SConor Dooley          - const: cache
44*dc8ea920SConor Dooley      - items:
45*dc8ea920SConor Dooley          - const: microchip,mpfs-ccache
46*dc8ea920SConor Dooley          - const: sifive,fu540-c000-ccache
47*dc8ea920SConor Dooley          - const: cache
48*dc8ea920SConor Dooley
49*dc8ea920SConor Dooley  cache-block-size:
50*dc8ea920SConor Dooley    const: 64
51*dc8ea920SConor Dooley
52*dc8ea920SConor Dooley  cache-level:
53*dc8ea920SConor Dooley    enum: [2, 3]
54*dc8ea920SConor Dooley
55*dc8ea920SConor Dooley  cache-sets:
56*dc8ea920SConor Dooley    enum: [1024, 2048]
57*dc8ea920SConor Dooley
58*dc8ea920SConor Dooley  cache-size:
59*dc8ea920SConor Dooley    const: 2097152
60*dc8ea920SConor Dooley
61*dc8ea920SConor Dooley  cache-unified: true
62*dc8ea920SConor Dooley
63*dc8ea920SConor Dooley  interrupts:
64*dc8ea920SConor Dooley    minItems: 3
65*dc8ea920SConor Dooley    items:
66*dc8ea920SConor Dooley      - description: DirError interrupt
67*dc8ea920SConor Dooley      - description: DataError interrupt
68*dc8ea920SConor Dooley      - description: DataFail interrupt
69*dc8ea920SConor Dooley      - description: DirFail interrupt
70*dc8ea920SConor Dooley
71*dc8ea920SConor Dooley  reg:
72*dc8ea920SConor Dooley    maxItems: 1
73*dc8ea920SConor Dooley
74*dc8ea920SConor Dooley  next-level-cache: true
75*dc8ea920SConor Dooley
76*dc8ea920SConor Dooley  memory-region:
77*dc8ea920SConor Dooley    maxItems: 1
78*dc8ea920SConor Dooley    description: |
79*dc8ea920SConor Dooley      The reference to the reserved-memory for the L2 Loosely Integrated Memory region.
80*dc8ea920SConor Dooley      The reserved memory node should be defined as per the bindings in reserved-memory.txt.
81*dc8ea920SConor Dooley
82*dc8ea920SConor DooleyallOf:
83*dc8ea920SConor Dooley  - $ref: /schemas/cache-controller.yaml#
84*dc8ea920SConor Dooley
85*dc8ea920SConor Dooley  - if:
86*dc8ea920SConor Dooley      properties:
87*dc8ea920SConor Dooley        compatible:
88*dc8ea920SConor Dooley          contains:
89*dc8ea920SConor Dooley            enum:
90*dc8ea920SConor Dooley              - sifive,fu740-c000-ccache
91*dc8ea920SConor Dooley              - starfive,jh7110-ccache
92*dc8ea920SConor Dooley              - microchip,mpfs-ccache
93*dc8ea920SConor Dooley
94*dc8ea920SConor Dooley    then:
95*dc8ea920SConor Dooley      properties:
96*dc8ea920SConor Dooley        interrupts:
97*dc8ea920SConor Dooley          description: |
98*dc8ea920SConor Dooley            Must contain entries for DirError, DataError, DataFail, DirFail signals.
99*dc8ea920SConor Dooley          minItems: 4
100*dc8ea920SConor Dooley
101*dc8ea920SConor Dooley    else:
102*dc8ea920SConor Dooley      properties:
103*dc8ea920SConor Dooley        interrupts:
104*dc8ea920SConor Dooley          description: |
105*dc8ea920SConor Dooley            Must contain entries for DirError, DataError and DataFail signals.
106*dc8ea920SConor Dooley          maxItems: 3
107*dc8ea920SConor Dooley
108*dc8ea920SConor Dooley  - if:
109*dc8ea920SConor Dooley      properties:
110*dc8ea920SConor Dooley        compatible:
111*dc8ea920SConor Dooley          contains:
112*dc8ea920SConor Dooley            enum:
113*dc8ea920SConor Dooley              - sifive,fu740-c000-ccache
114*dc8ea920SConor Dooley              - starfive,jh7110-ccache
115*dc8ea920SConor Dooley
116*dc8ea920SConor Dooley    then:
117*dc8ea920SConor Dooley      properties:
118*dc8ea920SConor Dooley        cache-sets:
119*dc8ea920SConor Dooley          const: 2048
120*dc8ea920SConor Dooley
121*dc8ea920SConor Dooley    else:
122*dc8ea920SConor Dooley      properties:
123*dc8ea920SConor Dooley        cache-sets:
124*dc8ea920SConor Dooley          const: 1024
125*dc8ea920SConor Dooley
126*dc8ea920SConor Dooley  - if:
127*dc8ea920SConor Dooley      properties:
128*dc8ea920SConor Dooley        compatible:
129*dc8ea920SConor Dooley          contains:
130*dc8ea920SConor Dooley            const: sifive,ccache0
131*dc8ea920SConor Dooley
132*dc8ea920SConor Dooley    then:
133*dc8ea920SConor Dooley      properties:
134*dc8ea920SConor Dooley        cache-level:
135*dc8ea920SConor Dooley          enum: [2, 3]
136*dc8ea920SConor Dooley
137*dc8ea920SConor Dooley    else:
138*dc8ea920SConor Dooley      properties:
139*dc8ea920SConor Dooley        cache-level:
140*dc8ea920SConor Dooley          const: 2
141*dc8ea920SConor Dooley
142*dc8ea920SConor DooleyadditionalProperties: false
143*dc8ea920SConor Dooley
144*dc8ea920SConor Dooleyrequired:
145*dc8ea920SConor Dooley  - compatible
146*dc8ea920SConor Dooley  - cache-block-size
147*dc8ea920SConor Dooley  - cache-level
148*dc8ea920SConor Dooley  - cache-sets
149*dc8ea920SConor Dooley  - cache-size
150*dc8ea920SConor Dooley  - cache-unified
151*dc8ea920SConor Dooley  - interrupts
152*dc8ea920SConor Dooley  - reg
153*dc8ea920SConor Dooley
154*dc8ea920SConor Dooleyexamples:
155*dc8ea920SConor Dooley  - |
156*dc8ea920SConor Dooley    cache-controller@2010000 {
157*dc8ea920SConor Dooley        compatible = "sifive,fu540-c000-ccache", "cache";
158*dc8ea920SConor Dooley        cache-block-size = <64>;
159*dc8ea920SConor Dooley        cache-level = <2>;
160*dc8ea920SConor Dooley        cache-sets = <1024>;
161*dc8ea920SConor Dooley        cache-size = <2097152>;
162*dc8ea920SConor Dooley        cache-unified;
163*dc8ea920SConor Dooley        reg = <0x2010000 0x1000>;
164*dc8ea920SConor Dooley        interrupt-parent = <&plic0>;
165*dc8ea920SConor Dooley        interrupts = <1>,
166*dc8ea920SConor Dooley                     <2>,
167*dc8ea920SConor Dooley                     <3>;
168*dc8ea920SConor Dooley        next-level-cache = <&L25>;
169*dc8ea920SConor Dooley        memory-region = <&l2_lim>;
170*dc8ea920SConor Dooley    };
171