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