1 /* 2 * Driver for the Atmel AHB DMA Controller (aka HDMA or DMAC on AT91 systems) 3 * 4 * Copyright (C) 2008 Atmel Corporation 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * 12 * This supports the Atmel AHB DMA Controller, 13 * 14 * The driver has currently been tested with the Atmel AT91SAM9RL 15 * and AT91SAM9G45 series. 16 */ 17 18 #include <linux/clk.h> 19 #include <linux/dmaengine.h> 20 #include <linux/dma-mapping.h> 21 #include <linux/dmapool.h> 22 #include <linux/interrupt.h> 23 #include <linux/module.h> 24 #include <linux/platform_device.h> 25 #include <linux/slab.h> 26 27 #include "at_hdmac_regs.h" 28 29 /* 30 * Glossary 31 * -------- 32 * 33 * at_hdmac : Name of the ATmel AHB DMA Controller 34 * at_dma_ / atdma : ATmel DMA controller entity related 35 * atc_ / atchan : ATmel DMA Channel entity related 36 */ 37 38 #define ATC_DEFAULT_CFG (ATC_FIFOCFG_HALFFIFO) 39 #define ATC_DEFAULT_CTRLA (0) 40 #define ATC_DEFAULT_CTRLB (ATC_SIF(AT_DMA_MEM_IF) \ 41 |ATC_DIF(AT_DMA_MEM_IF)) 42 43 /* 44 * Initial number of descriptors to allocate for each channel. This could 45 * be increased during dma usage. 46 */ 47 static unsigned int init_nr_desc_per_channel = 64; 48 module_param(init_nr_desc_per_channel, uint, 0644); 49 MODULE_PARM_DESC(init_nr_desc_per_channel, 50 "initial descriptors per channel (default: 64)"); 51 52 53 /* prototypes */ 54 static dma_cookie_t atc_tx_submit(struct dma_async_tx_descriptor *tx); 55 56 57 /*----------------------------------------------------------------------*/ 58 59 static struct at_desc *atc_first_active(struct at_dma_chan *atchan) 60 { 61 return list_first_entry(&atchan->active_list, 62 struct at_desc, desc_node); 63 } 64 65 static struct at_desc *atc_first_queued(struct at_dma_chan *atchan) 66 { 67 return list_first_entry(&atchan->queue, 68 struct at_desc, desc_node); 69 } 70 71 /** 72 * atc_alloc_descriptor - allocate and return an initialized descriptor 73 * @chan: the channel to allocate descriptors for 74 * @gfp_flags: GFP allocation flags 75 * 76 * Note: The ack-bit is positioned in the descriptor flag at creation time 77 * to make initial allocation more convenient. This bit will be cleared 78 * and control will be given to client at usage time (during 79 * preparation functions). 80 */ 81 static struct at_desc *atc_alloc_descriptor(struct dma_chan *chan, 82 gfp_t gfp_flags) 83 { 84 struct at_desc *desc = NULL; 85 struct at_dma *atdma = to_at_dma(chan->device); 86 dma_addr_t phys; 87 88 desc = dma_pool_alloc(atdma->dma_desc_pool, gfp_flags, &phys); 89 if (desc) { 90 memset(desc, 0, sizeof(struct at_desc)); 91 INIT_LIST_HEAD(&desc->tx_list); 92 dma_async_tx_descriptor_init(&desc->txd, chan); 93 /* txd.flags will be overwritten in prep functions */ 94 desc->txd.flags = DMA_CTRL_ACK; 95 desc->txd.tx_submit = atc_tx_submit; 96 desc->txd.phys = phys; 97 } 98 99 return desc; 100 } 101 102 /** 103 * atc_desc_get - get an unused descriptor from free_list 104 * @atchan: channel we want a new descriptor for 105 */ 106 static struct at_desc *atc_desc_get(struct at_dma_chan *atchan) 107 { 108 struct at_desc *desc, *_desc; 109 struct at_desc *ret = NULL; 110 unsigned int i = 0; 111 LIST_HEAD(tmp_list); 112 113 spin_lock_bh(&atchan->lock); 114 list_for_each_entry_safe(desc, _desc, &atchan->free_list, desc_node) { 115 i++; 116 if (async_tx_test_ack(&desc->txd)) { 117 list_del(&desc->desc_node); 118 ret = desc; 119 break; 120 } 121 dev_dbg(chan2dev(&atchan->chan_common), 122 "desc %p not ACKed\n", desc); 123 } 124 spin_unlock_bh(&atchan->lock); 125 dev_vdbg(chan2dev(&atchan->chan_common), 126 "scanned %u descriptors on freelist\n", i); 127 128 /* no more descriptor available in initial pool: create one more */ 129 if (!ret) { 130 ret = atc_alloc_descriptor(&atchan->chan_common, GFP_ATOMIC); 131 if (ret) { 132 spin_lock_bh(&atchan->lock); 133 atchan->descs_allocated++; 134 spin_unlock_bh(&atchan->lock); 135 } else { 136 dev_err(chan2dev(&atchan->chan_common), 137 "not enough descriptors available\n"); 138 } 139 } 140 141 return ret; 142 } 143 144 /** 145 * atc_desc_put - move a descriptor, including any children, to the free list 146 * @atchan: channel we work on 147 * @desc: descriptor, at the head of a chain, to move to free list 148 */ 149 static void atc_desc_put(struct at_dma_chan *atchan, struct at_desc *desc) 150 { 151 if (desc) { 152 struct at_desc *child; 153 154 spin_lock_bh(&atchan->lock); 155 list_for_each_entry(child, &desc->tx_list, desc_node) 156 dev_vdbg(chan2dev(&atchan->chan_common), 157 "moving child desc %p to freelist\n", 158 child); 159 list_splice_init(&desc->tx_list, &atchan->free_list); 160 dev_vdbg(chan2dev(&atchan->chan_common), 161 "moving desc %p to freelist\n", desc); 162 list_add(&desc->desc_node, &atchan->free_list); 163 spin_unlock_bh(&atchan->lock); 164 } 165 } 166 167 /** 168 * atc_desc_chain - build chain adding a descripor 169 * @first: address of first descripor of the chain 170 * @prev: address of previous descripor of the chain 171 * @desc: descriptor to queue 172 * 173 * Called from prep_* functions 174 */ 175 static void atc_desc_chain(struct at_desc **first, struct at_desc **prev, 176 struct at_desc *desc) 177 { 178 if (!(*first)) { 179 *first = desc; 180 } else { 181 /* inform the HW lli about chaining */ 182 (*prev)->lli.dscr = desc->txd.phys; 183 /* insert the link descriptor to the LD ring */ 184 list_add_tail(&desc->desc_node, 185 &(*first)->tx_list); 186 } 187 *prev = desc; 188 } 189 190 /** 191 * atc_assign_cookie - compute and assign new cookie 192 * @atchan: channel we work on 193 * @desc: descriptor to assign cookie for 194 * 195 * Called with atchan->lock held and bh disabled 196 */ 197 static dma_cookie_t 198 atc_assign_cookie(struct at_dma_chan *atchan, struct at_desc *desc) 199 { 200 dma_cookie_t cookie = atchan->chan_common.cookie; 201 202 if (++cookie < 0) 203 cookie = 1; 204 205 atchan->chan_common.cookie = cookie; 206 desc->txd.cookie = cookie; 207 208 return cookie; 209 } 210 211 /** 212 * atc_dostart - starts the DMA engine for real 213 * @atchan: the channel we want to start 214 * @first: first descriptor in the list we want to begin with 215 * 216 * Called with atchan->lock held and bh disabled 217 */ 218 static void atc_dostart(struct at_dma_chan *atchan, struct at_desc *first) 219 { 220 struct at_dma *atdma = to_at_dma(atchan->chan_common.device); 221 222 /* ASSERT: channel is idle */ 223 if (atc_chan_is_enabled(atchan)) { 224 dev_err(chan2dev(&atchan->chan_common), 225 "BUG: Attempted to start non-idle channel\n"); 226 dev_err(chan2dev(&atchan->chan_common), 227 " channel: s0x%x d0x%x ctrl0x%x:0x%x l0x%x\n", 228 channel_readl(atchan, SADDR), 229 channel_readl(atchan, DADDR), 230 channel_readl(atchan, CTRLA), 231 channel_readl(atchan, CTRLB), 232 channel_readl(atchan, DSCR)); 233 234 /* The tasklet will hopefully advance the queue... */ 235 return; 236 } 237 238 vdbg_dump_regs(atchan); 239 240 /* clear any pending interrupt */ 241 while (dma_readl(atdma, EBCISR)) 242 cpu_relax(); 243 244 channel_writel(atchan, SADDR, 0); 245 channel_writel(atchan, DADDR, 0); 246 channel_writel(atchan, CTRLA, 0); 247 channel_writel(atchan, CTRLB, 0); 248 channel_writel(atchan, DSCR, first->txd.phys); 249 dma_writel(atdma, CHER, atchan->mask); 250 251 vdbg_dump_regs(atchan); 252 } 253 254 /** 255 * atc_chain_complete - finish work for one transaction chain 256 * @atchan: channel we work on 257 * @desc: descriptor at the head of the chain we want do complete 258 * 259 * Called with atchan->lock held and bh disabled */ 260 static void 261 atc_chain_complete(struct at_dma_chan *atchan, struct at_desc *desc) 262 { 263 struct dma_async_tx_descriptor *txd = &desc->txd; 264 265 dev_vdbg(chan2dev(&atchan->chan_common), 266 "descriptor %u complete\n", txd->cookie); 267 268 atchan->completed_cookie = txd->cookie; 269 270 /* move children to free_list */ 271 list_splice_init(&desc->tx_list, &atchan->free_list); 272 /* move myself to free_list */ 273 list_move(&desc->desc_node, &atchan->free_list); 274 275 /* unmap dma addresses (not on slave channels) */ 276 if (!atchan->chan_common.private) { 277 struct device *parent = chan2parent(&atchan->chan_common); 278 if (!(txd->flags & DMA_COMPL_SKIP_DEST_UNMAP)) { 279 if (txd->flags & DMA_COMPL_DEST_UNMAP_SINGLE) 280 dma_unmap_single(parent, 281 desc->lli.daddr, 282 desc->len, DMA_FROM_DEVICE); 283 else 284 dma_unmap_page(parent, 285 desc->lli.daddr, 286 desc->len, DMA_FROM_DEVICE); 287 } 288 if (!(txd->flags & DMA_COMPL_SKIP_SRC_UNMAP)) { 289 if (txd->flags & DMA_COMPL_SRC_UNMAP_SINGLE) 290 dma_unmap_single(parent, 291 desc->lli.saddr, 292 desc->len, DMA_TO_DEVICE); 293 else 294 dma_unmap_page(parent, 295 desc->lli.saddr, 296 desc->len, DMA_TO_DEVICE); 297 } 298 } 299 300 /* for cyclic transfers, 301 * no need to replay callback function while stopping */ 302 if (!test_bit(ATC_IS_CYCLIC, &atchan->status)) { 303 dma_async_tx_callback callback = txd->callback; 304 void *param = txd->callback_param; 305 306 /* 307 * The API requires that no submissions are done from a 308 * callback, so we don't need to drop the lock here 309 */ 310 if (callback) 311 callback(param); 312 } 313 314 dma_run_dependencies(txd); 315 } 316 317 /** 318 * atc_complete_all - finish work for all transactions 319 * @atchan: channel to complete transactions for 320 * 321 * Eventually submit queued descriptors if any 322 * 323 * Assume channel is idle while calling this function 324 * Called with atchan->lock held and bh disabled 325 */ 326 static void atc_complete_all(struct at_dma_chan *atchan) 327 { 328 struct at_desc *desc, *_desc; 329 LIST_HEAD(list); 330 331 dev_vdbg(chan2dev(&atchan->chan_common), "complete all\n"); 332 333 BUG_ON(atc_chan_is_enabled(atchan)); 334 335 /* 336 * Submit queued descriptors ASAP, i.e. before we go through 337 * the completed ones. 338 */ 339 if (!list_empty(&atchan->queue)) 340 atc_dostart(atchan, atc_first_queued(atchan)); 341 /* empty active_list now it is completed */ 342 list_splice_init(&atchan->active_list, &list); 343 /* empty queue list by moving descriptors (if any) to active_list */ 344 list_splice_init(&atchan->queue, &atchan->active_list); 345 346 list_for_each_entry_safe(desc, _desc, &list, desc_node) 347 atc_chain_complete(atchan, desc); 348 } 349 350 /** 351 * atc_cleanup_descriptors - cleanup up finished descriptors in active_list 352 * @atchan: channel to be cleaned up 353 * 354 * Called with atchan->lock held and bh disabled 355 */ 356 static void atc_cleanup_descriptors(struct at_dma_chan *atchan) 357 { 358 struct at_desc *desc, *_desc; 359 struct at_desc *child; 360 361 dev_vdbg(chan2dev(&atchan->chan_common), "cleanup descriptors\n"); 362 363 list_for_each_entry_safe(desc, _desc, &atchan->active_list, desc_node) { 364 if (!(desc->lli.ctrla & ATC_DONE)) 365 /* This one is currently in progress */ 366 return; 367 368 list_for_each_entry(child, &desc->tx_list, desc_node) 369 if (!(child->lli.ctrla & ATC_DONE)) 370 /* Currently in progress */ 371 return; 372 373 /* 374 * No descriptors so far seem to be in progress, i.e. 375 * this chain must be done. 376 */ 377 atc_chain_complete(atchan, desc); 378 } 379 } 380 381 /** 382 * atc_advance_work - at the end of a transaction, move forward 383 * @atchan: channel where the transaction ended 384 * 385 * Called with atchan->lock held and bh disabled 386 */ 387 static void atc_advance_work(struct at_dma_chan *atchan) 388 { 389 dev_vdbg(chan2dev(&atchan->chan_common), "advance_work\n"); 390 391 if (list_empty(&atchan->active_list) || 392 list_is_singular(&atchan->active_list)) { 393 atc_complete_all(atchan); 394 } else { 395 atc_chain_complete(atchan, atc_first_active(atchan)); 396 /* advance work */ 397 atc_dostart(atchan, atc_first_active(atchan)); 398 } 399 } 400 401 402 /** 403 * atc_handle_error - handle errors reported by DMA controller 404 * @atchan: channel where error occurs 405 * 406 * Called with atchan->lock held and bh disabled 407 */ 408 static void atc_handle_error(struct at_dma_chan *atchan) 409 { 410 struct at_desc *bad_desc; 411 struct at_desc *child; 412 413 /* 414 * The descriptor currently at the head of the active list is 415 * broked. Since we don't have any way to report errors, we'll 416 * just have to scream loudly and try to carry on. 417 */ 418 bad_desc = atc_first_active(atchan); 419 list_del_init(&bad_desc->desc_node); 420 421 /* As we are stopped, take advantage to push queued descriptors 422 * in active_list */ 423 list_splice_init(&atchan->queue, atchan->active_list.prev); 424 425 /* Try to restart the controller */ 426 if (!list_empty(&atchan->active_list)) 427 atc_dostart(atchan, atc_first_active(atchan)); 428 429 /* 430 * KERN_CRITICAL may seem harsh, but since this only happens 431 * when someone submits a bad physical address in a 432 * descriptor, we should consider ourselves lucky that the 433 * controller flagged an error instead of scribbling over 434 * random memory locations. 435 */ 436 dev_crit(chan2dev(&atchan->chan_common), 437 "Bad descriptor submitted for DMA!\n"); 438 dev_crit(chan2dev(&atchan->chan_common), 439 " cookie: %d\n", bad_desc->txd.cookie); 440 atc_dump_lli(atchan, &bad_desc->lli); 441 list_for_each_entry(child, &bad_desc->tx_list, desc_node) 442 atc_dump_lli(atchan, &child->lli); 443 444 /* Pretend the descriptor completed successfully */ 445 atc_chain_complete(atchan, bad_desc); 446 } 447 448 /** 449 * atc_handle_cyclic - at the end of a period, run callback function 450 * @atchan: channel used for cyclic operations 451 * 452 * Called with atchan->lock held and bh disabled 453 */ 454 static void atc_handle_cyclic(struct at_dma_chan *atchan) 455 { 456 struct at_desc *first = atc_first_active(atchan); 457 struct dma_async_tx_descriptor *txd = &first->txd; 458 dma_async_tx_callback callback = txd->callback; 459 void *param = txd->callback_param; 460 461 dev_vdbg(chan2dev(&atchan->chan_common), 462 "new cyclic period llp 0x%08x\n", 463 channel_readl(atchan, DSCR)); 464 465 if (callback) 466 callback(param); 467 } 468 469 /*-- IRQ & Tasklet ---------------------------------------------------*/ 470 471 static void atc_tasklet(unsigned long data) 472 { 473 struct at_dma_chan *atchan = (struct at_dma_chan *)data; 474 475 spin_lock(&atchan->lock); 476 if (test_and_clear_bit(ATC_IS_ERROR, &atchan->status)) 477 atc_handle_error(atchan); 478 else if (test_bit(ATC_IS_CYCLIC, &atchan->status)) 479 atc_handle_cyclic(atchan); 480 else 481 atc_advance_work(atchan); 482 483 spin_unlock(&atchan->lock); 484 } 485 486 static irqreturn_t at_dma_interrupt(int irq, void *dev_id) 487 { 488 struct at_dma *atdma = (struct at_dma *)dev_id; 489 struct at_dma_chan *atchan; 490 int i; 491 u32 status, pending, imr; 492 int ret = IRQ_NONE; 493 494 do { 495 imr = dma_readl(atdma, EBCIMR); 496 status = dma_readl(atdma, EBCISR); 497 pending = status & imr; 498 499 if (!pending) 500 break; 501 502 dev_vdbg(atdma->dma_common.dev, 503 "interrupt: status = 0x%08x, 0x%08x, 0x%08x\n", 504 status, imr, pending); 505 506 for (i = 0; i < atdma->dma_common.chancnt; i++) { 507 atchan = &atdma->chan[i]; 508 if (pending & (AT_DMA_BTC(i) | AT_DMA_ERR(i))) { 509 if (pending & AT_DMA_ERR(i)) { 510 /* Disable channel on AHB error */ 511 dma_writel(atdma, CHDR, 512 AT_DMA_RES(i) | atchan->mask); 513 /* Give information to tasklet */ 514 set_bit(ATC_IS_ERROR, &atchan->status); 515 } 516 tasklet_schedule(&atchan->tasklet); 517 ret = IRQ_HANDLED; 518 } 519 } 520 521 } while (pending); 522 523 return ret; 524 } 525 526 527 /*-- DMA Engine API --------------------------------------------------*/ 528 529 /** 530 * atc_tx_submit - set the prepared descriptor(s) to be executed by the engine 531 * @desc: descriptor at the head of the transaction chain 532 * 533 * Queue chain if DMA engine is working already 534 * 535 * Cookie increment and adding to active_list or queue must be atomic 536 */ 537 static dma_cookie_t atc_tx_submit(struct dma_async_tx_descriptor *tx) 538 { 539 struct at_desc *desc = txd_to_at_desc(tx); 540 struct at_dma_chan *atchan = to_at_dma_chan(tx->chan); 541 dma_cookie_t cookie; 542 543 spin_lock_bh(&atchan->lock); 544 cookie = atc_assign_cookie(atchan, desc); 545 546 if (list_empty(&atchan->active_list)) { 547 dev_vdbg(chan2dev(tx->chan), "tx_submit: started %u\n", 548 desc->txd.cookie); 549 atc_dostart(atchan, desc); 550 list_add_tail(&desc->desc_node, &atchan->active_list); 551 } else { 552 dev_vdbg(chan2dev(tx->chan), "tx_submit: queued %u\n", 553 desc->txd.cookie); 554 list_add_tail(&desc->desc_node, &atchan->queue); 555 } 556 557 spin_unlock_bh(&atchan->lock); 558 559 return cookie; 560 } 561 562 /** 563 * atc_prep_dma_memcpy - prepare a memcpy operation 564 * @chan: the channel to prepare operation on 565 * @dest: operation virtual destination address 566 * @src: operation virtual source address 567 * @len: operation length 568 * @flags: tx descriptor status flags 569 */ 570 static struct dma_async_tx_descriptor * 571 atc_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, 572 size_t len, unsigned long flags) 573 { 574 struct at_dma_chan *atchan = to_at_dma_chan(chan); 575 struct at_desc *desc = NULL; 576 struct at_desc *first = NULL; 577 struct at_desc *prev = NULL; 578 size_t xfer_count; 579 size_t offset; 580 unsigned int src_width; 581 unsigned int dst_width; 582 u32 ctrla; 583 u32 ctrlb; 584 585 dev_vdbg(chan2dev(chan), "prep_dma_memcpy: d0x%x s0x%x l0x%zx f0x%lx\n", 586 dest, src, len, flags); 587 588 if (unlikely(!len)) { 589 dev_dbg(chan2dev(chan), "prep_dma_memcpy: length is zero!\n"); 590 return NULL; 591 } 592 593 ctrla = ATC_DEFAULT_CTRLA; 594 ctrlb = ATC_DEFAULT_CTRLB | ATC_IEN 595 | ATC_SRC_ADDR_MODE_INCR 596 | ATC_DST_ADDR_MODE_INCR 597 | ATC_FC_MEM2MEM; 598 599 /* 600 * We can be a lot more clever here, but this should take care 601 * of the most common optimization. 602 */ 603 if (!((src | dest | len) & 3)) { 604 ctrla |= ATC_SRC_WIDTH_WORD | ATC_DST_WIDTH_WORD; 605 src_width = dst_width = 2; 606 } else if (!((src | dest | len) & 1)) { 607 ctrla |= ATC_SRC_WIDTH_HALFWORD | ATC_DST_WIDTH_HALFWORD; 608 src_width = dst_width = 1; 609 } else { 610 ctrla |= ATC_SRC_WIDTH_BYTE | ATC_DST_WIDTH_BYTE; 611 src_width = dst_width = 0; 612 } 613 614 for (offset = 0; offset < len; offset += xfer_count << src_width) { 615 xfer_count = min_t(size_t, (len - offset) >> src_width, 616 ATC_BTSIZE_MAX); 617 618 desc = atc_desc_get(atchan); 619 if (!desc) 620 goto err_desc_get; 621 622 desc->lli.saddr = src + offset; 623 desc->lli.daddr = dest + offset; 624 desc->lli.ctrla = ctrla | xfer_count; 625 desc->lli.ctrlb = ctrlb; 626 627 desc->txd.cookie = 0; 628 629 atc_desc_chain(&first, &prev, desc); 630 } 631 632 /* First descriptor of the chain embedds additional information */ 633 first->txd.cookie = -EBUSY; 634 first->len = len; 635 636 /* set end-of-link to the last link descriptor of list*/ 637 set_desc_eol(desc); 638 639 first->txd.flags = flags; /* client is in control of this ack */ 640 641 return &first->txd; 642 643 err_desc_get: 644 atc_desc_put(atchan, first); 645 return NULL; 646 } 647 648 649 /** 650 * atc_prep_slave_sg - prepare descriptors for a DMA_SLAVE transaction 651 * @chan: DMA channel 652 * @sgl: scatterlist to transfer to/from 653 * @sg_len: number of entries in @scatterlist 654 * @direction: DMA direction 655 * @flags: tx descriptor status flags 656 */ 657 static struct dma_async_tx_descriptor * 658 atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, 659 unsigned int sg_len, enum dma_data_direction direction, 660 unsigned long flags) 661 { 662 struct at_dma_chan *atchan = to_at_dma_chan(chan); 663 struct at_dma_slave *atslave = chan->private; 664 struct at_desc *first = NULL; 665 struct at_desc *prev = NULL; 666 u32 ctrla; 667 u32 ctrlb; 668 dma_addr_t reg; 669 unsigned int reg_width; 670 unsigned int mem_width; 671 unsigned int i; 672 struct scatterlist *sg; 673 size_t total_len = 0; 674 675 dev_vdbg(chan2dev(chan), "prep_slave_sg (%d): %s f0x%lx\n", 676 sg_len, 677 direction == DMA_TO_DEVICE ? "TO DEVICE" : "FROM DEVICE", 678 flags); 679 680 if (unlikely(!atslave || !sg_len)) { 681 dev_dbg(chan2dev(chan), "prep_dma_memcpy: length is zero!\n"); 682 return NULL; 683 } 684 685 reg_width = atslave->reg_width; 686 687 ctrla = ATC_DEFAULT_CTRLA | atslave->ctrla; 688 ctrlb = ATC_IEN; 689 690 switch (direction) { 691 case DMA_TO_DEVICE: 692 ctrla |= ATC_DST_WIDTH(reg_width); 693 ctrlb |= ATC_DST_ADDR_MODE_FIXED 694 | ATC_SRC_ADDR_MODE_INCR 695 | ATC_FC_MEM2PER 696 | ATC_SIF(AT_DMA_MEM_IF) | ATC_DIF(AT_DMA_PER_IF); 697 reg = atslave->tx_reg; 698 for_each_sg(sgl, sg, sg_len, i) { 699 struct at_desc *desc; 700 u32 len; 701 u32 mem; 702 703 desc = atc_desc_get(atchan); 704 if (!desc) 705 goto err_desc_get; 706 707 mem = sg_dma_address(sg); 708 len = sg_dma_len(sg); 709 mem_width = 2; 710 if (unlikely(mem & 3 || len & 3)) 711 mem_width = 0; 712 713 desc->lli.saddr = mem; 714 desc->lli.daddr = reg; 715 desc->lli.ctrla = ctrla 716 | ATC_SRC_WIDTH(mem_width) 717 | len >> mem_width; 718 desc->lli.ctrlb = ctrlb; 719 720 atc_desc_chain(&first, &prev, desc); 721 total_len += len; 722 } 723 break; 724 case DMA_FROM_DEVICE: 725 ctrla |= ATC_SRC_WIDTH(reg_width); 726 ctrlb |= ATC_DST_ADDR_MODE_INCR 727 | ATC_SRC_ADDR_MODE_FIXED 728 | ATC_FC_PER2MEM 729 | ATC_SIF(AT_DMA_PER_IF) | ATC_DIF(AT_DMA_MEM_IF); 730 731 reg = atslave->rx_reg; 732 for_each_sg(sgl, sg, sg_len, i) { 733 struct at_desc *desc; 734 u32 len; 735 u32 mem; 736 737 desc = atc_desc_get(atchan); 738 if (!desc) 739 goto err_desc_get; 740 741 mem = sg_dma_address(sg); 742 len = sg_dma_len(sg); 743 mem_width = 2; 744 if (unlikely(mem & 3 || len & 3)) 745 mem_width = 0; 746 747 desc->lli.saddr = reg; 748 desc->lli.daddr = mem; 749 desc->lli.ctrla = ctrla 750 | ATC_DST_WIDTH(mem_width) 751 | len >> reg_width; 752 desc->lli.ctrlb = ctrlb; 753 754 atc_desc_chain(&first, &prev, desc); 755 total_len += len; 756 } 757 break; 758 default: 759 return NULL; 760 } 761 762 /* set end-of-link to the last link descriptor of list*/ 763 set_desc_eol(prev); 764 765 /* First descriptor of the chain embedds additional information */ 766 first->txd.cookie = -EBUSY; 767 first->len = total_len; 768 769 /* first link descriptor of list is responsible of flags */ 770 first->txd.flags = flags; /* client is in control of this ack */ 771 772 return &first->txd; 773 774 err_desc_get: 775 dev_err(chan2dev(chan), "not enough descriptors available\n"); 776 atc_desc_put(atchan, first); 777 return NULL; 778 } 779 780 /** 781 * atc_dma_cyclic_check_values 782 * Check for too big/unaligned periods and unaligned DMA buffer 783 */ 784 static int 785 atc_dma_cyclic_check_values(unsigned int reg_width, dma_addr_t buf_addr, 786 size_t period_len, enum dma_data_direction direction) 787 { 788 if (period_len > (ATC_BTSIZE_MAX << reg_width)) 789 goto err_out; 790 if (unlikely(period_len & ((1 << reg_width) - 1))) 791 goto err_out; 792 if (unlikely(buf_addr & ((1 << reg_width) - 1))) 793 goto err_out; 794 if (unlikely(!(direction & (DMA_TO_DEVICE | DMA_FROM_DEVICE)))) 795 goto err_out; 796 797 return 0; 798 799 err_out: 800 return -EINVAL; 801 } 802 803 /** 804 * atc_dma_cyclic_fill_desc - Fill one period decriptor 805 */ 806 static int 807 atc_dma_cyclic_fill_desc(struct at_dma_slave *atslave, struct at_desc *desc, 808 unsigned int period_index, dma_addr_t buf_addr, 809 size_t period_len, enum dma_data_direction direction) 810 { 811 u32 ctrla; 812 unsigned int reg_width = atslave->reg_width; 813 814 /* prepare common CRTLA value */ 815 ctrla = ATC_DEFAULT_CTRLA | atslave->ctrla 816 | ATC_DST_WIDTH(reg_width) 817 | ATC_SRC_WIDTH(reg_width) 818 | period_len >> reg_width; 819 820 switch (direction) { 821 case DMA_TO_DEVICE: 822 desc->lli.saddr = buf_addr + (period_len * period_index); 823 desc->lli.daddr = atslave->tx_reg; 824 desc->lli.ctrla = ctrla; 825 desc->lli.ctrlb = ATC_DST_ADDR_MODE_FIXED 826 | ATC_SRC_ADDR_MODE_INCR 827 | ATC_FC_MEM2PER 828 | ATC_SIF(AT_DMA_MEM_IF) 829 | ATC_DIF(AT_DMA_PER_IF); 830 break; 831 832 case DMA_FROM_DEVICE: 833 desc->lli.saddr = atslave->rx_reg; 834 desc->lli.daddr = buf_addr + (period_len * period_index); 835 desc->lli.ctrla = ctrla; 836 desc->lli.ctrlb = ATC_DST_ADDR_MODE_INCR 837 | ATC_SRC_ADDR_MODE_FIXED 838 | ATC_FC_PER2MEM 839 | ATC_SIF(AT_DMA_PER_IF) 840 | ATC_DIF(AT_DMA_MEM_IF); 841 break; 842 843 default: 844 return -EINVAL; 845 } 846 847 return 0; 848 } 849 850 /** 851 * atc_prep_dma_cyclic - prepare the cyclic DMA transfer 852 * @chan: the DMA channel to prepare 853 * @buf_addr: physical DMA address where the buffer starts 854 * @buf_len: total number of bytes for the entire buffer 855 * @period_len: number of bytes for each period 856 * @direction: transfer direction, to or from device 857 */ 858 static struct dma_async_tx_descriptor * 859 atc_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len, 860 size_t period_len, enum dma_data_direction direction) 861 { 862 struct at_dma_chan *atchan = to_at_dma_chan(chan); 863 struct at_dma_slave *atslave = chan->private; 864 struct at_desc *first = NULL; 865 struct at_desc *prev = NULL; 866 unsigned long was_cyclic; 867 unsigned int periods = buf_len / period_len; 868 unsigned int i; 869 870 dev_vdbg(chan2dev(chan), "prep_dma_cyclic: %s buf@0x%08x - %d (%d/%d)\n", 871 direction == DMA_TO_DEVICE ? "TO DEVICE" : "FROM DEVICE", 872 buf_addr, 873 periods, buf_len, period_len); 874 875 if (unlikely(!atslave || !buf_len || !period_len)) { 876 dev_dbg(chan2dev(chan), "prep_dma_cyclic: length is zero!\n"); 877 return NULL; 878 } 879 880 was_cyclic = test_and_set_bit(ATC_IS_CYCLIC, &atchan->status); 881 if (was_cyclic) { 882 dev_dbg(chan2dev(chan), "prep_dma_cyclic: channel in use!\n"); 883 return NULL; 884 } 885 886 /* Check for too big/unaligned periods and unaligned DMA buffer */ 887 if (atc_dma_cyclic_check_values(atslave->reg_width, buf_addr, 888 period_len, direction)) 889 goto err_out; 890 891 /* build cyclic linked list */ 892 for (i = 0; i < periods; i++) { 893 struct at_desc *desc; 894 895 desc = atc_desc_get(atchan); 896 if (!desc) 897 goto err_desc_get; 898 899 if (atc_dma_cyclic_fill_desc(atslave, desc, i, buf_addr, 900 period_len, direction)) 901 goto err_desc_get; 902 903 atc_desc_chain(&first, &prev, desc); 904 } 905 906 /* lets make a cyclic list */ 907 prev->lli.dscr = first->txd.phys; 908 909 /* First descriptor of the chain embedds additional information */ 910 first->txd.cookie = -EBUSY; 911 first->len = buf_len; 912 913 return &first->txd; 914 915 err_desc_get: 916 dev_err(chan2dev(chan), "not enough descriptors available\n"); 917 atc_desc_put(atchan, first); 918 err_out: 919 clear_bit(ATC_IS_CYCLIC, &atchan->status); 920 return NULL; 921 } 922 923 924 static int atc_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, 925 unsigned long arg) 926 { 927 struct at_dma_chan *atchan = to_at_dma_chan(chan); 928 struct at_dma *atdma = to_at_dma(chan->device); 929 int chan_id = atchan->chan_common.chan_id; 930 931 LIST_HEAD(list); 932 933 dev_vdbg(chan2dev(chan), "atc_control (%d)\n", cmd); 934 935 if (cmd == DMA_PAUSE) { 936 spin_lock_bh(&atchan->lock); 937 938 dma_writel(atdma, CHER, AT_DMA_SUSP(chan_id)); 939 set_bit(ATC_IS_PAUSED, &atchan->status); 940 941 spin_unlock_bh(&atchan->lock); 942 } else if (cmd == DMA_RESUME) { 943 if (!test_bit(ATC_IS_PAUSED, &atchan->status)) 944 return 0; 945 946 spin_lock_bh(&atchan->lock); 947 948 dma_writel(atdma, CHDR, AT_DMA_RES(chan_id)); 949 clear_bit(ATC_IS_PAUSED, &atchan->status); 950 951 spin_unlock_bh(&atchan->lock); 952 } else if (cmd == DMA_TERMINATE_ALL) { 953 struct at_desc *desc, *_desc; 954 /* 955 * This is only called when something went wrong elsewhere, so 956 * we don't really care about the data. Just disable the 957 * channel. We still have to poll the channel enable bit due 958 * to AHB/HSB limitations. 959 */ 960 spin_lock_bh(&atchan->lock); 961 962 /* disabling channel: must also remove suspend state */ 963 dma_writel(atdma, CHDR, AT_DMA_RES(chan_id) | atchan->mask); 964 965 /* confirm that this channel is disabled */ 966 while (dma_readl(atdma, CHSR) & atchan->mask) 967 cpu_relax(); 968 969 /* active_list entries will end up before queued entries */ 970 list_splice_init(&atchan->queue, &list); 971 list_splice_init(&atchan->active_list, &list); 972 973 /* Flush all pending and queued descriptors */ 974 list_for_each_entry_safe(desc, _desc, &list, desc_node) 975 atc_chain_complete(atchan, desc); 976 977 clear_bit(ATC_IS_PAUSED, &atchan->status); 978 /* if channel dedicated to cyclic operations, free it */ 979 clear_bit(ATC_IS_CYCLIC, &atchan->status); 980 981 spin_unlock_bh(&atchan->lock); 982 } else { 983 return -ENXIO; 984 } 985 986 return 0; 987 } 988 989 /** 990 * atc_tx_status - poll for transaction completion 991 * @chan: DMA channel 992 * @cookie: transaction identifier to check status of 993 * @txstate: if not %NULL updated with transaction state 994 * 995 * If @txstate is passed in, upon return it reflect the driver 996 * internal state and can be used with dma_async_is_complete() to check 997 * the status of multiple cookies without re-checking hardware state. 998 */ 999 static enum dma_status 1000 atc_tx_status(struct dma_chan *chan, 1001 dma_cookie_t cookie, 1002 struct dma_tx_state *txstate) 1003 { 1004 struct at_dma_chan *atchan = to_at_dma_chan(chan); 1005 dma_cookie_t last_used; 1006 dma_cookie_t last_complete; 1007 enum dma_status ret; 1008 1009 spin_lock_bh(&atchan->lock); 1010 1011 last_complete = atchan->completed_cookie; 1012 last_used = chan->cookie; 1013 1014 ret = dma_async_is_complete(cookie, last_complete, last_used); 1015 if (ret != DMA_SUCCESS) { 1016 atc_cleanup_descriptors(atchan); 1017 1018 last_complete = atchan->completed_cookie; 1019 last_used = chan->cookie; 1020 1021 ret = dma_async_is_complete(cookie, last_complete, last_used); 1022 } 1023 1024 spin_unlock_bh(&atchan->lock); 1025 1026 if (ret != DMA_SUCCESS) 1027 dma_set_tx_state(txstate, last_complete, last_used, 1028 atc_first_active(atchan)->len); 1029 else 1030 dma_set_tx_state(txstate, last_complete, last_used, 0); 1031 1032 if (test_bit(ATC_IS_PAUSED, &atchan->status)) 1033 ret = DMA_PAUSED; 1034 1035 dev_vdbg(chan2dev(chan), "tx_status %d: cookie = %d (d%d, u%d)\n", 1036 ret, cookie, last_complete ? last_complete : 0, 1037 last_used ? last_used : 0); 1038 1039 return ret; 1040 } 1041 1042 /** 1043 * atc_issue_pending - try to finish work 1044 * @chan: target DMA channel 1045 */ 1046 static void atc_issue_pending(struct dma_chan *chan) 1047 { 1048 struct at_dma_chan *atchan = to_at_dma_chan(chan); 1049 1050 dev_vdbg(chan2dev(chan), "issue_pending\n"); 1051 1052 /* Not needed for cyclic transfers */ 1053 if (test_bit(ATC_IS_CYCLIC, &atchan->status)) 1054 return; 1055 1056 spin_lock_bh(&atchan->lock); 1057 if (!atc_chan_is_enabled(atchan)) { 1058 atc_advance_work(atchan); 1059 } 1060 spin_unlock_bh(&atchan->lock); 1061 } 1062 1063 /** 1064 * atc_alloc_chan_resources - allocate resources for DMA channel 1065 * @chan: allocate descriptor resources for this channel 1066 * @client: current client requesting the channel be ready for requests 1067 * 1068 * return - the number of allocated descriptors 1069 */ 1070 static int atc_alloc_chan_resources(struct dma_chan *chan) 1071 { 1072 struct at_dma_chan *atchan = to_at_dma_chan(chan); 1073 struct at_dma *atdma = to_at_dma(chan->device); 1074 struct at_desc *desc; 1075 struct at_dma_slave *atslave; 1076 int i; 1077 u32 cfg; 1078 LIST_HEAD(tmp_list); 1079 1080 dev_vdbg(chan2dev(chan), "alloc_chan_resources\n"); 1081 1082 /* ASSERT: channel is idle */ 1083 if (atc_chan_is_enabled(atchan)) { 1084 dev_dbg(chan2dev(chan), "DMA channel not idle ?\n"); 1085 return -EIO; 1086 } 1087 1088 cfg = ATC_DEFAULT_CFG; 1089 1090 atslave = chan->private; 1091 if (atslave) { 1092 /* 1093 * We need controller-specific data to set up slave 1094 * transfers. 1095 */ 1096 BUG_ON(!atslave->dma_dev || atslave->dma_dev != atdma->dma_common.dev); 1097 1098 /* if cfg configuration specified take it instad of default */ 1099 if (atslave->cfg) 1100 cfg = atslave->cfg; 1101 } 1102 1103 /* have we already been set up? 1104 * reconfigure channel but no need to reallocate descriptors */ 1105 if (!list_empty(&atchan->free_list)) 1106 return atchan->descs_allocated; 1107 1108 /* Allocate initial pool of descriptors */ 1109 for (i = 0; i < init_nr_desc_per_channel; i++) { 1110 desc = atc_alloc_descriptor(chan, GFP_KERNEL); 1111 if (!desc) { 1112 dev_err(atdma->dma_common.dev, 1113 "Only %d initial descriptors\n", i); 1114 break; 1115 } 1116 list_add_tail(&desc->desc_node, &tmp_list); 1117 } 1118 1119 spin_lock_bh(&atchan->lock); 1120 atchan->descs_allocated = i; 1121 list_splice(&tmp_list, &atchan->free_list); 1122 atchan->completed_cookie = chan->cookie = 1; 1123 spin_unlock_bh(&atchan->lock); 1124 1125 /* channel parameters */ 1126 channel_writel(atchan, CFG, cfg); 1127 1128 dev_dbg(chan2dev(chan), 1129 "alloc_chan_resources: allocated %d descriptors\n", 1130 atchan->descs_allocated); 1131 1132 return atchan->descs_allocated; 1133 } 1134 1135 /** 1136 * atc_free_chan_resources - free all channel resources 1137 * @chan: DMA channel 1138 */ 1139 static void atc_free_chan_resources(struct dma_chan *chan) 1140 { 1141 struct at_dma_chan *atchan = to_at_dma_chan(chan); 1142 struct at_dma *atdma = to_at_dma(chan->device); 1143 struct at_desc *desc, *_desc; 1144 LIST_HEAD(list); 1145 1146 dev_dbg(chan2dev(chan), "free_chan_resources: (descs allocated=%u)\n", 1147 atchan->descs_allocated); 1148 1149 /* ASSERT: channel is idle */ 1150 BUG_ON(!list_empty(&atchan->active_list)); 1151 BUG_ON(!list_empty(&atchan->queue)); 1152 BUG_ON(atc_chan_is_enabled(atchan)); 1153 1154 list_for_each_entry_safe(desc, _desc, &atchan->free_list, desc_node) { 1155 dev_vdbg(chan2dev(chan), " freeing descriptor %p\n", desc); 1156 list_del(&desc->desc_node); 1157 /* free link descriptor */ 1158 dma_pool_free(atdma->dma_desc_pool, desc, desc->txd.phys); 1159 } 1160 list_splice_init(&atchan->free_list, &list); 1161 atchan->descs_allocated = 0; 1162 atchan->status = 0; 1163 1164 dev_vdbg(chan2dev(chan), "free_chan_resources: done\n"); 1165 } 1166 1167 1168 /*-- Module Management -----------------------------------------------*/ 1169 1170 /** 1171 * at_dma_off - disable DMA controller 1172 * @atdma: the Atmel HDAMC device 1173 */ 1174 static void at_dma_off(struct at_dma *atdma) 1175 { 1176 dma_writel(atdma, EN, 0); 1177 1178 /* disable all interrupts */ 1179 dma_writel(atdma, EBCIDR, -1L); 1180 1181 /* confirm that all channels are disabled */ 1182 while (dma_readl(atdma, CHSR) & atdma->all_chan_mask) 1183 cpu_relax(); 1184 } 1185 1186 static int __init at_dma_probe(struct platform_device *pdev) 1187 { 1188 struct at_dma_platform_data *pdata; 1189 struct resource *io; 1190 struct at_dma *atdma; 1191 size_t size; 1192 int irq; 1193 int err; 1194 int i; 1195 1196 /* get DMA Controller parameters from platform */ 1197 pdata = pdev->dev.platform_data; 1198 if (!pdata || pdata->nr_channels > AT_DMA_MAX_NR_CHANNELS) 1199 return -EINVAL; 1200 1201 io = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1202 if (!io) 1203 return -EINVAL; 1204 1205 irq = platform_get_irq(pdev, 0); 1206 if (irq < 0) 1207 return irq; 1208 1209 size = sizeof(struct at_dma); 1210 size += pdata->nr_channels * sizeof(struct at_dma_chan); 1211 atdma = kzalloc(size, GFP_KERNEL); 1212 if (!atdma) 1213 return -ENOMEM; 1214 1215 /* discover transaction capabilites from the platform data */ 1216 atdma->dma_common.cap_mask = pdata->cap_mask; 1217 atdma->all_chan_mask = (1 << pdata->nr_channels) - 1; 1218 1219 size = io->end - io->start + 1; 1220 if (!request_mem_region(io->start, size, pdev->dev.driver->name)) { 1221 err = -EBUSY; 1222 goto err_kfree; 1223 } 1224 1225 atdma->regs = ioremap(io->start, size); 1226 if (!atdma->regs) { 1227 err = -ENOMEM; 1228 goto err_release_r; 1229 } 1230 1231 atdma->clk = clk_get(&pdev->dev, "dma_clk"); 1232 if (IS_ERR(atdma->clk)) { 1233 err = PTR_ERR(atdma->clk); 1234 goto err_clk; 1235 } 1236 clk_enable(atdma->clk); 1237 1238 /* force dma off, just in case */ 1239 at_dma_off(atdma); 1240 1241 err = request_irq(irq, at_dma_interrupt, 0, "at_hdmac", atdma); 1242 if (err) 1243 goto err_irq; 1244 1245 platform_set_drvdata(pdev, atdma); 1246 1247 /* create a pool of consistent memory blocks for hardware descriptors */ 1248 atdma->dma_desc_pool = dma_pool_create("at_hdmac_desc_pool", 1249 &pdev->dev, sizeof(struct at_desc), 1250 4 /* word alignment */, 0); 1251 if (!atdma->dma_desc_pool) { 1252 dev_err(&pdev->dev, "No memory for descriptors dma pool\n"); 1253 err = -ENOMEM; 1254 goto err_pool_create; 1255 } 1256 1257 /* clear any pending interrupt */ 1258 while (dma_readl(atdma, EBCISR)) 1259 cpu_relax(); 1260 1261 /* initialize channels related values */ 1262 INIT_LIST_HEAD(&atdma->dma_common.channels); 1263 for (i = 0; i < pdata->nr_channels; i++, atdma->dma_common.chancnt++) { 1264 struct at_dma_chan *atchan = &atdma->chan[i]; 1265 1266 atchan->chan_common.device = &atdma->dma_common; 1267 atchan->chan_common.cookie = atchan->completed_cookie = 1; 1268 atchan->chan_common.chan_id = i; 1269 list_add_tail(&atchan->chan_common.device_node, 1270 &atdma->dma_common.channels); 1271 1272 atchan->ch_regs = atdma->regs + ch_regs(i); 1273 spin_lock_init(&atchan->lock); 1274 atchan->mask = 1 << i; 1275 1276 INIT_LIST_HEAD(&atchan->active_list); 1277 INIT_LIST_HEAD(&atchan->queue); 1278 INIT_LIST_HEAD(&atchan->free_list); 1279 1280 tasklet_init(&atchan->tasklet, atc_tasklet, 1281 (unsigned long)atchan); 1282 atc_enable_irq(atchan); 1283 } 1284 1285 /* set base routines */ 1286 atdma->dma_common.device_alloc_chan_resources = atc_alloc_chan_resources; 1287 atdma->dma_common.device_free_chan_resources = atc_free_chan_resources; 1288 atdma->dma_common.device_tx_status = atc_tx_status; 1289 atdma->dma_common.device_issue_pending = atc_issue_pending; 1290 atdma->dma_common.dev = &pdev->dev; 1291 1292 /* set prep routines based on capability */ 1293 if (dma_has_cap(DMA_MEMCPY, atdma->dma_common.cap_mask)) 1294 atdma->dma_common.device_prep_dma_memcpy = atc_prep_dma_memcpy; 1295 1296 if (dma_has_cap(DMA_SLAVE, atdma->dma_common.cap_mask)) 1297 atdma->dma_common.device_prep_slave_sg = atc_prep_slave_sg; 1298 1299 if (dma_has_cap(DMA_CYCLIC, atdma->dma_common.cap_mask)) 1300 atdma->dma_common.device_prep_dma_cyclic = atc_prep_dma_cyclic; 1301 1302 if (dma_has_cap(DMA_SLAVE, atdma->dma_common.cap_mask) || 1303 dma_has_cap(DMA_CYCLIC, atdma->dma_common.cap_mask)) 1304 atdma->dma_common.device_control = atc_control; 1305 1306 dma_writel(atdma, EN, AT_DMA_ENABLE); 1307 1308 dev_info(&pdev->dev, "Atmel AHB DMA Controller ( %s%s), %d channels\n", 1309 dma_has_cap(DMA_MEMCPY, atdma->dma_common.cap_mask) ? "cpy " : "", 1310 dma_has_cap(DMA_SLAVE, atdma->dma_common.cap_mask) ? "slave " : "", 1311 atdma->dma_common.chancnt); 1312 1313 dma_async_device_register(&atdma->dma_common); 1314 1315 return 0; 1316 1317 err_pool_create: 1318 platform_set_drvdata(pdev, NULL); 1319 free_irq(platform_get_irq(pdev, 0), atdma); 1320 err_irq: 1321 clk_disable(atdma->clk); 1322 clk_put(atdma->clk); 1323 err_clk: 1324 iounmap(atdma->regs); 1325 atdma->regs = NULL; 1326 err_release_r: 1327 release_mem_region(io->start, size); 1328 err_kfree: 1329 kfree(atdma); 1330 return err; 1331 } 1332 1333 static int __exit at_dma_remove(struct platform_device *pdev) 1334 { 1335 struct at_dma *atdma = platform_get_drvdata(pdev); 1336 struct dma_chan *chan, *_chan; 1337 struct resource *io; 1338 1339 at_dma_off(atdma); 1340 dma_async_device_unregister(&atdma->dma_common); 1341 1342 dma_pool_destroy(atdma->dma_desc_pool); 1343 platform_set_drvdata(pdev, NULL); 1344 free_irq(platform_get_irq(pdev, 0), atdma); 1345 1346 list_for_each_entry_safe(chan, _chan, &atdma->dma_common.channels, 1347 device_node) { 1348 struct at_dma_chan *atchan = to_at_dma_chan(chan); 1349 1350 /* Disable interrupts */ 1351 atc_disable_irq(atchan); 1352 tasklet_disable(&atchan->tasklet); 1353 1354 tasklet_kill(&atchan->tasklet); 1355 list_del(&chan->device_node); 1356 } 1357 1358 clk_disable(atdma->clk); 1359 clk_put(atdma->clk); 1360 1361 iounmap(atdma->regs); 1362 atdma->regs = NULL; 1363 1364 io = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1365 release_mem_region(io->start, io->end - io->start + 1); 1366 1367 kfree(atdma); 1368 1369 return 0; 1370 } 1371 1372 static void at_dma_shutdown(struct platform_device *pdev) 1373 { 1374 struct at_dma *atdma = platform_get_drvdata(pdev); 1375 1376 at_dma_off(platform_get_drvdata(pdev)); 1377 clk_disable(atdma->clk); 1378 } 1379 1380 static int at_dma_suspend_noirq(struct device *dev) 1381 { 1382 struct platform_device *pdev = to_platform_device(dev); 1383 struct at_dma *atdma = platform_get_drvdata(pdev); 1384 1385 at_dma_off(platform_get_drvdata(pdev)); 1386 clk_disable(atdma->clk); 1387 return 0; 1388 } 1389 1390 static int at_dma_resume_noirq(struct device *dev) 1391 { 1392 struct platform_device *pdev = to_platform_device(dev); 1393 struct at_dma *atdma = platform_get_drvdata(pdev); 1394 1395 clk_enable(atdma->clk); 1396 dma_writel(atdma, EN, AT_DMA_ENABLE); 1397 return 0; 1398 } 1399 1400 static const struct dev_pm_ops at_dma_dev_pm_ops = { 1401 .suspend_noirq = at_dma_suspend_noirq, 1402 .resume_noirq = at_dma_resume_noirq, 1403 }; 1404 1405 static struct platform_driver at_dma_driver = { 1406 .remove = __exit_p(at_dma_remove), 1407 .shutdown = at_dma_shutdown, 1408 .driver = { 1409 .name = "at_hdmac", 1410 .pm = &at_dma_dev_pm_ops, 1411 }, 1412 }; 1413 1414 static int __init at_dma_init(void) 1415 { 1416 return platform_driver_probe(&at_dma_driver, at_dma_probe); 1417 } 1418 subsys_initcall(at_dma_init); 1419 1420 static void __exit at_dma_exit(void) 1421 { 1422 platform_driver_unregister(&at_dma_driver); 1423 } 1424 module_exit(at_dma_exit); 1425 1426 MODULE_DESCRIPTION("Atmel AHB DMA Controller driver"); 1427 MODULE_AUTHOR("Nicolas Ferre <nicolas.ferre@atmel.com>"); 1428 MODULE_LICENSE("GPL"); 1429 MODULE_ALIAS("platform:at_hdmac"); 1430