1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2%YAML 1.2 3--- 4$id: http://devicetree.org/schemas/mmc/arm,pl18x.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: ARM PrimeCell MultiMedia Card Interface (MMCI) PL180 and PL181 8 9maintainers: 10 - Linus Walleij <linus.walleij@linaro.org> 11 - Ulf Hansson <ulf.hansson@linaro.org> 12 13description: 14 The ARM PrimeCells MMCI PL180 and PL181 provides an interface for 15 reading and writing to MultiMedia and SD cards alike. Over the years 16 vendors have use the VHDL code from ARM to create derivative MMC/SD/SDIO 17 host controllers with very similar characteristics. 18 19allOf: 20 - $ref: /schemas/arm/primecell.yaml# 21 - $ref: mmc-controller.yaml# 22 23# We need a select here so we don't match all nodes with 'arm,primecell' 24select: 25 properties: 26 compatible: 27 contains: 28 enum: 29 - arm,pl180 30 - arm,pl181 31 - arm,pl18x 32 required: 33 - compatible 34 35properties: 36 compatible: 37 oneOf: 38 - description: The first version of the block, simply called 39 PL180 and found in the ARM Integrator IM/PD1 logic module. 40 items: 41 - const: arm,pl180 42 - const: arm,primecell 43 - description: The improved version of the block, found in the 44 ARM Versatile and later reference designs. Further revisions 45 exist but get detected at runtime by reading some magic numbers 46 in the PrimeCell ID registers. 47 items: 48 - const: arm,pl181 49 - const: arm,primecell 50 - description: Wildcard entry that will let the operating system 51 inspect the PrimeCell ID registers to determine which hardware 52 variant of PL180 or PL181 this is. 53 items: 54 - const: arm,pl18x 55 - const: arm,primecell 56 - description: Entry for STMicroelectronics variant of PL18x. 57 This dedicated compatible is used by bootloaders. 58 items: 59 - const: st,stm32-sdmmc2 60 - const: arm,pl18x 61 - const: arm,primecell 62 63 clocks: 64 description: One or two clocks, the "apb_pclk" and the "MCLK" 65 which is the core block clock. The names are not compulsory. 66 minItems: 1 67 maxItems: 2 68 69 dmas: 70 maxItems: 2 71 72 dma-names: 73 oneOf: 74 - items: 75 - const: tx 76 - const: rx 77 - items: 78 - const: rx 79 - const: tx 80 81 power-domains: true 82 83 resets: 84 maxItems: 1 85 86 reg: 87 description: the MMIO memory window must be exactly 4KB (0x1000) and the 88 layout should provide the PrimeCell ID registers so that the device can 89 be discovered. On ST Micro variants, a second register window may be 90 defined if a delay block is present and used for tuning. 91 92 interrupts: 93 description: The first interrupt is the command interrupt and corresponds 94 to the event at the end of a command. The second interrupt is the 95 PIO (polled I/O) interrupt and occurs when the FIFO needs to be 96 emptied as part of a bulk read from the card. Some variants have these 97 two interrupts wired into the same line (logic OR) and in that case 98 only one interrupt may be provided. 99 minItems: 1 100 maxItems: 2 101 102 st,sig-dir-dat0: 103 $ref: /schemas/types.yaml#/definitions/flag 104 description: ST Micro-specific property, bus signal direction pins used for 105 DAT[0]. 106 107 st,sig-dir-dat2: 108 $ref: /schemas/types.yaml#/definitions/flag 109 description: ST Micro-specific property, bus signal direction pins used for 110 DAT[2]. 111 112 st,sig-dir-dat31: 113 $ref: /schemas/types.yaml#/definitions/flag 114 description: ST Micro-specific property, bus signal direction pins used for 115 DAT[3] and DAT[1]. 116 117 st,sig-dir-dat74: 118 $ref: /schemas/types.yaml#/definitions/flag 119 description: ST Micro-specific property, bus signal direction pins used for 120 DAT[7] and DAT[4]. 121 122 st,sig-dir-cmd: 123 $ref: /schemas/types.yaml#/definitions/flag 124 description: ST Micro-specific property, CMD signal direction used for 125 pin CMD. 126 127 st,sig-pin-fbclk: 128 $ref: /schemas/types.yaml#/definitions/flag 129 description: ST Micro-specific property, feedback clock FBCLK signal pin 130 in use. 131 132 st,sig-dir: 133 $ref: /schemas/types.yaml#/definitions/flag 134 description: ST Micro-specific property, signal direction polarity used for 135 pins CMD, DAT[0], DAT[1], DAT[2] and DAT[3]. 136 137 st,neg-edge: 138 $ref: /schemas/types.yaml#/definitions/flag 139 description: ST Micro-specific property, data and command phase relation, 140 generated on the sd clock falling edge. 141 142 st,use-ckin: 143 $ref: /schemas/types.yaml#/definitions/flag 144 description: ST Micro-specific property, use CKIN pin from an external 145 driver to sample the receive data (for example with a voltage switch 146 transceiver). 147 148 st,cmd-gpios: 149 maxItems: 1 150 description: 151 The GPIO matching the CMD pin. 152 153 st,ck-gpios: 154 maxItems: 1 155 description: 156 The GPIO matching the CK pin. 157 158 st,ckin-gpios: 159 maxItems: 1 160 description: 161 The GPIO matching the CKIN pin. 162 163dependencies: 164 st,cmd-gpios: [ "st,use-ckin" ] 165 st,ck-gpios: [ "st,use-ckin" ] 166 st,ckin-gpios: [ "st,use-ckin" ] 167 168unevaluatedProperties: false 169 170required: 171 - compatible 172 - reg 173 - interrupts 174 175examples: 176 - | 177 #include <dt-bindings/interrupt-controller/irq.h> 178 #include <dt-bindings/gpio/gpio.h> 179 180 mmc@5000 { 181 compatible = "arm,pl180", "arm,primecell"; 182 reg = <0x5000 0x1000>; 183 interrupts-extended = <&vic 22 &sic 1>; 184 clocks = <&xtal24mhz>, <&pclk>; 185 clock-names = "mclk", "apb_pclk"; 186 }; 187 188 mmc@80126000 { 189 compatible = "arm,pl18x", "arm,primecell"; 190 reg = <0x80126000 0x1000>; 191 interrupts = <0 60 IRQ_TYPE_LEVEL_HIGH>; 192 dmas = <&dma 29 0 0x2>, <&dma 29 0 0x0>; 193 dma-names = "rx", "tx"; 194 clocks = <&prcc_kclk 1 5>, <&prcc_pclk 1 5>; 195 clock-names = "sdi", "apb_pclk"; 196 max-frequency = <100000000>; 197 bus-width = <4>; 198 cap-sd-highspeed; 199 cap-mmc-highspeed; 200 cd-gpios = <&gpio2 31 0x4>; 201 st,sig-dir-dat0; 202 st,sig-dir-dat2; 203 st,sig-dir-cmd; 204 st,sig-pin-fbclk; 205 vmmc-supply = <&ab8500_ldo_aux3_reg>; 206 vqmmc-supply = <&vmmci>; 207 }; 208 209 mmc@101f6000 { 210 compatible = "arm,pl18x", "arm,primecell"; 211 reg = <0x101f6000 0x1000>; 212 clocks = <&sdiclk>, <&pclksdi>; 213 clock-names = "mclk", "apb_pclk"; 214 interrupt-parent = <&vica>; 215 interrupts = <22>; 216 max-frequency = <400000>; 217 bus-width = <4>; 218 cap-mmc-highspeed; 219 cap-sd-highspeed; 220 full-pwr-cycle; 221 st,sig-dir-dat0; 222 st,sig-dir-dat2; 223 st,sig-dir-dat31; 224 st,sig-dir-cmd; 225 st,sig-pin-fbclk; 226 vmmc-supply = <&vmmc_regulator>; 227 }; 228 229 mmc@52007000 { 230 compatible = "arm,pl18x", "arm,primecell"; 231 arm,primecell-periphid = <0x10153180>; 232 reg = <0x52007000 0x1000>; 233 interrupts = <49>; 234 clocks = <&rcc 0>; 235 clock-names = "apb_pclk"; 236 resets = <&rcc 1>; 237 cap-sd-highspeed; 238 cap-mmc-highspeed; 239 max-frequency = <120000000>; 240 }; 241