1 /* 2 * 3 * Copyright (C) STMicroelectronics SA 2017 4 * Author(s): M'boumba Cedric Madianga <cedric.madianga@gmail.com> 5 * Pierre-Yves Mordret <pierre-yves.mordret@st.com> 6 * 7 * License terms: GPL V2.0. 8 * 9 * This program is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU General Public License version 2 as published by 11 * the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 16 * details. 17 * 18 * Driver for STM32 MDMA controller 19 * 20 * Inspired by stm32-dma.c and dma-jz4780.c 21 * 22 */ 23 24 #include <linux/clk.h> 25 #include <linux/delay.h> 26 #include <linux/dmaengine.h> 27 #include <linux/dma-mapping.h> 28 #include <linux/dmapool.h> 29 #include <linux/err.h> 30 #include <linux/init.h> 31 #include <linux/iopoll.h> 32 #include <linux/jiffies.h> 33 #include <linux/list.h> 34 #include <linux/log2.h> 35 #include <linux/module.h> 36 #include <linux/of.h> 37 #include <linux/of_device.h> 38 #include <linux/of_dma.h> 39 #include <linux/platform_device.h> 40 #include <linux/reset.h> 41 #include <linux/slab.h> 42 43 #include "virt-dma.h" 44 45 /* MDMA Generic getter/setter */ 46 #define STM32_MDMA_SHIFT(n) (ffs(n) - 1) 47 #define STM32_MDMA_SET(n, mask) (((n) << STM32_MDMA_SHIFT(mask)) & \ 48 (mask)) 49 #define STM32_MDMA_GET(n, mask) (((n) & (mask)) >> \ 50 STM32_MDMA_SHIFT(mask)) 51 52 #define STM32_MDMA_GISR0 0x0000 /* MDMA Int Status Reg 1 */ 53 #define STM32_MDMA_GISR1 0x0004 /* MDMA Int Status Reg 2 */ 54 55 /* MDMA Channel x interrupt/status register */ 56 #define STM32_MDMA_CISR(x) (0x40 + 0x40 * (x)) /* x = 0..62 */ 57 #define STM32_MDMA_CISR_CRQA BIT(16) 58 #define STM32_MDMA_CISR_TCIF BIT(4) 59 #define STM32_MDMA_CISR_BTIF BIT(3) 60 #define STM32_MDMA_CISR_BRTIF BIT(2) 61 #define STM32_MDMA_CISR_CTCIF BIT(1) 62 #define STM32_MDMA_CISR_TEIF BIT(0) 63 64 /* MDMA Channel x interrupt flag clear register */ 65 #define STM32_MDMA_CIFCR(x) (0x44 + 0x40 * (x)) 66 #define STM32_MDMA_CIFCR_CLTCIF BIT(4) 67 #define STM32_MDMA_CIFCR_CBTIF BIT(3) 68 #define STM32_MDMA_CIFCR_CBRTIF BIT(2) 69 #define STM32_MDMA_CIFCR_CCTCIF BIT(1) 70 #define STM32_MDMA_CIFCR_CTEIF BIT(0) 71 #define STM32_MDMA_CIFCR_CLEAR_ALL (STM32_MDMA_CIFCR_CLTCIF \ 72 | STM32_MDMA_CIFCR_CBTIF \ 73 | STM32_MDMA_CIFCR_CBRTIF \ 74 | STM32_MDMA_CIFCR_CCTCIF \ 75 | STM32_MDMA_CIFCR_CTEIF) 76 77 /* MDMA Channel x error status register */ 78 #define STM32_MDMA_CESR(x) (0x48 + 0x40 * (x)) 79 #define STM32_MDMA_CESR_BSE BIT(11) 80 #define STM32_MDMA_CESR_ASR BIT(10) 81 #define STM32_MDMA_CESR_TEMD BIT(9) 82 #define STM32_MDMA_CESR_TELD BIT(8) 83 #define STM32_MDMA_CESR_TED BIT(7) 84 #define STM32_MDMA_CESR_TEA_MASK GENMASK(6, 0) 85 86 /* MDMA Channel x control register */ 87 #define STM32_MDMA_CCR(x) (0x4C + 0x40 * (x)) 88 #define STM32_MDMA_CCR_SWRQ BIT(16) 89 #define STM32_MDMA_CCR_WEX BIT(14) 90 #define STM32_MDMA_CCR_HEX BIT(13) 91 #define STM32_MDMA_CCR_BEX BIT(12) 92 #define STM32_MDMA_CCR_PL_MASK GENMASK(7, 6) 93 #define STM32_MDMA_CCR_PL(n) STM32_MDMA_SET(n, \ 94 STM32_MDMA_CCR_PL_MASK) 95 #define STM32_MDMA_CCR_TCIE BIT(5) 96 #define STM32_MDMA_CCR_BTIE BIT(4) 97 #define STM32_MDMA_CCR_BRTIE BIT(3) 98 #define STM32_MDMA_CCR_CTCIE BIT(2) 99 #define STM32_MDMA_CCR_TEIE BIT(1) 100 #define STM32_MDMA_CCR_EN BIT(0) 101 #define STM32_MDMA_CCR_IRQ_MASK (STM32_MDMA_CCR_TCIE \ 102 | STM32_MDMA_CCR_BTIE \ 103 | STM32_MDMA_CCR_BRTIE \ 104 | STM32_MDMA_CCR_CTCIE \ 105 | STM32_MDMA_CCR_TEIE) 106 107 /* MDMA Channel x transfer configuration register */ 108 #define STM32_MDMA_CTCR(x) (0x50 + 0x40 * (x)) 109 #define STM32_MDMA_CTCR_BWM BIT(31) 110 #define STM32_MDMA_CTCR_SWRM BIT(30) 111 #define STM32_MDMA_CTCR_TRGM_MSK GENMASK(29, 28) 112 #define STM32_MDMA_CTCR_TRGM(n) STM32_MDMA_SET((n), \ 113 STM32_MDMA_CTCR_TRGM_MSK) 114 #define STM32_MDMA_CTCR_TRGM_GET(n) STM32_MDMA_GET((n), \ 115 STM32_MDMA_CTCR_TRGM_MSK) 116 #define STM32_MDMA_CTCR_PAM_MASK GENMASK(27, 26) 117 #define STM32_MDMA_CTCR_PAM(n) STM32_MDMA_SET(n, \ 118 STM32_MDMA_CTCR_PAM_MASK) 119 #define STM32_MDMA_CTCR_PKE BIT(25) 120 #define STM32_MDMA_CTCR_TLEN_MSK GENMASK(24, 18) 121 #define STM32_MDMA_CTCR_TLEN(n) STM32_MDMA_SET((n), \ 122 STM32_MDMA_CTCR_TLEN_MSK) 123 #define STM32_MDMA_CTCR_TLEN_GET(n) STM32_MDMA_GET((n), \ 124 STM32_MDMA_CTCR_TLEN_MSK) 125 #define STM32_MDMA_CTCR_LEN2_MSK GENMASK(25, 18) 126 #define STM32_MDMA_CTCR_LEN2(n) STM32_MDMA_SET((n), \ 127 STM32_MDMA_CTCR_LEN2_MSK) 128 #define STM32_MDMA_CTCR_LEN2_GET(n) STM32_MDMA_GET((n), \ 129 STM32_MDMA_CTCR_LEN2_MSK) 130 #define STM32_MDMA_CTCR_DBURST_MASK GENMASK(17, 15) 131 #define STM32_MDMA_CTCR_DBURST(n) STM32_MDMA_SET(n, \ 132 STM32_MDMA_CTCR_DBURST_MASK) 133 #define STM32_MDMA_CTCR_SBURST_MASK GENMASK(14, 12) 134 #define STM32_MDMA_CTCR_SBURST(n) STM32_MDMA_SET(n, \ 135 STM32_MDMA_CTCR_SBURST_MASK) 136 #define STM32_MDMA_CTCR_DINCOS_MASK GENMASK(11, 10) 137 #define STM32_MDMA_CTCR_DINCOS(n) STM32_MDMA_SET((n), \ 138 STM32_MDMA_CTCR_DINCOS_MASK) 139 #define STM32_MDMA_CTCR_SINCOS_MASK GENMASK(9, 8) 140 #define STM32_MDMA_CTCR_SINCOS(n) STM32_MDMA_SET((n), \ 141 STM32_MDMA_CTCR_SINCOS_MASK) 142 #define STM32_MDMA_CTCR_DSIZE_MASK GENMASK(7, 6) 143 #define STM32_MDMA_CTCR_DSIZE(n) STM32_MDMA_SET(n, \ 144 STM32_MDMA_CTCR_DSIZE_MASK) 145 #define STM32_MDMA_CTCR_SSIZE_MASK GENMASK(5, 4) 146 #define STM32_MDMA_CTCR_SSIZE(n) STM32_MDMA_SET(n, \ 147 STM32_MDMA_CTCR_SSIZE_MASK) 148 #define STM32_MDMA_CTCR_DINC_MASK GENMASK(3, 2) 149 #define STM32_MDMA_CTCR_DINC(n) STM32_MDMA_SET((n), \ 150 STM32_MDMA_CTCR_DINC_MASK) 151 #define STM32_MDMA_CTCR_SINC_MASK GENMASK(1, 0) 152 #define STM32_MDMA_CTCR_SINC(n) STM32_MDMA_SET((n), \ 153 STM32_MDMA_CTCR_SINC_MASK) 154 #define STM32_MDMA_CTCR_CFG_MASK (STM32_MDMA_CTCR_SINC_MASK \ 155 | STM32_MDMA_CTCR_DINC_MASK \ 156 | STM32_MDMA_CTCR_SINCOS_MASK \ 157 | STM32_MDMA_CTCR_DINCOS_MASK \ 158 | STM32_MDMA_CTCR_LEN2_MSK \ 159 | STM32_MDMA_CTCR_TRGM_MSK) 160 161 /* MDMA Channel x block number of data register */ 162 #define STM32_MDMA_CBNDTR(x) (0x54 + 0x40 * (x)) 163 #define STM32_MDMA_CBNDTR_BRC_MK GENMASK(31, 20) 164 #define STM32_MDMA_CBNDTR_BRC(n) STM32_MDMA_SET(n, \ 165 STM32_MDMA_CBNDTR_BRC_MK) 166 #define STM32_MDMA_CBNDTR_BRC_GET(n) STM32_MDMA_GET((n), \ 167 STM32_MDMA_CBNDTR_BRC_MK) 168 169 #define STM32_MDMA_CBNDTR_BRDUM BIT(19) 170 #define STM32_MDMA_CBNDTR_BRSUM BIT(18) 171 #define STM32_MDMA_CBNDTR_BNDT_MASK GENMASK(16, 0) 172 #define STM32_MDMA_CBNDTR_BNDT(n) STM32_MDMA_SET(n, \ 173 STM32_MDMA_CBNDTR_BNDT_MASK) 174 175 /* MDMA Channel x source address register */ 176 #define STM32_MDMA_CSAR(x) (0x58 + 0x40 * (x)) 177 178 /* MDMA Channel x destination address register */ 179 #define STM32_MDMA_CDAR(x) (0x5C + 0x40 * (x)) 180 181 /* MDMA Channel x block repeat address update register */ 182 #define STM32_MDMA_CBRUR(x) (0x60 + 0x40 * (x)) 183 #define STM32_MDMA_CBRUR_DUV_MASK GENMASK(31, 16) 184 #define STM32_MDMA_CBRUR_DUV(n) STM32_MDMA_SET(n, \ 185 STM32_MDMA_CBRUR_DUV_MASK) 186 #define STM32_MDMA_CBRUR_SUV_MASK GENMASK(15, 0) 187 #define STM32_MDMA_CBRUR_SUV(n) STM32_MDMA_SET(n, \ 188 STM32_MDMA_CBRUR_SUV_MASK) 189 190 /* MDMA Channel x link address register */ 191 #define STM32_MDMA_CLAR(x) (0x64 + 0x40 * (x)) 192 193 /* MDMA Channel x trigger and bus selection register */ 194 #define STM32_MDMA_CTBR(x) (0x68 + 0x40 * (x)) 195 #define STM32_MDMA_CTBR_DBUS BIT(17) 196 #define STM32_MDMA_CTBR_SBUS BIT(16) 197 #define STM32_MDMA_CTBR_TSEL_MASK GENMASK(7, 0) 198 #define STM32_MDMA_CTBR_TSEL(n) STM32_MDMA_SET(n, \ 199 STM32_MDMA_CTBR_TSEL_MASK) 200 201 /* MDMA Channel x mask address register */ 202 #define STM32_MDMA_CMAR(x) (0x70 + 0x40 * (x)) 203 204 /* MDMA Channel x mask data register */ 205 #define STM32_MDMA_CMDR(x) (0x74 + 0x40 * (x)) 206 207 #define STM32_MDMA_MAX_BUF_LEN 128 208 #define STM32_MDMA_MAX_BLOCK_LEN 65536 209 #define STM32_MDMA_MAX_CHANNELS 63 210 #define STM32_MDMA_MAX_REQUESTS 256 211 #define STM32_MDMA_MAX_BURST 128 212 #define STM32_MDMA_VERY_HIGH_PRIORITY 0x11 213 214 enum stm32_mdma_trigger_mode { 215 STM32_MDMA_BUFFER, 216 STM32_MDMA_BLOCK, 217 STM32_MDMA_BLOCK_REP, 218 STM32_MDMA_LINKED_LIST, 219 }; 220 221 enum stm32_mdma_width { 222 STM32_MDMA_BYTE, 223 STM32_MDMA_HALF_WORD, 224 STM32_MDMA_WORD, 225 STM32_MDMA_DOUBLE_WORD, 226 }; 227 228 enum stm32_mdma_inc_mode { 229 STM32_MDMA_FIXED = 0, 230 STM32_MDMA_INC = 2, 231 STM32_MDMA_DEC = 3, 232 }; 233 234 struct stm32_mdma_chan_config { 235 u32 request; 236 u32 priority_level; 237 u32 transfer_config; 238 u32 mask_addr; 239 u32 mask_data; 240 }; 241 242 struct stm32_mdma_hwdesc { 243 u32 ctcr; 244 u32 cbndtr; 245 u32 csar; 246 u32 cdar; 247 u32 cbrur; 248 u32 clar; 249 u32 ctbr; 250 u32 dummy; 251 u32 cmar; 252 u32 cmdr; 253 } __aligned(64); 254 255 struct stm32_mdma_desc_node { 256 struct stm32_mdma_hwdesc *hwdesc; 257 dma_addr_t hwdesc_phys; 258 }; 259 260 struct stm32_mdma_desc { 261 struct virt_dma_desc vdesc; 262 u32 ccr; 263 bool cyclic; 264 u32 count; 265 struct stm32_mdma_desc_node node[]; 266 }; 267 268 struct stm32_mdma_chan { 269 struct virt_dma_chan vchan; 270 struct dma_pool *desc_pool; 271 u32 id; 272 struct stm32_mdma_desc *desc; 273 u32 curr_hwdesc; 274 struct dma_slave_config dma_config; 275 struct stm32_mdma_chan_config chan_config; 276 bool busy; 277 u32 mem_burst; 278 u32 mem_width; 279 }; 280 281 struct stm32_mdma_device { 282 struct dma_device ddev; 283 void __iomem *base; 284 struct clk *clk; 285 int irq; 286 struct reset_control *rst; 287 u32 nr_channels; 288 u32 nr_requests; 289 u32 nr_ahb_addr_masks; 290 struct stm32_mdma_chan chan[STM32_MDMA_MAX_CHANNELS]; 291 u32 ahb_addr_masks[]; 292 }; 293 294 static struct stm32_mdma_device *stm32_mdma_get_dev( 295 struct stm32_mdma_chan *chan) 296 { 297 return container_of(chan->vchan.chan.device, struct stm32_mdma_device, 298 ddev); 299 } 300 301 static struct stm32_mdma_chan *to_stm32_mdma_chan(struct dma_chan *c) 302 { 303 return container_of(c, struct stm32_mdma_chan, vchan.chan); 304 } 305 306 static struct stm32_mdma_desc *to_stm32_mdma_desc(struct virt_dma_desc *vdesc) 307 { 308 return container_of(vdesc, struct stm32_mdma_desc, vdesc); 309 } 310 311 static struct device *chan2dev(struct stm32_mdma_chan *chan) 312 { 313 return &chan->vchan.chan.dev->device; 314 } 315 316 static struct device *mdma2dev(struct stm32_mdma_device *mdma_dev) 317 { 318 return mdma_dev->ddev.dev; 319 } 320 321 static u32 stm32_mdma_read(struct stm32_mdma_device *dmadev, u32 reg) 322 { 323 return readl_relaxed(dmadev->base + reg); 324 } 325 326 static void stm32_mdma_write(struct stm32_mdma_device *dmadev, u32 reg, u32 val) 327 { 328 writel_relaxed(val, dmadev->base + reg); 329 } 330 331 static void stm32_mdma_set_bits(struct stm32_mdma_device *dmadev, u32 reg, 332 u32 mask) 333 { 334 void __iomem *addr = dmadev->base + reg; 335 336 writel_relaxed(readl_relaxed(addr) | mask, addr); 337 } 338 339 static void stm32_mdma_clr_bits(struct stm32_mdma_device *dmadev, u32 reg, 340 u32 mask) 341 { 342 void __iomem *addr = dmadev->base + reg; 343 344 writel_relaxed(readl_relaxed(addr) & ~mask, addr); 345 } 346 347 static struct stm32_mdma_desc *stm32_mdma_alloc_desc( 348 struct stm32_mdma_chan *chan, u32 count) 349 { 350 struct stm32_mdma_desc *desc; 351 int i; 352 353 desc = kzalloc(offsetof(typeof(*desc), node[count]), GFP_NOWAIT); 354 if (!desc) 355 return NULL; 356 357 for (i = 0; i < count; i++) { 358 desc->node[i].hwdesc = 359 dma_pool_alloc(chan->desc_pool, GFP_NOWAIT, 360 &desc->node[i].hwdesc_phys); 361 if (!desc->node[i].hwdesc) 362 goto err; 363 } 364 365 desc->count = count; 366 367 return desc; 368 369 err: 370 dev_err(chan2dev(chan), "Failed to allocate descriptor\n"); 371 while (--i >= 0) 372 dma_pool_free(chan->desc_pool, desc->node[i].hwdesc, 373 desc->node[i].hwdesc_phys); 374 kfree(desc); 375 return NULL; 376 } 377 378 static void stm32_mdma_desc_free(struct virt_dma_desc *vdesc) 379 { 380 struct stm32_mdma_desc *desc = to_stm32_mdma_desc(vdesc); 381 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(vdesc->tx.chan); 382 int i; 383 384 for (i = 0; i < desc->count; i++) 385 dma_pool_free(chan->desc_pool, desc->node[i].hwdesc, 386 desc->node[i].hwdesc_phys); 387 kfree(desc); 388 } 389 390 static int stm32_mdma_get_width(struct stm32_mdma_chan *chan, 391 enum dma_slave_buswidth width) 392 { 393 switch (width) { 394 case DMA_SLAVE_BUSWIDTH_1_BYTE: 395 case DMA_SLAVE_BUSWIDTH_2_BYTES: 396 case DMA_SLAVE_BUSWIDTH_4_BYTES: 397 case DMA_SLAVE_BUSWIDTH_8_BYTES: 398 return ffs(width) - 1; 399 default: 400 dev_err(chan2dev(chan), "Dma bus width %i not supported\n", 401 width); 402 return -EINVAL; 403 } 404 } 405 406 static enum dma_slave_buswidth stm32_mdma_get_max_width(dma_addr_t addr, 407 u32 buf_len, u32 tlen) 408 { 409 enum dma_slave_buswidth max_width = DMA_SLAVE_BUSWIDTH_8_BYTES; 410 411 for (max_width = DMA_SLAVE_BUSWIDTH_8_BYTES; 412 max_width > DMA_SLAVE_BUSWIDTH_1_BYTE; 413 max_width >>= 1) { 414 /* 415 * Address and buffer length both have to be aligned on 416 * bus width 417 */ 418 if ((((buf_len | addr) & (max_width - 1)) == 0) && 419 tlen >= max_width) 420 break; 421 } 422 423 return max_width; 424 } 425 426 static u32 stm32_mdma_get_best_burst(u32 buf_len, u32 tlen, u32 max_burst, 427 enum dma_slave_buswidth width) 428 { 429 u32 best_burst; 430 431 best_burst = min((u32)1 << __ffs(tlen | buf_len), 432 max_burst * width) / width; 433 434 return (best_burst > 0) ? best_burst : 1; 435 } 436 437 static int stm32_mdma_disable_chan(struct stm32_mdma_chan *chan) 438 { 439 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 440 u32 ccr, cisr, id, reg; 441 int ret; 442 443 id = chan->id; 444 reg = STM32_MDMA_CCR(id); 445 446 /* Disable interrupts */ 447 stm32_mdma_clr_bits(dmadev, reg, STM32_MDMA_CCR_IRQ_MASK); 448 449 ccr = stm32_mdma_read(dmadev, reg); 450 if (ccr & STM32_MDMA_CCR_EN) { 451 stm32_mdma_clr_bits(dmadev, reg, STM32_MDMA_CCR_EN); 452 453 /* Ensure that any ongoing transfer has been completed */ 454 ret = readl_relaxed_poll_timeout_atomic( 455 dmadev->base + STM32_MDMA_CISR(id), cisr, 456 (cisr & STM32_MDMA_CISR_CTCIF), 10, 1000); 457 if (ret) { 458 dev_err(chan2dev(chan), "%s: timeout!\n", __func__); 459 return -EBUSY; 460 } 461 } 462 463 return 0; 464 } 465 466 static void stm32_mdma_stop(struct stm32_mdma_chan *chan) 467 { 468 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 469 u32 status; 470 int ret; 471 472 /* Disable DMA */ 473 ret = stm32_mdma_disable_chan(chan); 474 if (ret < 0) 475 return; 476 477 /* Clear interrupt status if it is there */ 478 status = stm32_mdma_read(dmadev, STM32_MDMA_CISR(chan->id)); 479 if (status) { 480 dev_dbg(chan2dev(chan), "%s(): clearing interrupt: 0x%08x\n", 481 __func__, status); 482 stm32_mdma_set_bits(dmadev, STM32_MDMA_CIFCR(chan->id), status); 483 } 484 485 chan->busy = false; 486 } 487 488 static void stm32_mdma_set_bus(struct stm32_mdma_device *dmadev, u32 *ctbr, 489 u32 ctbr_mask, u32 src_addr) 490 { 491 u32 mask; 492 int i; 493 494 /* Check if memory device is on AHB or AXI */ 495 *ctbr &= ~ctbr_mask; 496 mask = src_addr & 0xF0000000; 497 for (i = 0; i < dmadev->nr_ahb_addr_masks; i++) { 498 if (mask == dmadev->ahb_addr_masks[i]) { 499 *ctbr |= ctbr_mask; 500 break; 501 } 502 } 503 } 504 505 static int stm32_mdma_set_xfer_param(struct stm32_mdma_chan *chan, 506 enum dma_transfer_direction direction, 507 u32 *mdma_ccr, u32 *mdma_ctcr, 508 u32 *mdma_ctbr, dma_addr_t addr, 509 u32 buf_len) 510 { 511 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 512 struct stm32_mdma_chan_config *chan_config = &chan->chan_config; 513 enum dma_slave_buswidth src_addr_width, dst_addr_width; 514 phys_addr_t src_addr, dst_addr; 515 int src_bus_width, dst_bus_width; 516 u32 src_maxburst, dst_maxburst, src_best_burst, dst_best_burst; 517 u32 ccr, ctcr, ctbr, tlen; 518 519 src_addr_width = chan->dma_config.src_addr_width; 520 dst_addr_width = chan->dma_config.dst_addr_width; 521 src_maxburst = chan->dma_config.src_maxburst; 522 dst_maxburst = chan->dma_config.dst_maxburst; 523 524 ccr = stm32_mdma_read(dmadev, STM32_MDMA_CCR(chan->id)); 525 ctcr = stm32_mdma_read(dmadev, STM32_MDMA_CTCR(chan->id)); 526 ctbr = stm32_mdma_read(dmadev, STM32_MDMA_CTBR(chan->id)); 527 528 /* Enable HW request mode */ 529 ctcr &= ~STM32_MDMA_CTCR_SWRM; 530 531 /* Set DINC, SINC, DINCOS, SINCOS, TRGM and TLEN retrieve from DT */ 532 ctcr &= ~STM32_MDMA_CTCR_CFG_MASK; 533 ctcr |= chan_config->transfer_config & STM32_MDMA_CTCR_CFG_MASK; 534 535 /* 536 * For buffer transfer length (TLEN) we have to set 537 * the number of bytes - 1 in CTCR register 538 */ 539 tlen = STM32_MDMA_CTCR_LEN2_GET(ctcr); 540 ctcr &= ~STM32_MDMA_CTCR_LEN2_MSK; 541 ctcr |= STM32_MDMA_CTCR_TLEN((tlen - 1)); 542 543 /* Disable Pack Enable */ 544 ctcr &= ~STM32_MDMA_CTCR_PKE; 545 546 /* Check burst size constraints */ 547 if (src_maxburst * src_addr_width > STM32_MDMA_MAX_BURST || 548 dst_maxburst * dst_addr_width > STM32_MDMA_MAX_BURST) { 549 dev_err(chan2dev(chan), 550 "burst size * bus width higher than %d bytes\n", 551 STM32_MDMA_MAX_BURST); 552 return -EINVAL; 553 } 554 555 if ((!is_power_of_2(src_maxburst) && src_maxburst > 0) || 556 (!is_power_of_2(dst_maxburst) && dst_maxburst > 0)) { 557 dev_err(chan2dev(chan), "burst size must be a power of 2\n"); 558 return -EINVAL; 559 } 560 561 /* 562 * Configure channel control: 563 * - Clear SW request as in this case this is a HW one 564 * - Clear WEX, HEX and BEX bits 565 * - Set priority level 566 */ 567 ccr &= ~(STM32_MDMA_CCR_SWRQ | STM32_MDMA_CCR_WEX | STM32_MDMA_CCR_HEX | 568 STM32_MDMA_CCR_BEX | STM32_MDMA_CCR_PL_MASK); 569 ccr |= STM32_MDMA_CCR_PL(chan_config->priority_level); 570 571 /* Configure Trigger selection */ 572 ctbr &= ~STM32_MDMA_CTBR_TSEL_MASK; 573 ctbr |= STM32_MDMA_CTBR_TSEL(chan_config->request); 574 575 switch (direction) { 576 case DMA_MEM_TO_DEV: 577 dst_addr = chan->dma_config.dst_addr; 578 579 /* Set device data size */ 580 dst_bus_width = stm32_mdma_get_width(chan, dst_addr_width); 581 if (dst_bus_width < 0) 582 return dst_bus_width; 583 ctcr &= ~STM32_MDMA_CTCR_DSIZE_MASK; 584 ctcr |= STM32_MDMA_CTCR_DSIZE(dst_bus_width); 585 586 /* Set device burst value */ 587 dst_best_burst = stm32_mdma_get_best_burst(buf_len, tlen, 588 dst_maxburst, 589 dst_addr_width); 590 chan->mem_burst = dst_best_burst; 591 ctcr &= ~STM32_MDMA_CTCR_DBURST_MASK; 592 ctcr |= STM32_MDMA_CTCR_DBURST((ilog2(dst_best_burst))); 593 594 /* Set memory data size */ 595 src_addr_width = stm32_mdma_get_max_width(addr, buf_len, tlen); 596 chan->mem_width = src_addr_width; 597 src_bus_width = stm32_mdma_get_width(chan, src_addr_width); 598 if (src_bus_width < 0) 599 return src_bus_width; 600 ctcr &= ~STM32_MDMA_CTCR_SSIZE_MASK | 601 STM32_MDMA_CTCR_SINCOS_MASK; 602 ctcr |= STM32_MDMA_CTCR_SSIZE(src_bus_width) | 603 STM32_MDMA_CTCR_SINCOS(src_bus_width); 604 605 /* Set memory burst value */ 606 src_maxburst = STM32_MDMA_MAX_BUF_LEN / src_addr_width; 607 src_best_burst = stm32_mdma_get_best_burst(buf_len, tlen, 608 src_maxburst, 609 src_addr_width); 610 chan->mem_burst = src_best_burst; 611 ctcr &= ~STM32_MDMA_CTCR_SBURST_MASK; 612 ctcr |= STM32_MDMA_CTCR_SBURST((ilog2(src_best_burst))); 613 614 /* Select bus */ 615 stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_DBUS, 616 dst_addr); 617 618 if (dst_bus_width != src_bus_width) 619 ctcr |= STM32_MDMA_CTCR_PKE; 620 621 /* Set destination address */ 622 stm32_mdma_write(dmadev, STM32_MDMA_CDAR(chan->id), dst_addr); 623 break; 624 625 case DMA_DEV_TO_MEM: 626 src_addr = chan->dma_config.src_addr; 627 628 /* Set device data size */ 629 src_bus_width = stm32_mdma_get_width(chan, src_addr_width); 630 if (src_bus_width < 0) 631 return src_bus_width; 632 ctcr &= ~STM32_MDMA_CTCR_SSIZE_MASK; 633 ctcr |= STM32_MDMA_CTCR_SSIZE(src_bus_width); 634 635 /* Set device burst value */ 636 src_best_burst = stm32_mdma_get_best_burst(buf_len, tlen, 637 src_maxburst, 638 src_addr_width); 639 ctcr &= ~STM32_MDMA_CTCR_SBURST_MASK; 640 ctcr |= STM32_MDMA_CTCR_SBURST((ilog2(src_best_burst))); 641 642 /* Set memory data size */ 643 dst_addr_width = stm32_mdma_get_max_width(addr, buf_len, tlen); 644 chan->mem_width = dst_addr_width; 645 dst_bus_width = stm32_mdma_get_width(chan, dst_addr_width); 646 if (dst_bus_width < 0) 647 return dst_bus_width; 648 ctcr &= ~(STM32_MDMA_CTCR_DSIZE_MASK | 649 STM32_MDMA_CTCR_DINCOS_MASK); 650 ctcr |= STM32_MDMA_CTCR_DSIZE(dst_bus_width) | 651 STM32_MDMA_CTCR_DINCOS(dst_bus_width); 652 653 /* Set memory burst value */ 654 dst_maxburst = STM32_MDMA_MAX_BUF_LEN / dst_addr_width; 655 dst_best_burst = stm32_mdma_get_best_burst(buf_len, tlen, 656 dst_maxburst, 657 dst_addr_width); 658 ctcr &= ~STM32_MDMA_CTCR_DBURST_MASK; 659 ctcr |= STM32_MDMA_CTCR_DBURST((ilog2(dst_best_burst))); 660 661 /* Select bus */ 662 stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_SBUS, 663 src_addr); 664 665 if (dst_bus_width != src_bus_width) 666 ctcr |= STM32_MDMA_CTCR_PKE; 667 668 /* Set source address */ 669 stm32_mdma_write(dmadev, STM32_MDMA_CSAR(chan->id), src_addr); 670 break; 671 672 default: 673 dev_err(chan2dev(chan), "Dma direction is not supported\n"); 674 return -EINVAL; 675 } 676 677 *mdma_ccr = ccr; 678 *mdma_ctcr = ctcr; 679 *mdma_ctbr = ctbr; 680 681 return 0; 682 } 683 684 static void stm32_mdma_dump_hwdesc(struct stm32_mdma_chan *chan, 685 struct stm32_mdma_desc_node *node) 686 { 687 dev_dbg(chan2dev(chan), "hwdesc: %pad\n", &node->hwdesc_phys); 688 dev_dbg(chan2dev(chan), "CTCR: 0x%08x\n", node->hwdesc->ctcr); 689 dev_dbg(chan2dev(chan), "CBNDTR: 0x%08x\n", node->hwdesc->cbndtr); 690 dev_dbg(chan2dev(chan), "CSAR: 0x%08x\n", node->hwdesc->csar); 691 dev_dbg(chan2dev(chan), "CDAR: 0x%08x\n", node->hwdesc->cdar); 692 dev_dbg(chan2dev(chan), "CBRUR: 0x%08x\n", node->hwdesc->cbrur); 693 dev_dbg(chan2dev(chan), "CLAR: 0x%08x\n", node->hwdesc->clar); 694 dev_dbg(chan2dev(chan), "CTBR: 0x%08x\n", node->hwdesc->ctbr); 695 dev_dbg(chan2dev(chan), "CMAR: 0x%08x\n", node->hwdesc->cmar); 696 dev_dbg(chan2dev(chan), "CMDR: 0x%08x\n\n", node->hwdesc->cmdr); 697 } 698 699 static void stm32_mdma_setup_hwdesc(struct stm32_mdma_chan *chan, 700 struct stm32_mdma_desc *desc, 701 enum dma_transfer_direction dir, u32 count, 702 dma_addr_t src_addr, dma_addr_t dst_addr, 703 u32 len, u32 ctcr, u32 ctbr, bool is_last, 704 bool is_first, bool is_cyclic) 705 { 706 struct stm32_mdma_chan_config *config = &chan->chan_config; 707 struct stm32_mdma_hwdesc *hwdesc; 708 u32 next = count + 1; 709 710 hwdesc = desc->node[count].hwdesc; 711 hwdesc->ctcr = ctcr; 712 hwdesc->cbndtr &= ~(STM32_MDMA_CBNDTR_BRC_MK | 713 STM32_MDMA_CBNDTR_BRDUM | 714 STM32_MDMA_CBNDTR_BRSUM | 715 STM32_MDMA_CBNDTR_BNDT_MASK); 716 hwdesc->cbndtr |= STM32_MDMA_CBNDTR_BNDT(len); 717 hwdesc->csar = src_addr; 718 hwdesc->cdar = dst_addr; 719 hwdesc->cbrur = 0; 720 hwdesc->ctbr = ctbr; 721 hwdesc->cmar = config->mask_addr; 722 hwdesc->cmdr = config->mask_data; 723 724 if (is_last) { 725 if (is_cyclic) 726 hwdesc->clar = desc->node[0].hwdesc_phys; 727 else 728 hwdesc->clar = 0; 729 } else { 730 hwdesc->clar = desc->node[next].hwdesc_phys; 731 } 732 733 stm32_mdma_dump_hwdesc(chan, &desc->node[count]); 734 } 735 736 static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan, 737 struct stm32_mdma_desc *desc, 738 struct scatterlist *sgl, u32 sg_len, 739 enum dma_transfer_direction direction) 740 { 741 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 742 struct dma_slave_config *dma_config = &chan->dma_config; 743 struct scatterlist *sg; 744 dma_addr_t src_addr, dst_addr; 745 u32 ccr, ctcr, ctbr; 746 int i, ret = 0; 747 748 for_each_sg(sgl, sg, sg_len, i) { 749 if (sg_dma_len(sg) > STM32_MDMA_MAX_BLOCK_LEN) { 750 dev_err(chan2dev(chan), "Invalid block len\n"); 751 return -EINVAL; 752 } 753 754 if (direction == DMA_MEM_TO_DEV) { 755 src_addr = sg_dma_address(sg); 756 dst_addr = dma_config->dst_addr; 757 ret = stm32_mdma_set_xfer_param(chan, direction, &ccr, 758 &ctcr, &ctbr, src_addr, 759 sg_dma_len(sg)); 760 stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_SBUS, 761 src_addr); 762 } else { 763 src_addr = dma_config->src_addr; 764 dst_addr = sg_dma_address(sg); 765 ret = stm32_mdma_set_xfer_param(chan, direction, &ccr, 766 &ctcr, &ctbr, dst_addr, 767 sg_dma_len(sg)); 768 stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_DBUS, 769 dst_addr); 770 } 771 772 if (ret < 0) 773 return ret; 774 775 stm32_mdma_setup_hwdesc(chan, desc, direction, i, src_addr, 776 dst_addr, sg_dma_len(sg), ctcr, ctbr, 777 i == sg_len - 1, i == 0, false); 778 } 779 780 /* Enable interrupts */ 781 ccr &= ~STM32_MDMA_CCR_IRQ_MASK; 782 ccr |= STM32_MDMA_CCR_TEIE | STM32_MDMA_CCR_CTCIE; 783 if (sg_len > 1) 784 ccr |= STM32_MDMA_CCR_BTIE; 785 desc->ccr = ccr; 786 787 return 0; 788 } 789 790 static struct dma_async_tx_descriptor * 791 stm32_mdma_prep_slave_sg(struct dma_chan *c, struct scatterlist *sgl, 792 u32 sg_len, enum dma_transfer_direction direction, 793 unsigned long flags, void *context) 794 { 795 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 796 struct stm32_mdma_desc *desc; 797 int i, ret; 798 799 /* 800 * Once DMA is in setup cyclic mode the channel we cannot assign this 801 * channel anymore. The DMA channel needs to be aborted or terminated 802 * for allowing another request. 803 */ 804 if (chan->desc && chan->desc->cyclic) { 805 dev_err(chan2dev(chan), 806 "Request not allowed when dma in cyclic mode\n"); 807 return NULL; 808 } 809 810 desc = stm32_mdma_alloc_desc(chan, sg_len); 811 if (!desc) 812 return NULL; 813 814 ret = stm32_mdma_setup_xfer(chan, desc, sgl, sg_len, direction); 815 if (ret < 0) 816 goto xfer_setup_err; 817 818 desc->cyclic = false; 819 820 return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags); 821 822 xfer_setup_err: 823 for (i = 0; i < desc->count; i++) 824 dma_pool_free(chan->desc_pool, desc->node[i].hwdesc, 825 desc->node[i].hwdesc_phys); 826 kfree(desc); 827 return NULL; 828 } 829 830 static struct dma_async_tx_descriptor * 831 stm32_mdma_prep_dma_cyclic(struct dma_chan *c, dma_addr_t buf_addr, 832 size_t buf_len, size_t period_len, 833 enum dma_transfer_direction direction, 834 unsigned long flags) 835 { 836 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 837 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 838 struct dma_slave_config *dma_config = &chan->dma_config; 839 struct stm32_mdma_desc *desc; 840 dma_addr_t src_addr, dst_addr; 841 u32 ccr, ctcr, ctbr, count; 842 int i, ret; 843 844 /* 845 * Once DMA is in setup cyclic mode the channel we cannot assign this 846 * channel anymore. The DMA channel needs to be aborted or terminated 847 * for allowing another request. 848 */ 849 if (chan->desc && chan->desc->cyclic) { 850 dev_err(chan2dev(chan), 851 "Request not allowed when dma in cyclic mode\n"); 852 return NULL; 853 } 854 855 if (!buf_len || !period_len || period_len > STM32_MDMA_MAX_BLOCK_LEN) { 856 dev_err(chan2dev(chan), "Invalid buffer/period len\n"); 857 return NULL; 858 } 859 860 if (buf_len % period_len) { 861 dev_err(chan2dev(chan), "buf_len not multiple of period_len\n"); 862 return NULL; 863 } 864 865 count = buf_len / period_len; 866 867 desc = stm32_mdma_alloc_desc(chan, count); 868 if (!desc) 869 return NULL; 870 871 /* Select bus */ 872 if (direction == DMA_MEM_TO_DEV) { 873 src_addr = buf_addr; 874 ret = stm32_mdma_set_xfer_param(chan, direction, &ccr, &ctcr, 875 &ctbr, src_addr, period_len); 876 stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_SBUS, 877 src_addr); 878 } else { 879 dst_addr = buf_addr; 880 ret = stm32_mdma_set_xfer_param(chan, direction, &ccr, &ctcr, 881 &ctbr, dst_addr, period_len); 882 stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_DBUS, 883 dst_addr); 884 } 885 886 if (ret < 0) 887 goto xfer_setup_err; 888 889 /* Enable interrupts */ 890 ccr &= ~STM32_MDMA_CCR_IRQ_MASK; 891 ccr |= STM32_MDMA_CCR_TEIE | STM32_MDMA_CCR_CTCIE | STM32_MDMA_CCR_BTIE; 892 desc->ccr = ccr; 893 894 /* Configure hwdesc list */ 895 for (i = 0; i < count; i++) { 896 if (direction == DMA_MEM_TO_DEV) { 897 src_addr = buf_addr + i * period_len; 898 dst_addr = dma_config->dst_addr; 899 } else { 900 src_addr = dma_config->src_addr; 901 dst_addr = buf_addr + i * period_len; 902 } 903 904 stm32_mdma_setup_hwdesc(chan, desc, direction, i, src_addr, 905 dst_addr, period_len, ctcr, ctbr, 906 i == count - 1, i == 0, true); 907 } 908 909 desc->cyclic = true; 910 911 return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags); 912 913 xfer_setup_err: 914 for (i = 0; i < desc->count; i++) 915 dma_pool_free(chan->desc_pool, desc->node[i].hwdesc, 916 desc->node[i].hwdesc_phys); 917 kfree(desc); 918 return NULL; 919 } 920 921 static struct dma_async_tx_descriptor * 922 stm32_mdma_prep_dma_memcpy(struct dma_chan *c, dma_addr_t dest, dma_addr_t src, 923 size_t len, unsigned long flags) 924 { 925 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 926 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 927 enum dma_slave_buswidth max_width; 928 struct stm32_mdma_desc *desc; 929 struct stm32_mdma_hwdesc *hwdesc; 930 u32 ccr, ctcr, ctbr, cbndtr, count, max_burst, mdma_burst; 931 u32 best_burst, tlen; 932 size_t xfer_count, offset; 933 int src_bus_width, dst_bus_width; 934 int i; 935 936 /* 937 * Once DMA is in setup cyclic mode the channel we cannot assign this 938 * channel anymore. The DMA channel needs to be aborted or terminated 939 * to allow another request 940 */ 941 if (chan->desc && chan->desc->cyclic) { 942 dev_err(chan2dev(chan), 943 "Request not allowed when dma in cyclic mode\n"); 944 return NULL; 945 } 946 947 count = DIV_ROUND_UP(len, STM32_MDMA_MAX_BLOCK_LEN); 948 desc = stm32_mdma_alloc_desc(chan, count); 949 if (!desc) 950 return NULL; 951 952 ccr = stm32_mdma_read(dmadev, STM32_MDMA_CCR(chan->id)); 953 ctcr = stm32_mdma_read(dmadev, STM32_MDMA_CTCR(chan->id)); 954 ctbr = stm32_mdma_read(dmadev, STM32_MDMA_CTBR(chan->id)); 955 cbndtr = stm32_mdma_read(dmadev, STM32_MDMA_CBNDTR(chan->id)); 956 957 /* Enable sw req, some interrupts and clear other bits */ 958 ccr &= ~(STM32_MDMA_CCR_WEX | STM32_MDMA_CCR_HEX | 959 STM32_MDMA_CCR_BEX | STM32_MDMA_CCR_PL_MASK | 960 STM32_MDMA_CCR_IRQ_MASK); 961 ccr |= STM32_MDMA_CCR_TEIE; 962 963 /* Enable SW request mode, dest/src inc and clear other bits */ 964 ctcr &= ~(STM32_MDMA_CTCR_BWM | STM32_MDMA_CTCR_TRGM_MSK | 965 STM32_MDMA_CTCR_PAM_MASK | STM32_MDMA_CTCR_PKE | 966 STM32_MDMA_CTCR_TLEN_MSK | STM32_MDMA_CTCR_DBURST_MASK | 967 STM32_MDMA_CTCR_SBURST_MASK | STM32_MDMA_CTCR_DINCOS_MASK | 968 STM32_MDMA_CTCR_SINCOS_MASK | STM32_MDMA_CTCR_DSIZE_MASK | 969 STM32_MDMA_CTCR_SSIZE_MASK | STM32_MDMA_CTCR_DINC_MASK | 970 STM32_MDMA_CTCR_SINC_MASK); 971 ctcr |= STM32_MDMA_CTCR_SWRM | STM32_MDMA_CTCR_SINC(STM32_MDMA_INC) | 972 STM32_MDMA_CTCR_DINC(STM32_MDMA_INC); 973 974 /* Reset HW request */ 975 ctbr &= ~STM32_MDMA_CTBR_TSEL_MASK; 976 977 /* Select bus */ 978 stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_SBUS, src); 979 stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_DBUS, dest); 980 981 /* Clear CBNDTR registers */ 982 cbndtr &= ~(STM32_MDMA_CBNDTR_BRC_MK | STM32_MDMA_CBNDTR_BRDUM | 983 STM32_MDMA_CBNDTR_BRSUM | STM32_MDMA_CBNDTR_BNDT_MASK); 984 985 if (len <= STM32_MDMA_MAX_BLOCK_LEN) { 986 cbndtr |= STM32_MDMA_CBNDTR_BNDT(len); 987 if (len <= STM32_MDMA_MAX_BUF_LEN) { 988 /* Setup a buffer transfer */ 989 ccr |= STM32_MDMA_CCR_TCIE | STM32_MDMA_CCR_CTCIE; 990 ctcr |= STM32_MDMA_CTCR_TRGM(STM32_MDMA_BUFFER); 991 } else { 992 /* Setup a block transfer */ 993 ccr |= STM32_MDMA_CCR_BTIE | STM32_MDMA_CCR_CTCIE; 994 ctcr |= STM32_MDMA_CTCR_TRGM(STM32_MDMA_BLOCK); 995 } 996 997 tlen = STM32_MDMA_MAX_BUF_LEN; 998 ctcr |= STM32_MDMA_CTCR_TLEN((tlen - 1)); 999 1000 /* Set source best burst size */ 1001 max_width = stm32_mdma_get_max_width(src, len, tlen); 1002 src_bus_width = stm32_mdma_get_width(chan, max_width); 1003 1004 max_burst = tlen / max_width; 1005 best_burst = stm32_mdma_get_best_burst(len, tlen, max_burst, 1006 max_width); 1007 mdma_burst = ilog2(best_burst); 1008 1009 ctcr |= STM32_MDMA_CTCR_SBURST(mdma_burst) | 1010 STM32_MDMA_CTCR_SSIZE(src_bus_width) | 1011 STM32_MDMA_CTCR_SINCOS(src_bus_width); 1012 1013 /* Set destination best burst size */ 1014 max_width = stm32_mdma_get_max_width(dest, len, tlen); 1015 dst_bus_width = stm32_mdma_get_width(chan, max_width); 1016 1017 max_burst = tlen / max_width; 1018 best_burst = stm32_mdma_get_best_burst(len, tlen, max_burst, 1019 max_width); 1020 mdma_burst = ilog2(best_burst); 1021 1022 ctcr |= STM32_MDMA_CTCR_DBURST(mdma_burst) | 1023 STM32_MDMA_CTCR_DSIZE(dst_bus_width) | 1024 STM32_MDMA_CTCR_DINCOS(dst_bus_width); 1025 1026 if (dst_bus_width != src_bus_width) 1027 ctcr |= STM32_MDMA_CTCR_PKE; 1028 1029 /* Prepare hardware descriptor */ 1030 hwdesc = desc->node[0].hwdesc; 1031 hwdesc->ctcr = ctcr; 1032 hwdesc->cbndtr = cbndtr; 1033 hwdesc->csar = src; 1034 hwdesc->cdar = dest; 1035 hwdesc->cbrur = 0; 1036 hwdesc->clar = 0; 1037 hwdesc->ctbr = ctbr; 1038 hwdesc->cmar = 0; 1039 hwdesc->cmdr = 0; 1040 1041 stm32_mdma_dump_hwdesc(chan, &desc->node[0]); 1042 } else { 1043 /* Setup a LLI transfer */ 1044 ctcr |= STM32_MDMA_CTCR_TRGM(STM32_MDMA_LINKED_LIST) | 1045 STM32_MDMA_CTCR_TLEN((STM32_MDMA_MAX_BUF_LEN - 1)); 1046 ccr |= STM32_MDMA_CCR_BTIE | STM32_MDMA_CCR_CTCIE; 1047 tlen = STM32_MDMA_MAX_BUF_LEN; 1048 1049 for (i = 0, offset = 0; offset < len; 1050 i++, offset += xfer_count) { 1051 xfer_count = min_t(size_t, len - offset, 1052 STM32_MDMA_MAX_BLOCK_LEN); 1053 1054 /* Set source best burst size */ 1055 max_width = stm32_mdma_get_max_width(src, len, tlen); 1056 src_bus_width = stm32_mdma_get_width(chan, max_width); 1057 1058 max_burst = tlen / max_width; 1059 best_burst = stm32_mdma_get_best_burst(len, tlen, 1060 max_burst, 1061 max_width); 1062 mdma_burst = ilog2(best_burst); 1063 1064 ctcr |= STM32_MDMA_CTCR_SBURST(mdma_burst) | 1065 STM32_MDMA_CTCR_SSIZE(src_bus_width) | 1066 STM32_MDMA_CTCR_SINCOS(src_bus_width); 1067 1068 /* Set destination best burst size */ 1069 max_width = stm32_mdma_get_max_width(dest, len, tlen); 1070 dst_bus_width = stm32_mdma_get_width(chan, max_width); 1071 1072 max_burst = tlen / max_width; 1073 best_burst = stm32_mdma_get_best_burst(len, tlen, 1074 max_burst, 1075 max_width); 1076 mdma_burst = ilog2(best_burst); 1077 1078 ctcr |= STM32_MDMA_CTCR_DBURST(mdma_burst) | 1079 STM32_MDMA_CTCR_DSIZE(dst_bus_width) | 1080 STM32_MDMA_CTCR_DINCOS(dst_bus_width); 1081 1082 if (dst_bus_width != src_bus_width) 1083 ctcr |= STM32_MDMA_CTCR_PKE; 1084 1085 /* Prepare hardware descriptor */ 1086 stm32_mdma_setup_hwdesc(chan, desc, DMA_MEM_TO_MEM, i, 1087 src + offset, dest + offset, 1088 xfer_count, ctcr, ctbr, 1089 i == count - 1, i == 0, false); 1090 } 1091 } 1092 1093 desc->ccr = ccr; 1094 1095 desc->cyclic = false; 1096 1097 return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags); 1098 } 1099 1100 static void stm32_mdma_dump_reg(struct stm32_mdma_chan *chan) 1101 { 1102 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 1103 1104 dev_dbg(chan2dev(chan), "CCR: 0x%08x\n", 1105 stm32_mdma_read(dmadev, STM32_MDMA_CCR(chan->id))); 1106 dev_dbg(chan2dev(chan), "CTCR: 0x%08x\n", 1107 stm32_mdma_read(dmadev, STM32_MDMA_CTCR(chan->id))); 1108 dev_dbg(chan2dev(chan), "CBNDTR: 0x%08x\n", 1109 stm32_mdma_read(dmadev, STM32_MDMA_CBNDTR(chan->id))); 1110 dev_dbg(chan2dev(chan), "CSAR: 0x%08x\n", 1111 stm32_mdma_read(dmadev, STM32_MDMA_CSAR(chan->id))); 1112 dev_dbg(chan2dev(chan), "CDAR: 0x%08x\n", 1113 stm32_mdma_read(dmadev, STM32_MDMA_CDAR(chan->id))); 1114 dev_dbg(chan2dev(chan), "CBRUR: 0x%08x\n", 1115 stm32_mdma_read(dmadev, STM32_MDMA_CBRUR(chan->id))); 1116 dev_dbg(chan2dev(chan), "CLAR: 0x%08x\n", 1117 stm32_mdma_read(dmadev, STM32_MDMA_CLAR(chan->id))); 1118 dev_dbg(chan2dev(chan), "CTBR: 0x%08x\n", 1119 stm32_mdma_read(dmadev, STM32_MDMA_CTBR(chan->id))); 1120 dev_dbg(chan2dev(chan), "CMAR: 0x%08x\n", 1121 stm32_mdma_read(dmadev, STM32_MDMA_CMAR(chan->id))); 1122 dev_dbg(chan2dev(chan), "CMDR: 0x%08x\n", 1123 stm32_mdma_read(dmadev, STM32_MDMA_CMDR(chan->id))); 1124 } 1125 1126 static void stm32_mdma_start_transfer(struct stm32_mdma_chan *chan) 1127 { 1128 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 1129 struct virt_dma_desc *vdesc; 1130 struct stm32_mdma_hwdesc *hwdesc; 1131 u32 id = chan->id; 1132 u32 status, reg; 1133 1134 vdesc = vchan_next_desc(&chan->vchan); 1135 if (!vdesc) { 1136 chan->desc = NULL; 1137 return; 1138 } 1139 1140 chan->desc = to_stm32_mdma_desc(vdesc); 1141 hwdesc = chan->desc->node[0].hwdesc; 1142 chan->curr_hwdesc = 0; 1143 1144 stm32_mdma_write(dmadev, STM32_MDMA_CCR(id), chan->desc->ccr); 1145 stm32_mdma_write(dmadev, STM32_MDMA_CTCR(id), hwdesc->ctcr); 1146 stm32_mdma_write(dmadev, STM32_MDMA_CBNDTR(id), hwdesc->cbndtr); 1147 stm32_mdma_write(dmadev, STM32_MDMA_CSAR(id), hwdesc->csar); 1148 stm32_mdma_write(dmadev, STM32_MDMA_CDAR(id), hwdesc->cdar); 1149 stm32_mdma_write(dmadev, STM32_MDMA_CBRUR(id), hwdesc->cbrur); 1150 stm32_mdma_write(dmadev, STM32_MDMA_CLAR(id), hwdesc->clar); 1151 stm32_mdma_write(dmadev, STM32_MDMA_CTBR(id), hwdesc->ctbr); 1152 stm32_mdma_write(dmadev, STM32_MDMA_CMAR(id), hwdesc->cmar); 1153 stm32_mdma_write(dmadev, STM32_MDMA_CMDR(id), hwdesc->cmdr); 1154 1155 /* Clear interrupt status if it is there */ 1156 status = stm32_mdma_read(dmadev, STM32_MDMA_CISR(id)); 1157 if (status) 1158 stm32_mdma_set_bits(dmadev, STM32_MDMA_CIFCR(id), status); 1159 1160 stm32_mdma_dump_reg(chan); 1161 1162 /* Start DMA */ 1163 stm32_mdma_set_bits(dmadev, STM32_MDMA_CCR(id), STM32_MDMA_CCR_EN); 1164 1165 /* Set SW request in case of MEM2MEM transfer */ 1166 if (hwdesc->ctcr & STM32_MDMA_CTCR_SWRM) { 1167 reg = STM32_MDMA_CCR(id); 1168 stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CCR_SWRQ); 1169 } 1170 1171 chan->busy = true; 1172 1173 dev_dbg(chan2dev(chan), "vchan %pK: started\n", &chan->vchan); 1174 } 1175 1176 static void stm32_mdma_issue_pending(struct dma_chan *c) 1177 { 1178 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1179 unsigned long flags; 1180 1181 spin_lock_irqsave(&chan->vchan.lock, flags); 1182 1183 if (!vchan_issue_pending(&chan->vchan)) 1184 goto end; 1185 1186 dev_dbg(chan2dev(chan), "vchan %pK: issued\n", &chan->vchan); 1187 1188 if (!chan->desc && !chan->busy) 1189 stm32_mdma_start_transfer(chan); 1190 1191 end: 1192 spin_unlock_irqrestore(&chan->vchan.lock, flags); 1193 } 1194 1195 static int stm32_mdma_pause(struct dma_chan *c) 1196 { 1197 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1198 unsigned long flags; 1199 int ret; 1200 1201 spin_lock_irqsave(&chan->vchan.lock, flags); 1202 ret = stm32_mdma_disable_chan(chan); 1203 spin_unlock_irqrestore(&chan->vchan.lock, flags); 1204 1205 if (!ret) 1206 dev_dbg(chan2dev(chan), "vchan %pK: pause\n", &chan->vchan); 1207 1208 return ret; 1209 } 1210 1211 static int stm32_mdma_resume(struct dma_chan *c) 1212 { 1213 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1214 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 1215 struct stm32_mdma_hwdesc *hwdesc; 1216 unsigned long flags; 1217 u32 status, reg; 1218 1219 hwdesc = chan->desc->node[chan->curr_hwdesc].hwdesc; 1220 1221 spin_lock_irqsave(&chan->vchan.lock, flags); 1222 1223 /* Re-configure control register */ 1224 stm32_mdma_write(dmadev, STM32_MDMA_CCR(chan->id), chan->desc->ccr); 1225 1226 /* Clear interrupt status if it is there */ 1227 status = stm32_mdma_read(dmadev, STM32_MDMA_CISR(chan->id)); 1228 if (status) 1229 stm32_mdma_set_bits(dmadev, STM32_MDMA_CIFCR(chan->id), status); 1230 1231 stm32_mdma_dump_reg(chan); 1232 1233 /* Re-start DMA */ 1234 reg = STM32_MDMA_CCR(chan->id); 1235 stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CCR_EN); 1236 1237 /* Set SW request in case of MEM2MEM transfer */ 1238 if (hwdesc->ctcr & STM32_MDMA_CTCR_SWRM) 1239 stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CCR_SWRQ); 1240 1241 spin_unlock_irqrestore(&chan->vchan.lock, flags); 1242 1243 dev_dbg(chan2dev(chan), "vchan %pK: resume\n", &chan->vchan); 1244 1245 return 0; 1246 } 1247 1248 static int stm32_mdma_terminate_all(struct dma_chan *c) 1249 { 1250 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1251 unsigned long flags; 1252 LIST_HEAD(head); 1253 1254 spin_lock_irqsave(&chan->vchan.lock, flags); 1255 if (chan->busy) { 1256 stm32_mdma_stop(chan); 1257 chan->desc = NULL; 1258 } 1259 vchan_get_all_descriptors(&chan->vchan, &head); 1260 spin_unlock_irqrestore(&chan->vchan.lock, flags); 1261 1262 vchan_dma_desc_free_list(&chan->vchan, &head); 1263 1264 return 0; 1265 } 1266 1267 static void stm32_mdma_synchronize(struct dma_chan *c) 1268 { 1269 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1270 1271 vchan_synchronize(&chan->vchan); 1272 } 1273 1274 static int stm32_mdma_slave_config(struct dma_chan *c, 1275 struct dma_slave_config *config) 1276 { 1277 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1278 1279 memcpy(&chan->dma_config, config, sizeof(*config)); 1280 1281 return 0; 1282 } 1283 1284 static size_t stm32_mdma_desc_residue(struct stm32_mdma_chan *chan, 1285 struct stm32_mdma_desc *desc, 1286 u32 curr_hwdesc) 1287 { 1288 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 1289 struct stm32_mdma_hwdesc *hwdesc = desc->node[0].hwdesc; 1290 u32 cbndtr, residue, modulo, burst_size; 1291 int i; 1292 1293 residue = 0; 1294 for (i = curr_hwdesc + 1; i < desc->count; i++) { 1295 hwdesc = desc->node[i].hwdesc; 1296 residue += STM32_MDMA_CBNDTR_BNDT(hwdesc->cbndtr); 1297 } 1298 cbndtr = stm32_mdma_read(dmadev, STM32_MDMA_CBNDTR(chan->id)); 1299 residue += cbndtr & STM32_MDMA_CBNDTR_BNDT_MASK; 1300 1301 if (!chan->mem_burst) 1302 return residue; 1303 1304 burst_size = chan->mem_burst * chan->mem_width; 1305 modulo = residue % burst_size; 1306 if (modulo) 1307 residue = residue - modulo + burst_size; 1308 1309 return residue; 1310 } 1311 1312 static enum dma_status stm32_mdma_tx_status(struct dma_chan *c, 1313 dma_cookie_t cookie, 1314 struct dma_tx_state *state) 1315 { 1316 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1317 struct virt_dma_desc *vdesc; 1318 enum dma_status status; 1319 unsigned long flags; 1320 u32 residue = 0; 1321 1322 status = dma_cookie_status(c, cookie, state); 1323 if ((status == DMA_COMPLETE) || (!state)) 1324 return status; 1325 1326 spin_lock_irqsave(&chan->vchan.lock, flags); 1327 1328 vdesc = vchan_find_desc(&chan->vchan, cookie); 1329 if (chan->desc && cookie == chan->desc->vdesc.tx.cookie) 1330 residue = stm32_mdma_desc_residue(chan, chan->desc, 1331 chan->curr_hwdesc); 1332 else if (vdesc) 1333 residue = stm32_mdma_desc_residue(chan, 1334 to_stm32_mdma_desc(vdesc), 0); 1335 dma_set_residue(state, residue); 1336 1337 spin_unlock_irqrestore(&chan->vchan.lock, flags); 1338 1339 return status; 1340 } 1341 1342 static void stm32_mdma_xfer_end(struct stm32_mdma_chan *chan) 1343 { 1344 list_del(&chan->desc->vdesc.node); 1345 vchan_cookie_complete(&chan->desc->vdesc); 1346 chan->desc = NULL; 1347 chan->busy = false; 1348 1349 /* Start the next transfer if this driver has a next desc */ 1350 stm32_mdma_start_transfer(chan); 1351 } 1352 1353 static irqreturn_t stm32_mdma_irq_handler(int irq, void *devid) 1354 { 1355 struct stm32_mdma_device *dmadev = devid; 1356 struct stm32_mdma_chan *chan = devid; 1357 u32 reg, id, ien, status, flag; 1358 1359 /* Find out which channel generates the interrupt */ 1360 status = readl_relaxed(dmadev->base + STM32_MDMA_GISR0); 1361 if (status) { 1362 id = __ffs(status); 1363 } else { 1364 status = readl_relaxed(dmadev->base + STM32_MDMA_GISR1); 1365 if (!status) { 1366 dev_dbg(mdma2dev(dmadev), "spurious it\n"); 1367 return IRQ_NONE; 1368 } 1369 id = __ffs(status); 1370 /* 1371 * As GISR0 provides status for channel id from 0 to 31, 1372 * so GISR1 provides status for channel id from 32 to 62 1373 */ 1374 id += 32; 1375 } 1376 1377 chan = &dmadev->chan[id]; 1378 if (!chan) { 1379 dev_err(chan2dev(chan), "MDMA channel not initialized\n"); 1380 goto exit; 1381 } 1382 1383 /* Handle interrupt for the channel */ 1384 spin_lock(&chan->vchan.lock); 1385 status = stm32_mdma_read(dmadev, STM32_MDMA_CISR(chan->id)); 1386 ien = stm32_mdma_read(dmadev, STM32_MDMA_CCR(chan->id)); 1387 ien &= STM32_MDMA_CCR_IRQ_MASK; 1388 ien >>= 1; 1389 1390 if (!(status & ien)) { 1391 spin_unlock(&chan->vchan.lock); 1392 dev_dbg(chan2dev(chan), 1393 "spurious it (status=0x%04x, ien=0x%04x)\n", 1394 status, ien); 1395 return IRQ_NONE; 1396 } 1397 1398 flag = __ffs(status & ien); 1399 reg = STM32_MDMA_CIFCR(chan->id); 1400 1401 switch (1 << flag) { 1402 case STM32_MDMA_CISR_TEIF: 1403 id = chan->id; 1404 status = readl_relaxed(dmadev->base + STM32_MDMA_CESR(id)); 1405 dev_err(chan2dev(chan), "Transfer Err: stat=0x%08x\n", status); 1406 stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CTEIF); 1407 break; 1408 1409 case STM32_MDMA_CISR_CTCIF: 1410 stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CCTCIF); 1411 stm32_mdma_xfer_end(chan); 1412 break; 1413 1414 case STM32_MDMA_CISR_BRTIF: 1415 stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CBRTIF); 1416 break; 1417 1418 case STM32_MDMA_CISR_BTIF: 1419 stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CBTIF); 1420 chan->curr_hwdesc++; 1421 if (chan->desc && chan->desc->cyclic) { 1422 if (chan->curr_hwdesc == chan->desc->count) 1423 chan->curr_hwdesc = 0; 1424 vchan_cyclic_callback(&chan->desc->vdesc); 1425 } 1426 break; 1427 1428 case STM32_MDMA_CISR_TCIF: 1429 stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CLTCIF); 1430 break; 1431 1432 default: 1433 dev_err(chan2dev(chan), "it %d unhandled (status=0x%04x)\n", 1434 1 << flag, status); 1435 } 1436 1437 spin_unlock(&chan->vchan.lock); 1438 1439 exit: 1440 return IRQ_HANDLED; 1441 } 1442 1443 static int stm32_mdma_alloc_chan_resources(struct dma_chan *c) 1444 { 1445 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1446 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 1447 int ret; 1448 1449 chan->desc_pool = dmam_pool_create(dev_name(&c->dev->device), 1450 c->device->dev, 1451 sizeof(struct stm32_mdma_hwdesc), 1452 __alignof__(struct stm32_mdma_hwdesc), 1453 0); 1454 if (!chan->desc_pool) { 1455 dev_err(chan2dev(chan), "failed to allocate descriptor pool\n"); 1456 return -ENOMEM; 1457 } 1458 1459 ret = clk_prepare_enable(dmadev->clk); 1460 if (ret < 0) { 1461 dev_err(chan2dev(chan), "clk_prepare_enable failed: %d\n", ret); 1462 return ret; 1463 } 1464 1465 ret = stm32_mdma_disable_chan(chan); 1466 if (ret < 0) 1467 clk_disable_unprepare(dmadev->clk); 1468 1469 return ret; 1470 } 1471 1472 static void stm32_mdma_free_chan_resources(struct dma_chan *c) 1473 { 1474 struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); 1475 struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); 1476 unsigned long flags; 1477 1478 dev_dbg(chan2dev(chan), "Freeing channel %d\n", chan->id); 1479 1480 if (chan->busy) { 1481 spin_lock_irqsave(&chan->vchan.lock, flags); 1482 stm32_mdma_stop(chan); 1483 chan->desc = NULL; 1484 spin_unlock_irqrestore(&chan->vchan.lock, flags); 1485 } 1486 1487 clk_disable_unprepare(dmadev->clk); 1488 vchan_free_chan_resources(to_virt_chan(c)); 1489 dmam_pool_destroy(chan->desc_pool); 1490 chan->desc_pool = NULL; 1491 } 1492 1493 static struct dma_chan *stm32_mdma_of_xlate(struct of_phandle_args *dma_spec, 1494 struct of_dma *ofdma) 1495 { 1496 struct stm32_mdma_device *dmadev = ofdma->of_dma_data; 1497 struct stm32_mdma_chan *chan; 1498 struct dma_chan *c; 1499 struct stm32_mdma_chan_config config; 1500 1501 if (dma_spec->args_count < 5) { 1502 dev_err(mdma2dev(dmadev), "Bad number of args\n"); 1503 return NULL; 1504 } 1505 1506 config.request = dma_spec->args[0]; 1507 config.priority_level = dma_spec->args[1]; 1508 config.transfer_config = dma_spec->args[2]; 1509 config.mask_addr = dma_spec->args[3]; 1510 config.mask_data = dma_spec->args[4]; 1511 1512 if (config.request >= dmadev->nr_requests) { 1513 dev_err(mdma2dev(dmadev), "Bad request line\n"); 1514 return NULL; 1515 } 1516 1517 if (config.priority_level > STM32_MDMA_VERY_HIGH_PRIORITY) { 1518 dev_err(mdma2dev(dmadev), "Priority level not supported\n"); 1519 return NULL; 1520 } 1521 1522 c = dma_get_any_slave_channel(&dmadev->ddev); 1523 if (!c) { 1524 dev_err(mdma2dev(dmadev), "No more channels available\n"); 1525 return NULL; 1526 } 1527 1528 chan = to_stm32_mdma_chan(c); 1529 chan->chan_config = config; 1530 1531 return c; 1532 } 1533 1534 static const struct of_device_id stm32_mdma_of_match[] = { 1535 { .compatible = "st,stm32h7-mdma", }, 1536 { /* sentinel */ }, 1537 }; 1538 MODULE_DEVICE_TABLE(of, stm32_mdma_of_match); 1539 1540 static int stm32_mdma_probe(struct platform_device *pdev) 1541 { 1542 struct stm32_mdma_chan *chan; 1543 struct stm32_mdma_device *dmadev; 1544 struct dma_device *dd; 1545 struct device_node *of_node; 1546 struct resource *res; 1547 u32 nr_channels, nr_requests; 1548 int i, count, ret; 1549 1550 of_node = pdev->dev.of_node; 1551 if (!of_node) 1552 return -ENODEV; 1553 1554 ret = device_property_read_u32(&pdev->dev, "dma-channels", 1555 &nr_channels); 1556 if (ret) { 1557 nr_channels = STM32_MDMA_MAX_CHANNELS; 1558 dev_warn(&pdev->dev, "MDMA defaulting on %i channels\n", 1559 nr_channels); 1560 } 1561 1562 ret = device_property_read_u32(&pdev->dev, "dma-requests", 1563 &nr_requests); 1564 if (ret) { 1565 nr_requests = STM32_MDMA_MAX_REQUESTS; 1566 dev_warn(&pdev->dev, "MDMA defaulting on %i request lines\n", 1567 nr_requests); 1568 } 1569 1570 count = device_property_read_u32_array(&pdev->dev, "st,ahb-addr-masks", 1571 NULL, 0); 1572 if (count < 0) 1573 count = 0; 1574 1575 dmadev = devm_kzalloc(&pdev->dev, sizeof(*dmadev) + sizeof(u32) * count, 1576 GFP_KERNEL); 1577 if (!dmadev) 1578 return -ENOMEM; 1579 1580 dmadev->nr_channels = nr_channels; 1581 dmadev->nr_requests = nr_requests; 1582 device_property_read_u32_array(&pdev->dev, "st,ahb-addr-masks", 1583 dmadev->ahb_addr_masks, 1584 count); 1585 dmadev->nr_ahb_addr_masks = count; 1586 1587 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1588 dmadev->base = devm_ioremap_resource(&pdev->dev, res); 1589 if (IS_ERR(dmadev->base)) 1590 return PTR_ERR(dmadev->base); 1591 1592 dmadev->clk = devm_clk_get(&pdev->dev, NULL); 1593 if (IS_ERR(dmadev->clk)) { 1594 ret = PTR_ERR(dmadev->clk); 1595 if (ret == -EPROBE_DEFER) 1596 dev_info(&pdev->dev, "Missing controller clock\n"); 1597 return ret; 1598 } 1599 1600 dmadev->rst = devm_reset_control_get(&pdev->dev, NULL); 1601 if (!IS_ERR(dmadev->rst)) { 1602 reset_control_assert(dmadev->rst); 1603 udelay(2); 1604 reset_control_deassert(dmadev->rst); 1605 } 1606 1607 dd = &dmadev->ddev; 1608 dma_cap_set(DMA_SLAVE, dd->cap_mask); 1609 dma_cap_set(DMA_PRIVATE, dd->cap_mask); 1610 dma_cap_set(DMA_CYCLIC, dd->cap_mask); 1611 dma_cap_set(DMA_MEMCPY, dd->cap_mask); 1612 dd->device_alloc_chan_resources = stm32_mdma_alloc_chan_resources; 1613 dd->device_free_chan_resources = stm32_mdma_free_chan_resources; 1614 dd->device_tx_status = stm32_mdma_tx_status; 1615 dd->device_issue_pending = stm32_mdma_issue_pending; 1616 dd->device_prep_slave_sg = stm32_mdma_prep_slave_sg; 1617 dd->device_prep_dma_cyclic = stm32_mdma_prep_dma_cyclic; 1618 dd->device_prep_dma_memcpy = stm32_mdma_prep_dma_memcpy; 1619 dd->device_config = stm32_mdma_slave_config; 1620 dd->device_pause = stm32_mdma_pause; 1621 dd->device_resume = stm32_mdma_resume; 1622 dd->device_terminate_all = stm32_mdma_terminate_all; 1623 dd->device_synchronize = stm32_mdma_synchronize; 1624 dd->src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | 1625 BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | 1626 BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) | 1627 BIT(DMA_SLAVE_BUSWIDTH_8_BYTES); 1628 dd->dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | 1629 BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | 1630 BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) | 1631 BIT(DMA_SLAVE_BUSWIDTH_8_BYTES); 1632 dd->directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV) | 1633 BIT(DMA_MEM_TO_MEM); 1634 dd->residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; 1635 dd->max_burst = STM32_MDMA_MAX_BURST; 1636 dd->dev = &pdev->dev; 1637 INIT_LIST_HEAD(&dd->channels); 1638 1639 for (i = 0; i < dmadev->nr_channels; i++) { 1640 chan = &dmadev->chan[i]; 1641 chan->id = i; 1642 chan->vchan.desc_free = stm32_mdma_desc_free; 1643 vchan_init(&chan->vchan, dd); 1644 } 1645 1646 dmadev->irq = platform_get_irq(pdev, 0); 1647 if (dmadev->irq < 0) { 1648 dev_err(&pdev->dev, "failed to get IRQ\n"); 1649 return dmadev->irq; 1650 } 1651 1652 ret = devm_request_irq(&pdev->dev, dmadev->irq, stm32_mdma_irq_handler, 1653 0, dev_name(&pdev->dev), dmadev); 1654 if (ret) { 1655 dev_err(&pdev->dev, "failed to request IRQ\n"); 1656 return ret; 1657 } 1658 1659 ret = dmaenginem_async_device_register(dd); 1660 if (ret) 1661 return ret; 1662 1663 ret = of_dma_controller_register(of_node, stm32_mdma_of_xlate, dmadev); 1664 if (ret < 0) { 1665 dev_err(&pdev->dev, 1666 "STM32 MDMA DMA OF registration failed %d\n", ret); 1667 goto err_unregister; 1668 } 1669 1670 platform_set_drvdata(pdev, dmadev); 1671 1672 dev_info(&pdev->dev, "STM32 MDMA driver registered\n"); 1673 1674 return 0; 1675 1676 err_unregister: 1677 return ret; 1678 } 1679 1680 static struct platform_driver stm32_mdma_driver = { 1681 .probe = stm32_mdma_probe, 1682 .driver = { 1683 .name = "stm32-mdma", 1684 .of_match_table = stm32_mdma_of_match, 1685 }, 1686 }; 1687 1688 static int __init stm32_mdma_init(void) 1689 { 1690 return platform_driver_register(&stm32_mdma_driver); 1691 } 1692 1693 subsys_initcall(stm32_mdma_init); 1694 1695 MODULE_DESCRIPTION("Driver for STM32 MDMA controller"); 1696 MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>"); 1697 MODULE_AUTHOR("Pierre-Yves Mordret <pierre-yves.mordret@st.com>"); 1698 MODULE_LICENSE("GPL v2"); 1699