xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/arm/l2c2x0.yaml (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun%YAML 1.2
3*4882a593Smuzhiyun---
4*4882a593Smuzhiyun$id: http://devicetree.org/schemas/arm/l2c2x0.yaml#
5*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml#
6*4882a593Smuzhiyun
7*4882a593Smuzhiyuntitle: ARM L2 Cache Controller
8*4882a593Smuzhiyun
9*4882a593Smuzhiyunmaintainers:
10*4882a593Smuzhiyun  - Rob Herring <robh@kernel.org>
11*4882a593Smuzhiyun
12*4882a593Smuzhiyundescription: |+
13*4882a593Smuzhiyun  ARM cores often have a separate L2C210/L2C220/L2C310 (also known as PL210/
14*4882a593Smuzhiyun  PL220/PL310 and variants) based level 2 cache controller. All these various
15*4882a593Smuzhiyun  implementations of the L2 cache controller have compatible programming
16*4882a593Smuzhiyun  models (Note 1). Some of the properties that are just prefixed "cache-*" are
17*4882a593Smuzhiyun  taken from section 3.7.3 of the Devicetree Specification which can be found
18*4882a593Smuzhiyun  at:
19*4882a593Smuzhiyun  https://www.devicetree.org/specifications/
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun  Note 1: The description in this document doesn't apply to integrated L2
22*4882a593Smuzhiyun    cache controllers as found in e.g. Cortex-A15/A7/A57/A53. These
23*4882a593Smuzhiyun    integrated L2 controllers are assumed to be all preconfigured by
24*4882a593Smuzhiyun    early secure boot code. Thus no need to deal with their configuration
25*4882a593Smuzhiyun    in the kernel at all.
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunallOf:
28*4882a593Smuzhiyun  - $ref: /schemas/cache-controller.yaml#
29*4882a593Smuzhiyun
30*4882a593Smuzhiyunproperties:
31*4882a593Smuzhiyun  compatible:
32*4882a593Smuzhiyun    oneOf:
33*4882a593Smuzhiyun      - enum:
34*4882a593Smuzhiyun          - arm,pl310-cache
35*4882a593Smuzhiyun          - arm,l220-cache
36*4882a593Smuzhiyun          - arm,l210-cache
37*4882a593Smuzhiyun            # DEPRECATED by "brcm,bcm11351-a2-pl310-cache"
38*4882a593Smuzhiyun          - bcm,bcm11351-a2-pl310-cache
39*4882a593Smuzhiyun            # For Broadcom bcm11351 chipset where an
40*4882a593Smuzhiyun            # offset needs to be added to the address before passing down to the L2
41*4882a593Smuzhiyun            # cache controller
42*4882a593Smuzhiyun          - brcm,bcm11351-a2-pl310-cache
43*4882a593Smuzhiyun            # Marvell Controller designed to be
44*4882a593Smuzhiyun            # compatible with the ARM one, with system cache mode (meaning
45*4882a593Smuzhiyun            # maintenance operations on L1 are broadcasted to the L2 and L2
46*4882a593Smuzhiyun            # performs the same operation).
47*4882a593Smuzhiyun          - marvell,aurora-system-cache
48*4882a593Smuzhiyun            # Marvell Controller designed to be
49*4882a593Smuzhiyun            # compatible with the ARM one with outer cache mode.
50*4882a593Smuzhiyun          - marvell,aurora-outer-cache
51*4882a593Smuzhiyun      - items:
52*4882a593Smuzhiyun           # Marvell Tauros3 cache controller, compatible
53*4882a593Smuzhiyun           # with arm,pl310-cache controller.
54*4882a593Smuzhiyun          - const: marvell,tauros3-cache
55*4882a593Smuzhiyun          - const: arm,pl310-cache
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun  cache-level:
58*4882a593Smuzhiyun    const: 2
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun  cache-unified: true
61*4882a593Smuzhiyun  cache-size: true
62*4882a593Smuzhiyun  cache-sets: true
63*4882a593Smuzhiyun  cache-block-size: true
64*4882a593Smuzhiyun  cache-line-size: true
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun  reg:
67*4882a593Smuzhiyun    maxItems: 1
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun  arm,data-latency:
70*4882a593Smuzhiyun    description: Cycles of latency for Data RAM accesses. Specifies 3 cells of
71*4882a593Smuzhiyun      read, write and setup latencies. Minimum valid values are 1. Controllers
72*4882a593Smuzhiyun      without setup latency control should use a value of 0.
73*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32-array
74*4882a593Smuzhiyun    minItems: 2
75*4882a593Smuzhiyun    maxItems: 3
76*4882a593Smuzhiyun    items:
77*4882a593Smuzhiyun      minimum: 0
78*4882a593Smuzhiyun      maximum: 8
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun  arm,tag-latency:
81*4882a593Smuzhiyun    description: Cycles of latency for Tag RAM accesses. Specifies 3 cells of
82*4882a593Smuzhiyun      read, write and setup latencies. Controllers without setup latency control
83*4882a593Smuzhiyun      should use 0. Controllers without separate read and write Tag RAM latency
84*4882a593Smuzhiyun      values should only use the first cell.
85*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32-array
86*4882a593Smuzhiyun    minItems: 1
87*4882a593Smuzhiyun    maxItems: 3
88*4882a593Smuzhiyun    items:
89*4882a593Smuzhiyun      minimum: 0
90*4882a593Smuzhiyun      maximum: 8
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun  arm,dirty-latency:
93*4882a593Smuzhiyun    description: Cycles of latency for Dirty RAMs. This is a single cell.
94*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
95*4882a593Smuzhiyun    minimum: 1
96*4882a593Smuzhiyun    maximum: 8
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun  arm,filter-ranges:
99*4882a593Smuzhiyun    description: <start length> Starting address and length of window to
100*4882a593Smuzhiyun      filter. Addresses in the filter window are directed to the M1 port. Other
101*4882a593Smuzhiyun      addresses will go to the M0 port.
102*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32-array
103*4882a593Smuzhiyun    items:
104*4882a593Smuzhiyun      minItems: 2
105*4882a593Smuzhiyun      maxItems: 2
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun  arm,io-coherent:
108*4882a593Smuzhiyun    description: indicates that the system is operating in an hardware
109*4882a593Smuzhiyun      I/O coherent mode. Valid only when the arm,pl310-cache compatible
110*4882a593Smuzhiyun      string is used.
111*4882a593Smuzhiyun    type: boolean
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun  interrupts:
114*4882a593Smuzhiyun    # Either a single combined interrupt or up to 9 individual interrupts
115*4882a593Smuzhiyun    minItems: 1
116*4882a593Smuzhiyun    maxItems: 9
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun  cache-id-part:
119*4882a593Smuzhiyun    description: cache id part number to be used if it is not present
120*4882a593Smuzhiyun      on hardware
121*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun  wt-override:
124*4882a593Smuzhiyun    description: If present then L2 is forced to Write through mode
125*4882a593Smuzhiyun    type: boolean
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun  arm,double-linefill:
128*4882a593Smuzhiyun    description: Override double linefill enable setting. Enable if
129*4882a593Smuzhiyun      non-zero, disable if zero.
130*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
131*4882a593Smuzhiyun    enum: [0, 1]
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun  arm,double-linefill-incr:
134*4882a593Smuzhiyun    description: Override double linefill on INCR read. Enable
135*4882a593Smuzhiyun      if non-zero, disable if zero.
136*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
137*4882a593Smuzhiyun    enum: [0, 1]
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun  arm,double-linefill-wrap:
140*4882a593Smuzhiyun    description: Override double linefill on WRAP read. Enable
141*4882a593Smuzhiyun      if non-zero, disable if zero.
142*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
143*4882a593Smuzhiyun    enum: [0, 1]
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun  arm,prefetch-drop:
146*4882a593Smuzhiyun    description: Override prefetch drop enable setting. Enable if non-zero,
147*4882a593Smuzhiyun      disable if zero.
148*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
149*4882a593Smuzhiyun    enum: [0, 1]
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun  arm,prefetch-offset:
152*4882a593Smuzhiyun    description: Override prefetch offset value.
153*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
154*4882a593Smuzhiyun    enum: [0, 1, 2, 3, 4, 5, 6, 7, 15, 23, 31]
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun  arm,shared-override:
157*4882a593Smuzhiyun    description: The default behavior of the L220 or PL310 cache
158*4882a593Smuzhiyun      controllers with respect to the shareable attribute is to transform "normal
159*4882a593Smuzhiyun      memory non-cacheable transactions" into "cacheable no allocate" (for reads)
160*4882a593Smuzhiyun      or "write through no write allocate" (for writes).
161*4882a593Smuzhiyun      On systems where this may cause DMA buffer corruption, this property must
162*4882a593Smuzhiyun      be specified to indicate that such transforms are precluded.
163*4882a593Smuzhiyun    type: boolean
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun  arm,parity-enable:
166*4882a593Smuzhiyun    description: enable parity checking on the L2 cache (L220 or PL310).
167*4882a593Smuzhiyun    type: boolean
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun  arm,parity-disable:
170*4882a593Smuzhiyun    description: disable parity checking on the L2 cache (L220 or PL310).
171*4882a593Smuzhiyun    type: boolean
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun  marvell,ecc-enable:
174*4882a593Smuzhiyun    description: enable ECC protection on the L2 cache
175*4882a593Smuzhiyun    type: boolean
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun  arm,outer-sync-disable:
178*4882a593Smuzhiyun    description: disable the outer sync operation on the L2 cache.
179*4882a593Smuzhiyun      Some core tiles, especially ARM PB11MPCore have a faulty L220 cache that
180*4882a593Smuzhiyun      will randomly hang unless outer sync operations are disabled.
181*4882a593Smuzhiyun    type: boolean
182*4882a593Smuzhiyun
183*4882a593Smuzhiyun  prefetch-data:
184*4882a593Smuzhiyun    description: |
185*4882a593Smuzhiyun      Data prefetch. Value: <0> (forcibly disable), <1>
186*4882a593Smuzhiyun      (forcibly enable), property absent (retain settings set by firmware)
187*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
188*4882a593Smuzhiyun    enum: [0, 1]
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun  prefetch-instr:
191*4882a593Smuzhiyun    description: |
192*4882a593Smuzhiyun      Instruction prefetch. Value: <0> (forcibly disable),
193*4882a593Smuzhiyun      <1> (forcibly enable), property absent (retain settings set by
194*4882a593Smuzhiyun      firmware)
195*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
196*4882a593Smuzhiyun    enum: [0, 1]
197*4882a593Smuzhiyun
198*4882a593Smuzhiyun  arm,dynamic-clock-gating:
199*4882a593Smuzhiyun    description: |
200*4882a593Smuzhiyun      L2 dynamic clock gating. Value: <0> (forcibly
201*4882a593Smuzhiyun      disable), <1> (forcibly enable), property absent (OS specific behavior,
202*4882a593Smuzhiyun      preferably retain firmware settings)
203*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
204*4882a593Smuzhiyun    enum: [0, 1]
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun  arm,standby-mode:
207*4882a593Smuzhiyun    description: L2 standby mode enable. Value <0> (forcibly disable),
208*4882a593Smuzhiyun      <1> (forcibly enable), property absent (OS specific behavior,
209*4882a593Smuzhiyun      preferably retain firmware settings)
210*4882a593Smuzhiyun    $ref: /schemas/types.yaml#/definitions/uint32
211*4882a593Smuzhiyun    enum: [0, 1]
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun  arm,early-bresp-disable:
214*4882a593Smuzhiyun    description: Disable the CA9 optimization Early BRESP (PL310)
215*4882a593Smuzhiyun    type: boolean
216*4882a593Smuzhiyun
217*4882a593Smuzhiyun  arm,full-line-zero-disable:
218*4882a593Smuzhiyun    description: Disable the CA9 optimization Full line of zero
219*4882a593Smuzhiyun      write (PL310)
220*4882a593Smuzhiyun    type: boolean
221*4882a593Smuzhiyun
222*4882a593Smuzhiyunrequired:
223*4882a593Smuzhiyun  - compatible
224*4882a593Smuzhiyun  - cache-unified
225*4882a593Smuzhiyun  - reg
226*4882a593Smuzhiyun
227*4882a593SmuzhiyunadditionalProperties: false
228*4882a593Smuzhiyun
229*4882a593Smuzhiyunexamples:
230*4882a593Smuzhiyun  - |
231*4882a593Smuzhiyun    cache-controller@fff12000 {
232*4882a593Smuzhiyun        compatible = "arm,pl310-cache";
233*4882a593Smuzhiyun        reg = <0xfff12000 0x1000>;
234*4882a593Smuzhiyun        arm,data-latency = <1 1 1>;
235*4882a593Smuzhiyun        arm,tag-latency = <2 2 2>;
236*4882a593Smuzhiyun        arm,filter-ranges = <0x80000000 0x8000000>;
237*4882a593Smuzhiyun        cache-unified;
238*4882a593Smuzhiyun        cache-level = <2>;
239*4882a593Smuzhiyun        interrupts = <45>;
240*4882a593Smuzhiyun    };
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun...
243