1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (C) 2014 Emilio López 4 * Emilio López <emilio@elopez.com.ar> 5 */ 6 7 #include <linux/bitmap.h> 8 #include <linux/bitops.h> 9 #include <linux/clk.h> 10 #include <linux/dmaengine.h> 11 #include <linux/dmapool.h> 12 #include <linux/interrupt.h> 13 #include <linux/module.h> 14 #include <linux/of_dma.h> 15 #include <linux/platform_device.h> 16 #include <linux/slab.h> 17 #include <linux/spinlock.h> 18 19 #include "virt-dma.h" 20 21 /** Common macros to normal and dedicated DMA registers **/ 22 23 #define SUN4I_DMA_CFG_LOADING BIT(31) 24 #define SUN4I_DMA_CFG_DST_DATA_WIDTH(width) ((width) << 25) 25 #define SUN4I_DMA_CFG_DST_BURST_LENGTH(len) ((len) << 23) 26 #define SUN4I_DMA_CFG_DST_ADDR_MODE(mode) ((mode) << 21) 27 #define SUN4I_DMA_CFG_DST_DRQ_TYPE(type) ((type) << 16) 28 #define SUN4I_DMA_CFG_SRC_DATA_WIDTH(width) ((width) << 9) 29 #define SUN4I_DMA_CFG_SRC_BURST_LENGTH(len) ((len) << 7) 30 #define SUN4I_DMA_CFG_SRC_ADDR_MODE(mode) ((mode) << 5) 31 #define SUN4I_DMA_CFG_SRC_DRQ_TYPE(type) (type) 32 33 /** Normal DMA register values **/ 34 35 /* Normal DMA source/destination data request type values */ 36 #define SUN4I_NDMA_DRQ_TYPE_SDRAM 0x16 37 #define SUN4I_NDMA_DRQ_TYPE_LIMIT (0x1F + 1) 38 39 /** Normal DMA register layout **/ 40 41 /* Dedicated DMA source/destination address mode values */ 42 #define SUN4I_NDMA_ADDR_MODE_LINEAR 0 43 #define SUN4I_NDMA_ADDR_MODE_IO 1 44 45 /* Normal DMA configuration register layout */ 46 #define SUN4I_NDMA_CFG_CONT_MODE BIT(30) 47 #define SUN4I_NDMA_CFG_WAIT_STATE(n) ((n) << 27) 48 #define SUN4I_NDMA_CFG_DST_NON_SECURE BIT(22) 49 #define SUN4I_NDMA_CFG_BYTE_COUNT_MODE_REMAIN BIT(15) 50 #define SUN4I_NDMA_CFG_SRC_NON_SECURE BIT(6) 51 52 /** Dedicated DMA register values **/ 53 54 /* Dedicated DMA source/destination address mode values */ 55 #define SUN4I_DDMA_ADDR_MODE_LINEAR 0 56 #define SUN4I_DDMA_ADDR_MODE_IO 1 57 #define SUN4I_DDMA_ADDR_MODE_HORIZONTAL_PAGE 2 58 #define SUN4I_DDMA_ADDR_MODE_VERTICAL_PAGE 3 59 60 /* Dedicated DMA source/destination data request type values */ 61 #define SUN4I_DDMA_DRQ_TYPE_SDRAM 0x1 62 #define SUN4I_DDMA_DRQ_TYPE_LIMIT (0x1F + 1) 63 64 /** Dedicated DMA register layout **/ 65 66 /* Dedicated DMA configuration register layout */ 67 #define SUN4I_DDMA_CFG_BUSY BIT(30) 68 #define SUN4I_DDMA_CFG_CONT_MODE BIT(29) 69 #define SUN4I_DDMA_CFG_DST_NON_SECURE BIT(28) 70 #define SUN4I_DDMA_CFG_BYTE_COUNT_MODE_REMAIN BIT(15) 71 #define SUN4I_DDMA_CFG_SRC_NON_SECURE BIT(12) 72 73 /* Dedicated DMA parameter register layout */ 74 #define SUN4I_DDMA_PARA_DST_DATA_BLK_SIZE(n) (((n) - 1) << 24) 75 #define SUN4I_DDMA_PARA_DST_WAIT_CYCLES(n) (((n) - 1) << 16) 76 #define SUN4I_DDMA_PARA_SRC_DATA_BLK_SIZE(n) (((n) - 1) << 8) 77 #define SUN4I_DDMA_PARA_SRC_WAIT_CYCLES(n) (((n) - 1) << 0) 78 79 /** DMA register offsets **/ 80 81 /* General register offsets */ 82 #define SUN4I_DMA_IRQ_ENABLE_REG 0x0 83 #define SUN4I_DMA_IRQ_PENDING_STATUS_REG 0x4 84 85 /* Normal DMA register offsets */ 86 #define SUN4I_NDMA_CHANNEL_REG_BASE(n) (0x100 + (n) * 0x20) 87 #define SUN4I_NDMA_CFG_REG 0x0 88 #define SUN4I_NDMA_SRC_ADDR_REG 0x4 89 #define SUN4I_NDMA_DST_ADDR_REG 0x8 90 #define SUN4I_NDMA_BYTE_COUNT_REG 0xC 91 92 /* Dedicated DMA register offsets */ 93 #define SUN4I_DDMA_CHANNEL_REG_BASE(n) (0x300 + (n) * 0x20) 94 #define SUN4I_DDMA_CFG_REG 0x0 95 #define SUN4I_DDMA_SRC_ADDR_REG 0x4 96 #define SUN4I_DDMA_DST_ADDR_REG 0x8 97 #define SUN4I_DDMA_BYTE_COUNT_REG 0xC 98 #define SUN4I_DDMA_PARA_REG 0x18 99 100 /** DMA Driver **/ 101 102 /* 103 * Normal DMA has 8 channels, and Dedicated DMA has another 8, so 104 * that's 16 channels. As for endpoints, there's 29 and 21 105 * respectively. Given that the Normal DMA endpoints (other than 106 * SDRAM) can be used as tx/rx, we need 78 vchans in total 107 */ 108 #define SUN4I_NDMA_NR_MAX_CHANNELS 8 109 #define SUN4I_DDMA_NR_MAX_CHANNELS 8 110 #define SUN4I_DMA_NR_MAX_CHANNELS \ 111 (SUN4I_NDMA_NR_MAX_CHANNELS + SUN4I_DDMA_NR_MAX_CHANNELS) 112 #define SUN4I_NDMA_NR_MAX_VCHANS (29 * 2 - 1) 113 #define SUN4I_DDMA_NR_MAX_VCHANS 21 114 #define SUN4I_DMA_NR_MAX_VCHANS \ 115 (SUN4I_NDMA_NR_MAX_VCHANS + SUN4I_DDMA_NR_MAX_VCHANS) 116 117 /* This set of SUN4I_DDMA timing parameters were found experimentally while 118 * working with the SPI driver and seem to make it behave correctly */ 119 #define SUN4I_DDMA_MAGIC_SPI_PARAMETERS \ 120 (SUN4I_DDMA_PARA_DST_DATA_BLK_SIZE(1) | \ 121 SUN4I_DDMA_PARA_SRC_DATA_BLK_SIZE(1) | \ 122 SUN4I_DDMA_PARA_DST_WAIT_CYCLES(2) | \ 123 SUN4I_DDMA_PARA_SRC_WAIT_CYCLES(2)) 124 125 struct sun4i_dma_pchan { 126 /* Register base of channel */ 127 void __iomem *base; 128 /* vchan currently being serviced */ 129 struct sun4i_dma_vchan *vchan; 130 /* Is this a dedicated pchan? */ 131 int is_dedicated; 132 }; 133 134 struct sun4i_dma_vchan { 135 struct virt_dma_chan vc; 136 struct dma_slave_config cfg; 137 struct sun4i_dma_pchan *pchan; 138 struct sun4i_dma_promise *processing; 139 struct sun4i_dma_contract *contract; 140 u8 endpoint; 141 int is_dedicated; 142 }; 143 144 struct sun4i_dma_promise { 145 u32 cfg; 146 u32 para; 147 dma_addr_t src; 148 dma_addr_t dst; 149 size_t len; 150 struct list_head list; 151 }; 152 153 /* A contract is a set of promises */ 154 struct sun4i_dma_contract { 155 struct virt_dma_desc vd; 156 struct list_head demands; 157 struct list_head completed_demands; 158 int is_cyclic; 159 }; 160 161 struct sun4i_dma_dev { 162 DECLARE_BITMAP(pchans_used, SUN4I_DMA_NR_MAX_CHANNELS); 163 struct dma_device slave; 164 struct sun4i_dma_pchan *pchans; 165 struct sun4i_dma_vchan *vchans; 166 void __iomem *base; 167 struct clk *clk; 168 int irq; 169 spinlock_t lock; 170 }; 171 172 static struct sun4i_dma_dev *to_sun4i_dma_dev(struct dma_device *dev) 173 { 174 return container_of(dev, struct sun4i_dma_dev, slave); 175 } 176 177 static struct sun4i_dma_vchan *to_sun4i_dma_vchan(struct dma_chan *chan) 178 { 179 return container_of(chan, struct sun4i_dma_vchan, vc.chan); 180 } 181 182 static struct sun4i_dma_contract *to_sun4i_dma_contract(struct virt_dma_desc *vd) 183 { 184 return container_of(vd, struct sun4i_dma_contract, vd); 185 } 186 187 static struct device *chan2dev(struct dma_chan *chan) 188 { 189 return &chan->dev->device; 190 } 191 192 static int convert_burst(u32 maxburst) 193 { 194 if (maxburst > 8) 195 return -EINVAL; 196 197 /* 1 -> 0, 4 -> 1, 8 -> 2 */ 198 return (maxburst >> 2); 199 } 200 201 static int convert_buswidth(enum dma_slave_buswidth addr_width) 202 { 203 if (addr_width > DMA_SLAVE_BUSWIDTH_4_BYTES) 204 return -EINVAL; 205 206 /* 8 (1 byte) -> 0, 16 (2 bytes) -> 1, 32 (4 bytes) -> 2 */ 207 return (addr_width >> 1); 208 } 209 210 static void sun4i_dma_free_chan_resources(struct dma_chan *chan) 211 { 212 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); 213 214 vchan_free_chan_resources(&vchan->vc); 215 } 216 217 static struct sun4i_dma_pchan *find_and_use_pchan(struct sun4i_dma_dev *priv, 218 struct sun4i_dma_vchan *vchan) 219 { 220 struct sun4i_dma_pchan *pchan = NULL, *pchans = priv->pchans; 221 unsigned long flags; 222 int i, max; 223 224 /* 225 * pchans 0-SUN4I_NDMA_NR_MAX_CHANNELS are normal, and 226 * SUN4I_NDMA_NR_MAX_CHANNELS+ are dedicated ones 227 */ 228 if (vchan->is_dedicated) { 229 i = SUN4I_NDMA_NR_MAX_CHANNELS; 230 max = SUN4I_DMA_NR_MAX_CHANNELS; 231 } else { 232 i = 0; 233 max = SUN4I_NDMA_NR_MAX_CHANNELS; 234 } 235 236 spin_lock_irqsave(&priv->lock, flags); 237 for_each_clear_bit_from(i, priv->pchans_used, max) { 238 pchan = &pchans[i]; 239 pchan->vchan = vchan; 240 set_bit(i, priv->pchans_used); 241 break; 242 } 243 spin_unlock_irqrestore(&priv->lock, flags); 244 245 return pchan; 246 } 247 248 static void release_pchan(struct sun4i_dma_dev *priv, 249 struct sun4i_dma_pchan *pchan) 250 { 251 unsigned long flags; 252 int nr = pchan - priv->pchans; 253 254 spin_lock_irqsave(&priv->lock, flags); 255 256 pchan->vchan = NULL; 257 clear_bit(nr, priv->pchans_used); 258 259 spin_unlock_irqrestore(&priv->lock, flags); 260 } 261 262 static void configure_pchan(struct sun4i_dma_pchan *pchan, 263 struct sun4i_dma_promise *d) 264 { 265 /* 266 * Configure addresses and misc parameters depending on type 267 * SUN4I_DDMA has an extra field with timing parameters 268 */ 269 if (pchan->is_dedicated) { 270 writel_relaxed(d->src, pchan->base + SUN4I_DDMA_SRC_ADDR_REG); 271 writel_relaxed(d->dst, pchan->base + SUN4I_DDMA_DST_ADDR_REG); 272 writel_relaxed(d->len, pchan->base + SUN4I_DDMA_BYTE_COUNT_REG); 273 writel_relaxed(d->para, pchan->base + SUN4I_DDMA_PARA_REG); 274 writel_relaxed(d->cfg, pchan->base + SUN4I_DDMA_CFG_REG); 275 } else { 276 writel_relaxed(d->src, pchan->base + SUN4I_NDMA_SRC_ADDR_REG); 277 writel_relaxed(d->dst, pchan->base + SUN4I_NDMA_DST_ADDR_REG); 278 writel_relaxed(d->len, pchan->base + SUN4I_NDMA_BYTE_COUNT_REG); 279 writel_relaxed(d->cfg, pchan->base + SUN4I_NDMA_CFG_REG); 280 } 281 } 282 283 static void set_pchan_interrupt(struct sun4i_dma_dev *priv, 284 struct sun4i_dma_pchan *pchan, 285 int half, int end) 286 { 287 u32 reg; 288 int pchan_number = pchan - priv->pchans; 289 unsigned long flags; 290 291 spin_lock_irqsave(&priv->lock, flags); 292 293 reg = readl_relaxed(priv->base + SUN4I_DMA_IRQ_ENABLE_REG); 294 295 if (half) 296 reg |= BIT(pchan_number * 2); 297 else 298 reg &= ~BIT(pchan_number * 2); 299 300 if (end) 301 reg |= BIT(pchan_number * 2 + 1); 302 else 303 reg &= ~BIT(pchan_number * 2 + 1); 304 305 writel_relaxed(reg, priv->base + SUN4I_DMA_IRQ_ENABLE_REG); 306 307 spin_unlock_irqrestore(&priv->lock, flags); 308 } 309 310 /** 311 * Execute pending operations on a vchan 312 * 313 * When given a vchan, this function will try to acquire a suitable 314 * pchan and, if successful, will configure it to fulfill a promise 315 * from the next pending contract. 316 * 317 * This function must be called with &vchan->vc.lock held. 318 */ 319 static int __execute_vchan_pending(struct sun4i_dma_dev *priv, 320 struct sun4i_dma_vchan *vchan) 321 { 322 struct sun4i_dma_promise *promise = NULL; 323 struct sun4i_dma_contract *contract = NULL; 324 struct sun4i_dma_pchan *pchan; 325 struct virt_dma_desc *vd; 326 int ret; 327 328 lockdep_assert_held(&vchan->vc.lock); 329 330 /* We need a pchan to do anything, so secure one if available */ 331 pchan = find_and_use_pchan(priv, vchan); 332 if (!pchan) 333 return -EBUSY; 334 335 /* 336 * Channel endpoints must not be repeated, so if this vchan 337 * has already submitted some work, we can't do anything else 338 */ 339 if (vchan->processing) { 340 dev_dbg(chan2dev(&vchan->vc.chan), 341 "processing something to this endpoint already\n"); 342 ret = -EBUSY; 343 goto release_pchan; 344 } 345 346 do { 347 /* Figure out which contract we're working with today */ 348 vd = vchan_next_desc(&vchan->vc); 349 if (!vd) { 350 dev_dbg(chan2dev(&vchan->vc.chan), 351 "No pending contract found"); 352 ret = 0; 353 goto release_pchan; 354 } 355 356 contract = to_sun4i_dma_contract(vd); 357 if (list_empty(&contract->demands)) { 358 /* The contract has been completed so mark it as such */ 359 list_del(&contract->vd.node); 360 vchan_cookie_complete(&contract->vd); 361 dev_dbg(chan2dev(&vchan->vc.chan), 362 "Empty contract found and marked complete"); 363 } 364 } while (list_empty(&contract->demands)); 365 366 /* Now find out what we need to do */ 367 promise = list_first_entry(&contract->demands, 368 struct sun4i_dma_promise, list); 369 vchan->processing = promise; 370 371 /* ... and make it reality */ 372 if (promise) { 373 vchan->contract = contract; 374 vchan->pchan = pchan; 375 set_pchan_interrupt(priv, pchan, contract->is_cyclic, 1); 376 configure_pchan(pchan, promise); 377 } 378 379 return 0; 380 381 release_pchan: 382 release_pchan(priv, pchan); 383 return ret; 384 } 385 386 static int sanitize_config(struct dma_slave_config *sconfig, 387 enum dma_transfer_direction direction) 388 { 389 switch (direction) { 390 case DMA_MEM_TO_DEV: 391 if ((sconfig->dst_addr_width == DMA_SLAVE_BUSWIDTH_UNDEFINED) || 392 !sconfig->dst_maxburst) 393 return -EINVAL; 394 395 if (sconfig->src_addr_width == DMA_SLAVE_BUSWIDTH_UNDEFINED) 396 sconfig->src_addr_width = sconfig->dst_addr_width; 397 398 if (!sconfig->src_maxburst) 399 sconfig->src_maxburst = sconfig->dst_maxburst; 400 401 break; 402 403 case DMA_DEV_TO_MEM: 404 if ((sconfig->src_addr_width == DMA_SLAVE_BUSWIDTH_UNDEFINED) || 405 !sconfig->src_maxburst) 406 return -EINVAL; 407 408 if (sconfig->dst_addr_width == DMA_SLAVE_BUSWIDTH_UNDEFINED) 409 sconfig->dst_addr_width = sconfig->src_addr_width; 410 411 if (!sconfig->dst_maxburst) 412 sconfig->dst_maxburst = sconfig->src_maxburst; 413 414 break; 415 default: 416 return 0; 417 } 418 419 return 0; 420 } 421 422 /** 423 * Generate a promise, to be used in a normal DMA contract. 424 * 425 * A NDMA promise contains all the information required to program the 426 * normal part of the DMA Engine and get data copied. A non-executed 427 * promise will live in the demands list on a contract. Once it has been 428 * completed, it will be moved to the completed demands list for later freeing. 429 * All linked promises will be freed when the corresponding contract is freed 430 */ 431 static struct sun4i_dma_promise * 432 generate_ndma_promise(struct dma_chan *chan, dma_addr_t src, dma_addr_t dest, 433 size_t len, struct dma_slave_config *sconfig, 434 enum dma_transfer_direction direction) 435 { 436 struct sun4i_dma_promise *promise; 437 int ret; 438 439 ret = sanitize_config(sconfig, direction); 440 if (ret) 441 return NULL; 442 443 promise = kzalloc(sizeof(*promise), GFP_NOWAIT); 444 if (!promise) 445 return NULL; 446 447 promise->src = src; 448 promise->dst = dest; 449 promise->len = len; 450 promise->cfg = SUN4I_DMA_CFG_LOADING | 451 SUN4I_NDMA_CFG_BYTE_COUNT_MODE_REMAIN; 452 453 dev_dbg(chan2dev(chan), 454 "src burst %d, dst burst %d, src buswidth %d, dst buswidth %d", 455 sconfig->src_maxburst, sconfig->dst_maxburst, 456 sconfig->src_addr_width, sconfig->dst_addr_width); 457 458 /* Source burst */ 459 ret = convert_burst(sconfig->src_maxburst); 460 if (ret < 0) 461 goto fail; 462 promise->cfg |= SUN4I_DMA_CFG_SRC_BURST_LENGTH(ret); 463 464 /* Destination burst */ 465 ret = convert_burst(sconfig->dst_maxburst); 466 if (ret < 0) 467 goto fail; 468 promise->cfg |= SUN4I_DMA_CFG_DST_BURST_LENGTH(ret); 469 470 /* Source bus width */ 471 ret = convert_buswidth(sconfig->src_addr_width); 472 if (ret < 0) 473 goto fail; 474 promise->cfg |= SUN4I_DMA_CFG_SRC_DATA_WIDTH(ret); 475 476 /* Destination bus width */ 477 ret = convert_buswidth(sconfig->dst_addr_width); 478 if (ret < 0) 479 goto fail; 480 promise->cfg |= SUN4I_DMA_CFG_DST_DATA_WIDTH(ret); 481 482 return promise; 483 484 fail: 485 kfree(promise); 486 return NULL; 487 } 488 489 /** 490 * Generate a promise, to be used in a dedicated DMA contract. 491 * 492 * A DDMA promise contains all the information required to program the 493 * Dedicated part of the DMA Engine and get data copied. A non-executed 494 * promise will live in the demands list on a contract. Once it has been 495 * completed, it will be moved to the completed demands list for later freeing. 496 * All linked promises will be freed when the corresponding contract is freed 497 */ 498 static struct sun4i_dma_promise * 499 generate_ddma_promise(struct dma_chan *chan, dma_addr_t src, dma_addr_t dest, 500 size_t len, struct dma_slave_config *sconfig) 501 { 502 struct sun4i_dma_promise *promise; 503 int ret; 504 505 promise = kzalloc(sizeof(*promise), GFP_NOWAIT); 506 if (!promise) 507 return NULL; 508 509 promise->src = src; 510 promise->dst = dest; 511 promise->len = len; 512 promise->cfg = SUN4I_DMA_CFG_LOADING | 513 SUN4I_DDMA_CFG_BYTE_COUNT_MODE_REMAIN; 514 515 /* Source burst */ 516 ret = convert_burst(sconfig->src_maxburst); 517 if (ret < 0) 518 goto fail; 519 promise->cfg |= SUN4I_DMA_CFG_SRC_BURST_LENGTH(ret); 520 521 /* Destination burst */ 522 ret = convert_burst(sconfig->dst_maxburst); 523 if (ret < 0) 524 goto fail; 525 promise->cfg |= SUN4I_DMA_CFG_DST_BURST_LENGTH(ret); 526 527 /* Source bus width */ 528 ret = convert_buswidth(sconfig->src_addr_width); 529 if (ret < 0) 530 goto fail; 531 promise->cfg |= SUN4I_DMA_CFG_SRC_DATA_WIDTH(ret); 532 533 /* Destination bus width */ 534 ret = convert_buswidth(sconfig->dst_addr_width); 535 if (ret < 0) 536 goto fail; 537 promise->cfg |= SUN4I_DMA_CFG_DST_DATA_WIDTH(ret); 538 539 return promise; 540 541 fail: 542 kfree(promise); 543 return NULL; 544 } 545 546 /** 547 * Generate a contract 548 * 549 * Contracts function as DMA descriptors. As our hardware does not support 550 * linked lists, we need to implement SG via software. We use a contract 551 * to hold all the pieces of the request and process them serially one 552 * after another. Each piece is represented as a promise. 553 */ 554 static struct sun4i_dma_contract *generate_dma_contract(void) 555 { 556 struct sun4i_dma_contract *contract; 557 558 contract = kzalloc(sizeof(*contract), GFP_NOWAIT); 559 if (!contract) 560 return NULL; 561 562 INIT_LIST_HEAD(&contract->demands); 563 INIT_LIST_HEAD(&contract->completed_demands); 564 565 return contract; 566 } 567 568 /** 569 * Get next promise on a cyclic transfer 570 * 571 * Cyclic contracts contain a series of promises which are executed on a 572 * loop. This function returns the next promise from a cyclic contract, 573 * so it can be programmed into the hardware. 574 */ 575 static struct sun4i_dma_promise * 576 get_next_cyclic_promise(struct sun4i_dma_contract *contract) 577 { 578 struct sun4i_dma_promise *promise; 579 580 promise = list_first_entry_or_null(&contract->demands, 581 struct sun4i_dma_promise, list); 582 if (!promise) { 583 list_splice_init(&contract->completed_demands, 584 &contract->demands); 585 promise = list_first_entry(&contract->demands, 586 struct sun4i_dma_promise, list); 587 } 588 589 return promise; 590 } 591 592 /** 593 * Free a contract and all its associated promises 594 */ 595 static void sun4i_dma_free_contract(struct virt_dma_desc *vd) 596 { 597 struct sun4i_dma_contract *contract = to_sun4i_dma_contract(vd); 598 struct sun4i_dma_promise *promise, *tmp; 599 600 /* Free all the demands and completed demands */ 601 list_for_each_entry_safe(promise, tmp, &contract->demands, list) 602 kfree(promise); 603 604 list_for_each_entry_safe(promise, tmp, &contract->completed_demands, list) 605 kfree(promise); 606 607 kfree(contract); 608 } 609 610 static struct dma_async_tx_descriptor * 611 sun4i_dma_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, 612 dma_addr_t src, size_t len, unsigned long flags) 613 { 614 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); 615 struct dma_slave_config *sconfig = &vchan->cfg; 616 struct sun4i_dma_promise *promise; 617 struct sun4i_dma_contract *contract; 618 619 contract = generate_dma_contract(); 620 if (!contract) 621 return NULL; 622 623 /* 624 * We can only do the copy to bus aligned addresses, so 625 * choose the best one so we get decent performance. We also 626 * maximize the burst size for this same reason. 627 */ 628 sconfig->src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 629 sconfig->dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 630 sconfig->src_maxburst = 8; 631 sconfig->dst_maxburst = 8; 632 633 if (vchan->is_dedicated) 634 promise = generate_ddma_promise(chan, src, dest, len, sconfig); 635 else 636 promise = generate_ndma_promise(chan, src, dest, len, sconfig, 637 DMA_MEM_TO_MEM); 638 639 if (!promise) { 640 kfree(contract); 641 return NULL; 642 } 643 644 /* Configure memcpy mode */ 645 if (vchan->is_dedicated) { 646 promise->cfg |= SUN4I_DMA_CFG_SRC_DRQ_TYPE(SUN4I_DDMA_DRQ_TYPE_SDRAM) | 647 SUN4I_DMA_CFG_DST_DRQ_TYPE(SUN4I_DDMA_DRQ_TYPE_SDRAM); 648 } else { 649 promise->cfg |= SUN4I_DMA_CFG_SRC_DRQ_TYPE(SUN4I_NDMA_DRQ_TYPE_SDRAM) | 650 SUN4I_DMA_CFG_DST_DRQ_TYPE(SUN4I_NDMA_DRQ_TYPE_SDRAM); 651 } 652 653 /* Fill the contract with our only promise */ 654 list_add_tail(&promise->list, &contract->demands); 655 656 /* And add it to the vchan */ 657 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); 658 } 659 660 static struct dma_async_tx_descriptor * 661 sun4i_dma_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf, size_t len, 662 size_t period_len, enum dma_transfer_direction dir, 663 unsigned long flags) 664 { 665 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); 666 struct dma_slave_config *sconfig = &vchan->cfg; 667 struct sun4i_dma_promise *promise; 668 struct sun4i_dma_contract *contract; 669 dma_addr_t src, dest; 670 u32 endpoints; 671 int nr_periods, offset, plength, i; 672 u8 ram_type, io_mode, linear_mode; 673 674 if (!is_slave_direction(dir)) { 675 dev_err(chan2dev(chan), "Invalid DMA direction\n"); 676 return NULL; 677 } 678 679 contract = generate_dma_contract(); 680 if (!contract) 681 return NULL; 682 683 contract->is_cyclic = 1; 684 685 if (vchan->is_dedicated) { 686 io_mode = SUN4I_DDMA_ADDR_MODE_IO; 687 linear_mode = SUN4I_DDMA_ADDR_MODE_LINEAR; 688 ram_type = SUN4I_DDMA_DRQ_TYPE_SDRAM; 689 } else { 690 io_mode = SUN4I_NDMA_ADDR_MODE_IO; 691 linear_mode = SUN4I_NDMA_ADDR_MODE_LINEAR; 692 ram_type = SUN4I_NDMA_DRQ_TYPE_SDRAM; 693 } 694 695 if (dir == DMA_MEM_TO_DEV) { 696 src = buf; 697 dest = sconfig->dst_addr; 698 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | 699 SUN4I_DMA_CFG_DST_ADDR_MODE(io_mode) | 700 SUN4I_DMA_CFG_SRC_DRQ_TYPE(ram_type); 701 } else { 702 src = sconfig->src_addr; 703 dest = buf; 704 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(ram_type) | 705 SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | 706 SUN4I_DMA_CFG_SRC_ADDR_MODE(io_mode); 707 } 708 709 /* 710 * We will be using half done interrupts to make two periods 711 * out of a promise, so we need to program the DMA engine less 712 * often 713 */ 714 715 /* 716 * The engine can interrupt on half-transfer, so we can use 717 * this feature to program the engine half as often as if we 718 * didn't use it (keep in mind the hardware doesn't support 719 * linked lists). 720 * 721 * Say you have a set of periods (| marks the start/end, I for 722 * interrupt, P for programming the engine to do a new 723 * transfer), the easy but slow way would be to do 724 * 725 * |---|---|---|---| (periods / promises) 726 * P I,P I,P I,P I 727 * 728 * Using half transfer interrupts you can do 729 * 730 * |-------|-------| (promises as configured on hw) 731 * |---|---|---|---| (periods) 732 * P I I,P I I 733 * 734 * Which requires half the engine programming for the same 735 * functionality. 736 */ 737 nr_periods = DIV_ROUND_UP(len / period_len, 2); 738 for (i = 0; i < nr_periods; i++) { 739 /* Calculate the offset in the buffer and the length needed */ 740 offset = i * period_len * 2; 741 plength = min((len - offset), (period_len * 2)); 742 if (dir == DMA_MEM_TO_DEV) 743 src = buf + offset; 744 else 745 dest = buf + offset; 746 747 /* Make the promise */ 748 if (vchan->is_dedicated) 749 promise = generate_ddma_promise(chan, src, dest, 750 plength, sconfig); 751 else 752 promise = generate_ndma_promise(chan, src, dest, 753 plength, sconfig, dir); 754 755 if (!promise) { 756 /* TODO: should we free everything? */ 757 return NULL; 758 } 759 promise->cfg |= endpoints; 760 761 /* Then add it to the contract */ 762 list_add_tail(&promise->list, &contract->demands); 763 } 764 765 /* And add it to the vchan */ 766 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); 767 } 768 769 static struct dma_async_tx_descriptor * 770 sun4i_dma_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, 771 unsigned int sg_len, enum dma_transfer_direction dir, 772 unsigned long flags, void *context) 773 { 774 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); 775 struct dma_slave_config *sconfig = &vchan->cfg; 776 struct sun4i_dma_promise *promise; 777 struct sun4i_dma_contract *contract; 778 u8 ram_type, io_mode, linear_mode; 779 struct scatterlist *sg; 780 dma_addr_t srcaddr, dstaddr; 781 u32 endpoints, para; 782 int i; 783 784 if (!sgl) 785 return NULL; 786 787 if (!is_slave_direction(dir)) { 788 dev_err(chan2dev(chan), "Invalid DMA direction\n"); 789 return NULL; 790 } 791 792 contract = generate_dma_contract(); 793 if (!contract) 794 return NULL; 795 796 if (vchan->is_dedicated) { 797 io_mode = SUN4I_DDMA_ADDR_MODE_IO; 798 linear_mode = SUN4I_DDMA_ADDR_MODE_LINEAR; 799 ram_type = SUN4I_DDMA_DRQ_TYPE_SDRAM; 800 } else { 801 io_mode = SUN4I_NDMA_ADDR_MODE_IO; 802 linear_mode = SUN4I_NDMA_ADDR_MODE_LINEAR; 803 ram_type = SUN4I_NDMA_DRQ_TYPE_SDRAM; 804 } 805 806 if (dir == DMA_MEM_TO_DEV) 807 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | 808 SUN4I_DMA_CFG_DST_ADDR_MODE(io_mode) | 809 SUN4I_DMA_CFG_SRC_DRQ_TYPE(ram_type) | 810 SUN4I_DMA_CFG_SRC_ADDR_MODE(linear_mode); 811 else 812 endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(ram_type) | 813 SUN4I_DMA_CFG_DST_ADDR_MODE(linear_mode) | 814 SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | 815 SUN4I_DMA_CFG_SRC_ADDR_MODE(io_mode); 816 817 for_each_sg(sgl, sg, sg_len, i) { 818 /* Figure out addresses */ 819 if (dir == DMA_MEM_TO_DEV) { 820 srcaddr = sg_dma_address(sg); 821 dstaddr = sconfig->dst_addr; 822 } else { 823 srcaddr = sconfig->src_addr; 824 dstaddr = sg_dma_address(sg); 825 } 826 827 /* 828 * These are the magic DMA engine timings that keep SPI going. 829 * I haven't seen any interface on DMAEngine to configure 830 * timings, and so far they seem to work for everything we 831 * support, so I've kept them here. I don't know if other 832 * devices need different timings because, as usual, we only 833 * have the "para" bitfield meanings, but no comment on what 834 * the values should be when doing a certain operation :| 835 */ 836 para = SUN4I_DDMA_MAGIC_SPI_PARAMETERS; 837 838 /* And make a suitable promise */ 839 if (vchan->is_dedicated) 840 promise = generate_ddma_promise(chan, srcaddr, dstaddr, 841 sg_dma_len(sg), 842 sconfig); 843 else 844 promise = generate_ndma_promise(chan, srcaddr, dstaddr, 845 sg_dma_len(sg), 846 sconfig, dir); 847 848 if (!promise) 849 return NULL; /* TODO: should we free everything? */ 850 851 promise->cfg |= endpoints; 852 promise->para = para; 853 854 /* Then add it to the contract */ 855 list_add_tail(&promise->list, &contract->demands); 856 } 857 858 /* 859 * Once we've got all the promises ready, add the contract 860 * to the pending list on the vchan 861 */ 862 return vchan_tx_prep(&vchan->vc, &contract->vd, flags); 863 } 864 865 static int sun4i_dma_terminate_all(struct dma_chan *chan) 866 { 867 struct sun4i_dma_dev *priv = to_sun4i_dma_dev(chan->device); 868 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); 869 struct sun4i_dma_pchan *pchan = vchan->pchan; 870 LIST_HEAD(head); 871 unsigned long flags; 872 873 spin_lock_irqsave(&vchan->vc.lock, flags); 874 vchan_get_all_descriptors(&vchan->vc, &head); 875 spin_unlock_irqrestore(&vchan->vc.lock, flags); 876 877 /* 878 * Clearing the configuration register will halt the pchan. Interrupts 879 * may still trigger, so don't forget to disable them. 880 */ 881 if (pchan) { 882 if (pchan->is_dedicated) 883 writel(0, pchan->base + SUN4I_DDMA_CFG_REG); 884 else 885 writel(0, pchan->base + SUN4I_NDMA_CFG_REG); 886 set_pchan_interrupt(priv, pchan, 0, 0); 887 release_pchan(priv, pchan); 888 } 889 890 spin_lock_irqsave(&vchan->vc.lock, flags); 891 /* Clear these so the vchan is usable again */ 892 vchan->processing = NULL; 893 vchan->pchan = NULL; 894 spin_unlock_irqrestore(&vchan->vc.lock, flags); 895 896 vchan_dma_desc_free_list(&vchan->vc, &head); 897 898 return 0; 899 } 900 901 static int sun4i_dma_config(struct dma_chan *chan, 902 struct dma_slave_config *config) 903 { 904 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); 905 906 memcpy(&vchan->cfg, config, sizeof(*config)); 907 908 return 0; 909 } 910 911 static struct dma_chan *sun4i_dma_of_xlate(struct of_phandle_args *dma_spec, 912 struct of_dma *ofdma) 913 { 914 struct sun4i_dma_dev *priv = ofdma->of_dma_data; 915 struct sun4i_dma_vchan *vchan; 916 struct dma_chan *chan; 917 u8 is_dedicated = dma_spec->args[0]; 918 u8 endpoint = dma_spec->args[1]; 919 920 /* Check if type is Normal or Dedicated */ 921 if (is_dedicated != 0 && is_dedicated != 1) 922 return NULL; 923 924 /* Make sure the endpoint looks sane */ 925 if ((is_dedicated && endpoint >= SUN4I_DDMA_DRQ_TYPE_LIMIT) || 926 (!is_dedicated && endpoint >= SUN4I_NDMA_DRQ_TYPE_LIMIT)) 927 return NULL; 928 929 chan = dma_get_any_slave_channel(&priv->slave); 930 if (!chan) 931 return NULL; 932 933 /* Assign the endpoint to the vchan */ 934 vchan = to_sun4i_dma_vchan(chan); 935 vchan->is_dedicated = is_dedicated; 936 vchan->endpoint = endpoint; 937 938 return chan; 939 } 940 941 static enum dma_status sun4i_dma_tx_status(struct dma_chan *chan, 942 dma_cookie_t cookie, 943 struct dma_tx_state *state) 944 { 945 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); 946 struct sun4i_dma_pchan *pchan = vchan->pchan; 947 struct sun4i_dma_contract *contract; 948 struct sun4i_dma_promise *promise; 949 struct virt_dma_desc *vd; 950 unsigned long flags; 951 enum dma_status ret; 952 size_t bytes = 0; 953 954 ret = dma_cookie_status(chan, cookie, state); 955 if (!state || (ret == DMA_COMPLETE)) 956 return ret; 957 958 spin_lock_irqsave(&vchan->vc.lock, flags); 959 vd = vchan_find_desc(&vchan->vc, cookie); 960 if (!vd) 961 goto exit; 962 contract = to_sun4i_dma_contract(vd); 963 964 list_for_each_entry(promise, &contract->demands, list) 965 bytes += promise->len; 966 967 /* 968 * The hardware is configured to return the remaining byte 969 * quantity. If possible, replace the first listed element's 970 * full size with the actual remaining amount 971 */ 972 promise = list_first_entry_or_null(&contract->demands, 973 struct sun4i_dma_promise, list); 974 if (promise && pchan) { 975 bytes -= promise->len; 976 if (pchan->is_dedicated) 977 bytes += readl(pchan->base + SUN4I_DDMA_BYTE_COUNT_REG); 978 else 979 bytes += readl(pchan->base + SUN4I_NDMA_BYTE_COUNT_REG); 980 } 981 982 exit: 983 984 dma_set_residue(state, bytes); 985 spin_unlock_irqrestore(&vchan->vc.lock, flags); 986 987 return ret; 988 } 989 990 static void sun4i_dma_issue_pending(struct dma_chan *chan) 991 { 992 struct sun4i_dma_dev *priv = to_sun4i_dma_dev(chan->device); 993 struct sun4i_dma_vchan *vchan = to_sun4i_dma_vchan(chan); 994 unsigned long flags; 995 996 spin_lock_irqsave(&vchan->vc.lock, flags); 997 998 /* 999 * If there are pending transactions for this vchan, push one of 1000 * them into the engine to get the ball rolling. 1001 */ 1002 if (vchan_issue_pending(&vchan->vc)) 1003 __execute_vchan_pending(priv, vchan); 1004 1005 spin_unlock_irqrestore(&vchan->vc.lock, flags); 1006 } 1007 1008 static irqreturn_t sun4i_dma_interrupt(int irq, void *dev_id) 1009 { 1010 struct sun4i_dma_dev *priv = dev_id; 1011 struct sun4i_dma_pchan *pchans = priv->pchans, *pchan; 1012 struct sun4i_dma_vchan *vchan; 1013 struct sun4i_dma_contract *contract; 1014 struct sun4i_dma_promise *promise; 1015 unsigned long pendirq, irqs, disableirqs; 1016 int bit, i, free_room, allow_mitigation = 1; 1017 1018 pendirq = readl_relaxed(priv->base + SUN4I_DMA_IRQ_PENDING_STATUS_REG); 1019 1020 handle_pending: 1021 1022 disableirqs = 0; 1023 free_room = 0; 1024 1025 for_each_set_bit(bit, &pendirq, 32) { 1026 pchan = &pchans[bit >> 1]; 1027 vchan = pchan->vchan; 1028 if (!vchan) /* a terminated channel may still interrupt */ 1029 continue; 1030 contract = vchan->contract; 1031 1032 /* 1033 * Disable the IRQ and free the pchan if it's an end 1034 * interrupt (odd bit) 1035 */ 1036 if (bit & 1) { 1037 spin_lock(&vchan->vc.lock); 1038 1039 /* 1040 * Move the promise into the completed list now that 1041 * we're done with it 1042 */ 1043 list_del(&vchan->processing->list); 1044 list_add_tail(&vchan->processing->list, 1045 &contract->completed_demands); 1046 1047 /* 1048 * Cyclic DMA transfers are special: 1049 * - There's always something we can dispatch 1050 * - We need to run the callback 1051 * - Latency is very important, as this is used by audio 1052 * We therefore just cycle through the list and dispatch 1053 * whatever we have here, reusing the pchan. There's 1054 * no need to run the thread after this. 1055 * 1056 * For non-cyclic transfers we need to look around, 1057 * so we can program some more work, or notify the 1058 * client that their transfers have been completed. 1059 */ 1060 if (contract->is_cyclic) { 1061 promise = get_next_cyclic_promise(contract); 1062 vchan->processing = promise; 1063 configure_pchan(pchan, promise); 1064 vchan_cyclic_callback(&contract->vd); 1065 } else { 1066 vchan->processing = NULL; 1067 vchan->pchan = NULL; 1068 1069 free_room = 1; 1070 disableirqs |= BIT(bit); 1071 release_pchan(priv, pchan); 1072 } 1073 1074 spin_unlock(&vchan->vc.lock); 1075 } else { 1076 /* Half done interrupt */ 1077 if (contract->is_cyclic) 1078 vchan_cyclic_callback(&contract->vd); 1079 else 1080 disableirqs |= BIT(bit); 1081 } 1082 } 1083 1084 /* Disable the IRQs for events we handled */ 1085 spin_lock(&priv->lock); 1086 irqs = readl_relaxed(priv->base + SUN4I_DMA_IRQ_ENABLE_REG); 1087 writel_relaxed(irqs & ~disableirqs, 1088 priv->base + SUN4I_DMA_IRQ_ENABLE_REG); 1089 spin_unlock(&priv->lock); 1090 1091 /* Writing 1 to the pending field will clear the pending interrupt */ 1092 writel_relaxed(pendirq, priv->base + SUN4I_DMA_IRQ_PENDING_STATUS_REG); 1093 1094 /* 1095 * If a pchan was freed, we may be able to schedule something else, 1096 * so have a look around 1097 */ 1098 if (free_room) { 1099 for (i = 0; i < SUN4I_DMA_NR_MAX_VCHANS; i++) { 1100 vchan = &priv->vchans[i]; 1101 spin_lock(&vchan->vc.lock); 1102 __execute_vchan_pending(priv, vchan); 1103 spin_unlock(&vchan->vc.lock); 1104 } 1105 } 1106 1107 /* 1108 * Handle newer interrupts if some showed up, but only do it once 1109 * to avoid a too long a loop 1110 */ 1111 if (allow_mitigation) { 1112 pendirq = readl_relaxed(priv->base + 1113 SUN4I_DMA_IRQ_PENDING_STATUS_REG); 1114 if (pendirq) { 1115 allow_mitigation = 0; 1116 goto handle_pending; 1117 } 1118 } 1119 1120 return IRQ_HANDLED; 1121 } 1122 1123 static int sun4i_dma_probe(struct platform_device *pdev) 1124 { 1125 struct sun4i_dma_dev *priv; 1126 struct resource *res; 1127 int i, j, ret; 1128 1129 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); 1130 if (!priv) 1131 return -ENOMEM; 1132 1133 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1134 priv->base = devm_ioremap_resource(&pdev->dev, res); 1135 if (IS_ERR(priv->base)) 1136 return PTR_ERR(priv->base); 1137 1138 priv->irq = platform_get_irq(pdev, 0); 1139 if (priv->irq < 0) 1140 return priv->irq; 1141 1142 priv->clk = devm_clk_get(&pdev->dev, NULL); 1143 if (IS_ERR(priv->clk)) { 1144 dev_err(&pdev->dev, "No clock specified\n"); 1145 return PTR_ERR(priv->clk); 1146 } 1147 1148 platform_set_drvdata(pdev, priv); 1149 spin_lock_init(&priv->lock); 1150 1151 dma_cap_zero(priv->slave.cap_mask); 1152 dma_cap_set(DMA_PRIVATE, priv->slave.cap_mask); 1153 dma_cap_set(DMA_MEMCPY, priv->slave.cap_mask); 1154 dma_cap_set(DMA_CYCLIC, priv->slave.cap_mask); 1155 dma_cap_set(DMA_SLAVE, priv->slave.cap_mask); 1156 1157 INIT_LIST_HEAD(&priv->slave.channels); 1158 priv->slave.device_free_chan_resources = sun4i_dma_free_chan_resources; 1159 priv->slave.device_tx_status = sun4i_dma_tx_status; 1160 priv->slave.device_issue_pending = sun4i_dma_issue_pending; 1161 priv->slave.device_prep_slave_sg = sun4i_dma_prep_slave_sg; 1162 priv->slave.device_prep_dma_memcpy = sun4i_dma_prep_dma_memcpy; 1163 priv->slave.device_prep_dma_cyclic = sun4i_dma_prep_dma_cyclic; 1164 priv->slave.device_config = sun4i_dma_config; 1165 priv->slave.device_terminate_all = sun4i_dma_terminate_all; 1166 priv->slave.copy_align = 2; 1167 priv->slave.src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | 1168 BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | 1169 BIT(DMA_SLAVE_BUSWIDTH_4_BYTES); 1170 priv->slave.dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | 1171 BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | 1172 BIT(DMA_SLAVE_BUSWIDTH_4_BYTES); 1173 priv->slave.directions = BIT(DMA_DEV_TO_MEM) | 1174 BIT(DMA_MEM_TO_DEV); 1175 priv->slave.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; 1176 1177 priv->slave.dev = &pdev->dev; 1178 1179 priv->pchans = devm_kcalloc(&pdev->dev, SUN4I_DMA_NR_MAX_CHANNELS, 1180 sizeof(struct sun4i_dma_pchan), GFP_KERNEL); 1181 priv->vchans = devm_kcalloc(&pdev->dev, SUN4I_DMA_NR_MAX_VCHANS, 1182 sizeof(struct sun4i_dma_vchan), GFP_KERNEL); 1183 if (!priv->vchans || !priv->pchans) 1184 return -ENOMEM; 1185 1186 /* 1187 * [0..SUN4I_NDMA_NR_MAX_CHANNELS) are normal pchans, and 1188 * [SUN4I_NDMA_NR_MAX_CHANNELS..SUN4I_DMA_NR_MAX_CHANNELS) are 1189 * dedicated ones 1190 */ 1191 for (i = 0; i < SUN4I_NDMA_NR_MAX_CHANNELS; i++) 1192 priv->pchans[i].base = priv->base + 1193 SUN4I_NDMA_CHANNEL_REG_BASE(i); 1194 1195 for (j = 0; i < SUN4I_DMA_NR_MAX_CHANNELS; i++, j++) { 1196 priv->pchans[i].base = priv->base + 1197 SUN4I_DDMA_CHANNEL_REG_BASE(j); 1198 priv->pchans[i].is_dedicated = 1; 1199 } 1200 1201 for (i = 0; i < SUN4I_DMA_NR_MAX_VCHANS; i++) { 1202 struct sun4i_dma_vchan *vchan = &priv->vchans[i]; 1203 1204 spin_lock_init(&vchan->vc.lock); 1205 vchan->vc.desc_free = sun4i_dma_free_contract; 1206 vchan_init(&vchan->vc, &priv->slave); 1207 } 1208 1209 ret = clk_prepare_enable(priv->clk); 1210 if (ret) { 1211 dev_err(&pdev->dev, "Couldn't enable the clock\n"); 1212 return ret; 1213 } 1214 1215 /* 1216 * Make sure the IRQs are all disabled and accounted for. The bootloader 1217 * likes to leave these dirty 1218 */ 1219 writel(0, priv->base + SUN4I_DMA_IRQ_ENABLE_REG); 1220 writel(0xFFFFFFFF, priv->base + SUN4I_DMA_IRQ_PENDING_STATUS_REG); 1221 1222 ret = devm_request_irq(&pdev->dev, priv->irq, sun4i_dma_interrupt, 1223 0, dev_name(&pdev->dev), priv); 1224 if (ret) { 1225 dev_err(&pdev->dev, "Cannot request IRQ\n"); 1226 goto err_clk_disable; 1227 } 1228 1229 ret = dma_async_device_register(&priv->slave); 1230 if (ret) { 1231 dev_warn(&pdev->dev, "Failed to register DMA engine device\n"); 1232 goto err_clk_disable; 1233 } 1234 1235 ret = of_dma_controller_register(pdev->dev.of_node, sun4i_dma_of_xlate, 1236 priv); 1237 if (ret) { 1238 dev_err(&pdev->dev, "of_dma_controller_register failed\n"); 1239 goto err_dma_unregister; 1240 } 1241 1242 dev_dbg(&pdev->dev, "Successfully probed SUN4I_DMA\n"); 1243 1244 return 0; 1245 1246 err_dma_unregister: 1247 dma_async_device_unregister(&priv->slave); 1248 err_clk_disable: 1249 clk_disable_unprepare(priv->clk); 1250 return ret; 1251 } 1252 1253 static int sun4i_dma_remove(struct platform_device *pdev) 1254 { 1255 struct sun4i_dma_dev *priv = platform_get_drvdata(pdev); 1256 1257 /* Disable IRQ so no more work is scheduled */ 1258 disable_irq(priv->irq); 1259 1260 of_dma_controller_free(pdev->dev.of_node); 1261 dma_async_device_unregister(&priv->slave); 1262 1263 clk_disable_unprepare(priv->clk); 1264 1265 return 0; 1266 } 1267 1268 static const struct of_device_id sun4i_dma_match[] = { 1269 { .compatible = "allwinner,sun4i-a10-dma" }, 1270 { /* sentinel */ }, 1271 }; 1272 MODULE_DEVICE_TABLE(of, sun4i_dma_match); 1273 1274 static struct platform_driver sun4i_dma_driver = { 1275 .probe = sun4i_dma_probe, 1276 .remove = sun4i_dma_remove, 1277 .driver = { 1278 .name = "sun4i-dma", 1279 .of_match_table = sun4i_dma_match, 1280 }, 1281 }; 1282 1283 module_platform_driver(sun4i_dma_driver); 1284 1285 MODULE_DESCRIPTION("Allwinner A10 Dedicated DMA Controller Driver"); 1286 MODULE_AUTHOR("Emilio López <emilio@elopez.com.ar>"); 1287 MODULE_LICENSE("GPL"); 1288