1 /* 2 * Copyright (c) 2006 ARM Ltd. 3 * Copyright (c) 2010 ST-Ericsson SA 4 * 5 * Author: Peter Pearse <peter.pearse@arm.com> 6 * Author: Linus Walleij <linus.walleij@stericsson.com> 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License as published by the Free 10 * Software Foundation; either version 2 of the License, or (at your option) 11 * any later version. 12 * 13 * This program is distributed in the hope that it will be useful, but WITHOUT 14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 16 * more details. 17 * 18 * You should have received a copy of the GNU General Public License along with 19 * this program; if not, write to the Free Software Foundation, Inc., 59 20 * Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21 * 22 * The full GNU General Public License is in this distribution in the file 23 * called COPYING. 24 * 25 * Documentation: ARM DDI 0196G == PL080 26 * Documentation: ARM DDI 0218E == PL081 27 * 28 * PL080 & PL081 both have 16 sets of DMA signals that can be routed to any 29 * channel. 30 * 31 * The PL080 has 8 channels available for simultaneous use, and the PL081 32 * has only two channels. So on these DMA controllers the number of channels 33 * and the number of incoming DMA signals are two totally different things. 34 * It is usually not possible to theoretically handle all physical signals, 35 * so a multiplexing scheme with possible denial of use is necessary. 36 * 37 * The PL080 has a dual bus master, PL081 has a single master. 38 * 39 * Memory to peripheral transfer may be visualized as 40 * Get data from memory to DMAC 41 * Until no data left 42 * On burst request from peripheral 43 * Destination burst from DMAC to peripheral 44 * Clear burst request 45 * Raise terminal count interrupt 46 * 47 * For peripherals with a FIFO: 48 * Source burst size == half the depth of the peripheral FIFO 49 * Destination burst size == the depth of the peripheral FIFO 50 * 51 * (Bursts are irrelevant for mem to mem transfers - there are no burst 52 * signals, the DMA controller will simply facilitate its AHB master.) 53 * 54 * ASSUMES default (little) endianness for DMA transfers 55 * 56 * The PL08x has two flow control settings: 57 * - DMAC flow control: the transfer size defines the number of transfers 58 * which occur for the current LLI entry, and the DMAC raises TC at the 59 * end of every LLI entry. Observed behaviour shows the DMAC listening 60 * to both the BREQ and SREQ signals (contrary to documented), 61 * transferring data if either is active. The LBREQ and LSREQ signals 62 * are ignored. 63 * 64 * - Peripheral flow control: the transfer size is ignored (and should be 65 * zero). The data is transferred from the current LLI entry, until 66 * after the final transfer signalled by LBREQ or LSREQ. The DMAC 67 * will then move to the next LLI entry. 68 * 69 * Global TODO: 70 * - Break out common code from arch/arm/mach-s3c64xx and share 71 */ 72 #include <linux/amba/bus.h> 73 #include <linux/amba/pl08x.h> 74 #include <linux/debugfs.h> 75 #include <linux/delay.h> 76 #include <linux/device.h> 77 #include <linux/dmaengine.h> 78 #include <linux/dmapool.h> 79 #include <linux/dma-mapping.h> 80 #include <linux/init.h> 81 #include <linux/interrupt.h> 82 #include <linux/module.h> 83 #include <linux/pm_runtime.h> 84 #include <linux/seq_file.h> 85 #include <linux/slab.h> 86 #include <asm/hardware/pl080.h> 87 88 #define DRIVER_NAME "pl08xdmac" 89 90 static struct amba_driver pl08x_amba_driver; 91 92 /** 93 * struct vendor_data - vendor-specific config parameters for PL08x derivatives 94 * @channels: the number of channels available in this variant 95 * @dualmaster: whether this version supports dual AHB masters or not. 96 */ 97 struct vendor_data { 98 u8 channels; 99 bool dualmaster; 100 }; 101 102 /* 103 * PL08X private data structures 104 * An LLI struct - see PL08x TRM. Note that next uses bit[0] as a bus bit, 105 * start & end do not - their bus bit info is in cctl. Also note that these 106 * are fixed 32-bit quantities. 107 */ 108 struct pl08x_lli { 109 u32 src; 110 u32 dst; 111 u32 lli; 112 u32 cctl; 113 }; 114 115 /** 116 * struct pl08x_driver_data - the local state holder for the PL08x 117 * @slave: slave engine for this instance 118 * @memcpy: memcpy engine for this instance 119 * @base: virtual memory base (remapped) for the PL08x 120 * @adev: the corresponding AMBA (PrimeCell) bus entry 121 * @vd: vendor data for this PL08x variant 122 * @pd: platform data passed in from the platform/machine 123 * @phy_chans: array of data for the physical channels 124 * @pool: a pool for the LLI descriptors 125 * @pool_ctr: counter of LLIs in the pool 126 * @lli_buses: bitmask to or in to LLI pointer selecting AHB port for LLI 127 * fetches 128 * @mem_buses: set to indicate memory transfers on AHB2. 129 * @lock: a spinlock for this struct 130 */ 131 struct pl08x_driver_data { 132 struct dma_device slave; 133 struct dma_device memcpy; 134 void __iomem *base; 135 struct amba_device *adev; 136 const struct vendor_data *vd; 137 struct pl08x_platform_data *pd; 138 struct pl08x_phy_chan *phy_chans; 139 struct dma_pool *pool; 140 int pool_ctr; 141 u8 lli_buses; 142 u8 mem_buses; 143 spinlock_t lock; 144 }; 145 146 /* 147 * PL08X specific defines 148 */ 149 150 /* Size (bytes) of each LLI buffer allocated for one transfer */ 151 # define PL08X_LLI_TSFR_SIZE 0x2000 152 153 /* Maximum times we call dma_pool_alloc on this pool without freeing */ 154 #define MAX_NUM_TSFR_LLIS (PL08X_LLI_TSFR_SIZE/sizeof(struct pl08x_lli)) 155 #define PL08X_ALIGN 8 156 157 static inline struct pl08x_dma_chan *to_pl08x_chan(struct dma_chan *chan) 158 { 159 return container_of(chan, struct pl08x_dma_chan, chan); 160 } 161 162 static inline struct pl08x_txd *to_pl08x_txd(struct dma_async_tx_descriptor *tx) 163 { 164 return container_of(tx, struct pl08x_txd, tx); 165 } 166 167 /* 168 * Physical channel handling 169 */ 170 171 /* Whether a certain channel is busy or not */ 172 static int pl08x_phy_channel_busy(struct pl08x_phy_chan *ch) 173 { 174 unsigned int val; 175 176 val = readl(ch->base + PL080_CH_CONFIG); 177 return val & PL080_CONFIG_ACTIVE; 178 } 179 180 /* 181 * Set the initial DMA register values i.e. those for the first LLI 182 * The next LLI pointer and the configuration interrupt bit have 183 * been set when the LLIs were constructed. Poke them into the hardware 184 * and start the transfer. 185 */ 186 static void pl08x_start_txd(struct pl08x_dma_chan *plchan, 187 struct pl08x_txd *txd) 188 { 189 struct pl08x_driver_data *pl08x = plchan->host; 190 struct pl08x_phy_chan *phychan = plchan->phychan; 191 struct pl08x_lli *lli = &txd->llis_va[0]; 192 u32 val; 193 194 plchan->at = txd; 195 196 /* Wait for channel inactive */ 197 while (pl08x_phy_channel_busy(phychan)) 198 cpu_relax(); 199 200 dev_vdbg(&pl08x->adev->dev, 201 "WRITE channel %d: csrc=0x%08x, cdst=0x%08x, " 202 "clli=0x%08x, cctl=0x%08x, ccfg=0x%08x\n", 203 phychan->id, lli->src, lli->dst, lli->lli, lli->cctl, 204 txd->ccfg); 205 206 writel(lli->src, phychan->base + PL080_CH_SRC_ADDR); 207 writel(lli->dst, phychan->base + PL080_CH_DST_ADDR); 208 writel(lli->lli, phychan->base + PL080_CH_LLI); 209 writel(lli->cctl, phychan->base + PL080_CH_CONTROL); 210 writel(txd->ccfg, phychan->base + PL080_CH_CONFIG); 211 212 /* Enable the DMA channel */ 213 /* Do not access config register until channel shows as disabled */ 214 while (readl(pl08x->base + PL080_EN_CHAN) & (1 << phychan->id)) 215 cpu_relax(); 216 217 /* Do not access config register until channel shows as inactive */ 218 val = readl(phychan->base + PL080_CH_CONFIG); 219 while ((val & PL080_CONFIG_ACTIVE) || (val & PL080_CONFIG_ENABLE)) 220 val = readl(phychan->base + PL080_CH_CONFIG); 221 222 writel(val | PL080_CONFIG_ENABLE, phychan->base + PL080_CH_CONFIG); 223 } 224 225 /* 226 * Pause the channel by setting the HALT bit. 227 * 228 * For M->P transfers, pause the DMAC first and then stop the peripheral - 229 * the FIFO can only drain if the peripheral is still requesting data. 230 * (note: this can still timeout if the DMAC FIFO never drains of data.) 231 * 232 * For P->M transfers, disable the peripheral first to stop it filling 233 * the DMAC FIFO, and then pause the DMAC. 234 */ 235 static void pl08x_pause_phy_chan(struct pl08x_phy_chan *ch) 236 { 237 u32 val; 238 int timeout; 239 240 /* Set the HALT bit and wait for the FIFO to drain */ 241 val = readl(ch->base + PL080_CH_CONFIG); 242 val |= PL080_CONFIG_HALT; 243 writel(val, ch->base + PL080_CH_CONFIG); 244 245 /* Wait for channel inactive */ 246 for (timeout = 1000; timeout; timeout--) { 247 if (!pl08x_phy_channel_busy(ch)) 248 break; 249 udelay(1); 250 } 251 if (pl08x_phy_channel_busy(ch)) 252 pr_err("pl08x: channel%u timeout waiting for pause\n", ch->id); 253 } 254 255 static void pl08x_resume_phy_chan(struct pl08x_phy_chan *ch) 256 { 257 u32 val; 258 259 /* Clear the HALT bit */ 260 val = readl(ch->base + PL080_CH_CONFIG); 261 val &= ~PL080_CONFIG_HALT; 262 writel(val, ch->base + PL080_CH_CONFIG); 263 } 264 265 /* 266 * pl08x_terminate_phy_chan() stops the channel, clears the FIFO and 267 * clears any pending interrupt status. This should not be used for 268 * an on-going transfer, but as a method of shutting down a channel 269 * (eg, when it's no longer used) or terminating a transfer. 270 */ 271 static void pl08x_terminate_phy_chan(struct pl08x_driver_data *pl08x, 272 struct pl08x_phy_chan *ch) 273 { 274 u32 val = readl(ch->base + PL080_CH_CONFIG); 275 276 val &= ~(PL080_CONFIG_ENABLE | PL080_CONFIG_ERR_IRQ_MASK | 277 PL080_CONFIG_TC_IRQ_MASK); 278 279 writel(val, ch->base + PL080_CH_CONFIG); 280 281 writel(1 << ch->id, pl08x->base + PL080_ERR_CLEAR); 282 writel(1 << ch->id, pl08x->base + PL080_TC_CLEAR); 283 } 284 285 static inline u32 get_bytes_in_cctl(u32 cctl) 286 { 287 /* The source width defines the number of bytes */ 288 u32 bytes = cctl & PL080_CONTROL_TRANSFER_SIZE_MASK; 289 290 switch (cctl >> PL080_CONTROL_SWIDTH_SHIFT) { 291 case PL080_WIDTH_8BIT: 292 break; 293 case PL080_WIDTH_16BIT: 294 bytes *= 2; 295 break; 296 case PL080_WIDTH_32BIT: 297 bytes *= 4; 298 break; 299 } 300 return bytes; 301 } 302 303 /* The channel should be paused when calling this */ 304 static u32 pl08x_getbytes_chan(struct pl08x_dma_chan *plchan) 305 { 306 struct pl08x_phy_chan *ch; 307 struct pl08x_txd *txd; 308 unsigned long flags; 309 size_t bytes = 0; 310 311 spin_lock_irqsave(&plchan->lock, flags); 312 ch = plchan->phychan; 313 txd = plchan->at; 314 315 /* 316 * Follow the LLIs to get the number of remaining 317 * bytes in the currently active transaction. 318 */ 319 if (ch && txd) { 320 u32 clli = readl(ch->base + PL080_CH_LLI) & ~PL080_LLI_LM_AHB2; 321 322 /* First get the remaining bytes in the active transfer */ 323 bytes = get_bytes_in_cctl(readl(ch->base + PL080_CH_CONTROL)); 324 325 if (clli) { 326 struct pl08x_lli *llis_va = txd->llis_va; 327 dma_addr_t llis_bus = txd->llis_bus; 328 int index; 329 330 BUG_ON(clli < llis_bus || clli >= llis_bus + 331 sizeof(struct pl08x_lli) * MAX_NUM_TSFR_LLIS); 332 333 /* 334 * Locate the next LLI - as this is an array, 335 * it's simple maths to find. 336 */ 337 index = (clli - llis_bus) / sizeof(struct pl08x_lli); 338 339 for (; index < MAX_NUM_TSFR_LLIS; index++) { 340 bytes += get_bytes_in_cctl(llis_va[index].cctl); 341 342 /* 343 * A LLI pointer of 0 terminates the LLI list 344 */ 345 if (!llis_va[index].lli) 346 break; 347 } 348 } 349 } 350 351 /* Sum up all queued transactions */ 352 if (!list_empty(&plchan->pend_list)) { 353 struct pl08x_txd *txdi; 354 list_for_each_entry(txdi, &plchan->pend_list, node) { 355 struct pl08x_sg *dsg; 356 list_for_each_entry(dsg, &txd->dsg_list, node) 357 bytes += dsg->len; 358 } 359 } 360 361 spin_unlock_irqrestore(&plchan->lock, flags); 362 363 return bytes; 364 } 365 366 /* 367 * Allocate a physical channel for a virtual channel 368 * 369 * Try to locate a physical channel to be used for this transfer. If all 370 * are taken return NULL and the requester will have to cope by using 371 * some fallback PIO mode or retrying later. 372 */ 373 static struct pl08x_phy_chan * 374 pl08x_get_phy_channel(struct pl08x_driver_data *pl08x, 375 struct pl08x_dma_chan *virt_chan) 376 { 377 struct pl08x_phy_chan *ch = NULL; 378 unsigned long flags; 379 int i; 380 381 for (i = 0; i < pl08x->vd->channels; i++) { 382 ch = &pl08x->phy_chans[i]; 383 384 spin_lock_irqsave(&ch->lock, flags); 385 386 if (!ch->serving) { 387 ch->serving = virt_chan; 388 ch->signal = -1; 389 spin_unlock_irqrestore(&ch->lock, flags); 390 break; 391 } 392 393 spin_unlock_irqrestore(&ch->lock, flags); 394 } 395 396 if (i == pl08x->vd->channels) { 397 /* No physical channel available, cope with it */ 398 return NULL; 399 } 400 401 pm_runtime_get_sync(&pl08x->adev->dev); 402 return ch; 403 } 404 405 static inline void pl08x_put_phy_channel(struct pl08x_driver_data *pl08x, 406 struct pl08x_phy_chan *ch) 407 { 408 unsigned long flags; 409 410 spin_lock_irqsave(&ch->lock, flags); 411 412 /* Stop the channel and clear its interrupts */ 413 pl08x_terminate_phy_chan(pl08x, ch); 414 415 pm_runtime_put(&pl08x->adev->dev); 416 417 /* Mark it as free */ 418 ch->serving = NULL; 419 spin_unlock_irqrestore(&ch->lock, flags); 420 } 421 422 /* 423 * LLI handling 424 */ 425 426 static inline unsigned int pl08x_get_bytes_for_cctl(unsigned int coded) 427 { 428 switch (coded) { 429 case PL080_WIDTH_8BIT: 430 return 1; 431 case PL080_WIDTH_16BIT: 432 return 2; 433 case PL080_WIDTH_32BIT: 434 return 4; 435 default: 436 break; 437 } 438 BUG(); 439 return 0; 440 } 441 442 static inline u32 pl08x_cctl_bits(u32 cctl, u8 srcwidth, u8 dstwidth, 443 size_t tsize) 444 { 445 u32 retbits = cctl; 446 447 /* Remove all src, dst and transfer size bits */ 448 retbits &= ~PL080_CONTROL_DWIDTH_MASK; 449 retbits &= ~PL080_CONTROL_SWIDTH_MASK; 450 retbits &= ~PL080_CONTROL_TRANSFER_SIZE_MASK; 451 452 /* Then set the bits according to the parameters */ 453 switch (srcwidth) { 454 case 1: 455 retbits |= PL080_WIDTH_8BIT << PL080_CONTROL_SWIDTH_SHIFT; 456 break; 457 case 2: 458 retbits |= PL080_WIDTH_16BIT << PL080_CONTROL_SWIDTH_SHIFT; 459 break; 460 case 4: 461 retbits |= PL080_WIDTH_32BIT << PL080_CONTROL_SWIDTH_SHIFT; 462 break; 463 default: 464 BUG(); 465 break; 466 } 467 468 switch (dstwidth) { 469 case 1: 470 retbits |= PL080_WIDTH_8BIT << PL080_CONTROL_DWIDTH_SHIFT; 471 break; 472 case 2: 473 retbits |= PL080_WIDTH_16BIT << PL080_CONTROL_DWIDTH_SHIFT; 474 break; 475 case 4: 476 retbits |= PL080_WIDTH_32BIT << PL080_CONTROL_DWIDTH_SHIFT; 477 break; 478 default: 479 BUG(); 480 break; 481 } 482 483 retbits |= tsize << PL080_CONTROL_TRANSFER_SIZE_SHIFT; 484 return retbits; 485 } 486 487 struct pl08x_lli_build_data { 488 struct pl08x_txd *txd; 489 struct pl08x_bus_data srcbus; 490 struct pl08x_bus_data dstbus; 491 size_t remainder; 492 u32 lli_bus; 493 }; 494 495 /* 496 * Autoselect a master bus to use for the transfer. Slave will be the chosen as 497 * victim in case src & dest are not similarly aligned. i.e. If after aligning 498 * masters address with width requirements of transfer (by sending few byte by 499 * byte data), slave is still not aligned, then its width will be reduced to 500 * BYTE. 501 * - prefers the destination bus if both available 502 * - prefers bus with fixed address (i.e. peripheral) 503 */ 504 static void pl08x_choose_master_bus(struct pl08x_lli_build_data *bd, 505 struct pl08x_bus_data **mbus, struct pl08x_bus_data **sbus, u32 cctl) 506 { 507 if (!(cctl & PL080_CONTROL_DST_INCR)) { 508 *mbus = &bd->dstbus; 509 *sbus = &bd->srcbus; 510 } else if (!(cctl & PL080_CONTROL_SRC_INCR)) { 511 *mbus = &bd->srcbus; 512 *sbus = &bd->dstbus; 513 } else { 514 if (bd->dstbus.buswidth >= bd->srcbus.buswidth) { 515 *mbus = &bd->dstbus; 516 *sbus = &bd->srcbus; 517 } else { 518 *mbus = &bd->srcbus; 519 *sbus = &bd->dstbus; 520 } 521 } 522 } 523 524 /* 525 * Fills in one LLI for a certain transfer descriptor and advance the counter 526 */ 527 static void pl08x_fill_lli_for_desc(struct pl08x_lli_build_data *bd, 528 int num_llis, int len, u32 cctl) 529 { 530 struct pl08x_lli *llis_va = bd->txd->llis_va; 531 dma_addr_t llis_bus = bd->txd->llis_bus; 532 533 BUG_ON(num_llis >= MAX_NUM_TSFR_LLIS); 534 535 llis_va[num_llis].cctl = cctl; 536 llis_va[num_llis].src = bd->srcbus.addr; 537 llis_va[num_llis].dst = bd->dstbus.addr; 538 llis_va[num_llis].lli = llis_bus + (num_llis + 1) * 539 sizeof(struct pl08x_lli); 540 llis_va[num_llis].lli |= bd->lli_bus; 541 542 if (cctl & PL080_CONTROL_SRC_INCR) 543 bd->srcbus.addr += len; 544 if (cctl & PL080_CONTROL_DST_INCR) 545 bd->dstbus.addr += len; 546 547 BUG_ON(bd->remainder < len); 548 549 bd->remainder -= len; 550 } 551 552 static inline void prep_byte_width_lli(struct pl08x_lli_build_data *bd, 553 u32 *cctl, u32 len, int num_llis, size_t *total_bytes) 554 { 555 *cctl = pl08x_cctl_bits(*cctl, 1, 1, len); 556 pl08x_fill_lli_for_desc(bd, num_llis, len, *cctl); 557 (*total_bytes) += len; 558 } 559 560 /* 561 * This fills in the table of LLIs for the transfer descriptor 562 * Note that we assume we never have to change the burst sizes 563 * Return 0 for error 564 */ 565 static int pl08x_fill_llis_for_desc(struct pl08x_driver_data *pl08x, 566 struct pl08x_txd *txd) 567 { 568 struct pl08x_bus_data *mbus, *sbus; 569 struct pl08x_lli_build_data bd; 570 int num_llis = 0; 571 u32 cctl, early_bytes = 0; 572 size_t max_bytes_per_lli, total_bytes; 573 struct pl08x_lli *llis_va; 574 struct pl08x_sg *dsg; 575 576 txd->llis_va = dma_pool_alloc(pl08x->pool, GFP_NOWAIT, &txd->llis_bus); 577 if (!txd->llis_va) { 578 dev_err(&pl08x->adev->dev, "%s no memory for llis\n", __func__); 579 return 0; 580 } 581 582 pl08x->pool_ctr++; 583 584 bd.txd = txd; 585 bd.lli_bus = (pl08x->lli_buses & PL08X_AHB2) ? PL080_LLI_LM_AHB2 : 0; 586 cctl = txd->cctl; 587 588 /* Find maximum width of the source bus */ 589 bd.srcbus.maxwidth = 590 pl08x_get_bytes_for_cctl((cctl & PL080_CONTROL_SWIDTH_MASK) >> 591 PL080_CONTROL_SWIDTH_SHIFT); 592 593 /* Find maximum width of the destination bus */ 594 bd.dstbus.maxwidth = 595 pl08x_get_bytes_for_cctl((cctl & PL080_CONTROL_DWIDTH_MASK) >> 596 PL080_CONTROL_DWIDTH_SHIFT); 597 598 list_for_each_entry(dsg, &txd->dsg_list, node) { 599 total_bytes = 0; 600 cctl = txd->cctl; 601 602 bd.srcbus.addr = dsg->src_addr; 603 bd.dstbus.addr = dsg->dst_addr; 604 bd.remainder = dsg->len; 605 bd.srcbus.buswidth = bd.srcbus.maxwidth; 606 bd.dstbus.buswidth = bd.dstbus.maxwidth; 607 608 pl08x_choose_master_bus(&bd, &mbus, &sbus, cctl); 609 610 dev_vdbg(&pl08x->adev->dev, "src=0x%08x%s/%u dst=0x%08x%s/%u len=%zu\n", 611 bd.srcbus.addr, cctl & PL080_CONTROL_SRC_INCR ? "+" : "", 612 bd.srcbus.buswidth, 613 bd.dstbus.addr, cctl & PL080_CONTROL_DST_INCR ? "+" : "", 614 bd.dstbus.buswidth, 615 bd.remainder); 616 dev_vdbg(&pl08x->adev->dev, "mbus=%s sbus=%s\n", 617 mbus == &bd.srcbus ? "src" : "dst", 618 sbus == &bd.srcbus ? "src" : "dst"); 619 620 /* 621 * Zero length is only allowed if all these requirements are 622 * met: 623 * - flow controller is peripheral. 624 * - src.addr is aligned to src.width 625 * - dst.addr is aligned to dst.width 626 * 627 * sg_len == 1 should be true, as there can be two cases here: 628 * 629 * - Memory addresses are contiguous and are not scattered. 630 * Here, Only one sg will be passed by user driver, with 631 * memory address and zero length. We pass this to controller 632 * and after the transfer it will receive the last burst 633 * request from peripheral and so transfer finishes. 634 * 635 * - Memory addresses are scattered and are not contiguous. 636 * Here, Obviously as DMA controller doesn't know when a lli's 637 * transfer gets over, it can't load next lli. So in this 638 * case, there has to be an assumption that only one lli is 639 * supported. Thus, we can't have scattered addresses. 640 */ 641 if (!bd.remainder) { 642 u32 fc = (txd->ccfg & PL080_CONFIG_FLOW_CONTROL_MASK) >> 643 PL080_CONFIG_FLOW_CONTROL_SHIFT; 644 if (!((fc >= PL080_FLOW_SRC2DST_DST) && 645 (fc <= PL080_FLOW_SRC2DST_SRC))) { 646 dev_err(&pl08x->adev->dev, "%s sg len can't be zero", 647 __func__); 648 return 0; 649 } 650 651 if ((bd.srcbus.addr % bd.srcbus.buswidth) || 652 (bd.srcbus.addr % bd.srcbus.buswidth)) { 653 dev_err(&pl08x->adev->dev, 654 "%s src & dst address must be aligned to src" 655 " & dst width if peripheral is flow controller", 656 __func__); 657 return 0; 658 } 659 660 cctl = pl08x_cctl_bits(cctl, bd.srcbus.buswidth, 661 bd.dstbus.buswidth, 0); 662 pl08x_fill_lli_for_desc(&bd, num_llis++, 0, cctl); 663 break; 664 } 665 666 /* 667 * Send byte by byte for following cases 668 * - Less than a bus width available 669 * - until master bus is aligned 670 */ 671 if (bd.remainder < mbus->buswidth) 672 early_bytes = bd.remainder; 673 else if ((mbus->addr) % (mbus->buswidth)) { 674 early_bytes = mbus->buswidth - (mbus->addr) % 675 (mbus->buswidth); 676 if ((bd.remainder - early_bytes) < mbus->buswidth) 677 early_bytes = bd.remainder; 678 } 679 680 if (early_bytes) { 681 dev_vdbg(&pl08x->adev->dev, 682 "%s byte width LLIs (remain 0x%08x)\n", 683 __func__, bd.remainder); 684 prep_byte_width_lli(&bd, &cctl, early_bytes, num_llis++, 685 &total_bytes); 686 } 687 688 if (bd.remainder) { 689 /* 690 * Master now aligned 691 * - if slave is not then we must set its width down 692 */ 693 if (sbus->addr % sbus->buswidth) { 694 dev_dbg(&pl08x->adev->dev, 695 "%s set down bus width to one byte\n", 696 __func__); 697 698 sbus->buswidth = 1; 699 } 700 701 /* 702 * Bytes transferred = tsize * src width, not 703 * MIN(buswidths) 704 */ 705 max_bytes_per_lli = bd.srcbus.buswidth * 706 PL080_CONTROL_TRANSFER_SIZE_MASK; 707 dev_vdbg(&pl08x->adev->dev, 708 "%s max bytes per lli = %zu\n", 709 __func__, max_bytes_per_lli); 710 711 /* 712 * Make largest possible LLIs until less than one bus 713 * width left 714 */ 715 while (bd.remainder > (mbus->buswidth - 1)) { 716 size_t lli_len, tsize, width; 717 718 /* 719 * If enough left try to send max possible, 720 * otherwise try to send the remainder 721 */ 722 lli_len = min(bd.remainder, max_bytes_per_lli); 723 724 /* 725 * Check against maximum bus alignment: 726 * Calculate actual transfer size in relation to 727 * bus width an get a maximum remainder of the 728 * highest bus width - 1 729 */ 730 width = max(mbus->buswidth, sbus->buswidth); 731 lli_len = (lli_len / width) * width; 732 tsize = lli_len / bd.srcbus.buswidth; 733 734 dev_vdbg(&pl08x->adev->dev, 735 "%s fill lli with single lli chunk of " 736 "size 0x%08zx (remainder 0x%08zx)\n", 737 __func__, lli_len, bd.remainder); 738 739 cctl = pl08x_cctl_bits(cctl, bd.srcbus.buswidth, 740 bd.dstbus.buswidth, tsize); 741 pl08x_fill_lli_for_desc(&bd, num_llis++, 742 lli_len, cctl); 743 total_bytes += lli_len; 744 } 745 746 /* 747 * Send any odd bytes 748 */ 749 if (bd.remainder) { 750 dev_vdbg(&pl08x->adev->dev, 751 "%s align with boundary, send odd bytes (remain %zu)\n", 752 __func__, bd.remainder); 753 prep_byte_width_lli(&bd, &cctl, bd.remainder, 754 num_llis++, &total_bytes); 755 } 756 } 757 758 if (total_bytes != dsg->len) { 759 dev_err(&pl08x->adev->dev, 760 "%s size of encoded lli:s don't match total txd, transferred 0x%08zx from size 0x%08zx\n", 761 __func__, total_bytes, dsg->len); 762 return 0; 763 } 764 765 if (num_llis >= MAX_NUM_TSFR_LLIS) { 766 dev_err(&pl08x->adev->dev, 767 "%s need to increase MAX_NUM_TSFR_LLIS from 0x%08x\n", 768 __func__, (u32) MAX_NUM_TSFR_LLIS); 769 return 0; 770 } 771 } 772 773 llis_va = txd->llis_va; 774 /* The final LLI terminates the LLI. */ 775 llis_va[num_llis - 1].lli = 0; 776 /* The final LLI element shall also fire an interrupt. */ 777 llis_va[num_llis - 1].cctl |= PL080_CONTROL_TC_IRQ_EN; 778 779 #ifdef VERBOSE_DEBUG 780 { 781 int i; 782 783 dev_vdbg(&pl08x->adev->dev, 784 "%-3s %-9s %-10s %-10s %-10s %s\n", 785 "lli", "", "csrc", "cdst", "clli", "cctl"); 786 for (i = 0; i < num_llis; i++) { 787 dev_vdbg(&pl08x->adev->dev, 788 "%3d @%p: 0x%08x 0x%08x 0x%08x 0x%08x\n", 789 i, &llis_va[i], llis_va[i].src, 790 llis_va[i].dst, llis_va[i].lli, llis_va[i].cctl 791 ); 792 } 793 } 794 #endif 795 796 return num_llis; 797 } 798 799 /* You should call this with the struct pl08x lock held */ 800 static void pl08x_free_txd(struct pl08x_driver_data *pl08x, 801 struct pl08x_txd *txd) 802 { 803 struct pl08x_sg *dsg, *_dsg; 804 805 /* Free the LLI */ 806 if (txd->llis_va) 807 dma_pool_free(pl08x->pool, txd->llis_va, txd->llis_bus); 808 809 pl08x->pool_ctr--; 810 811 list_for_each_entry_safe(dsg, _dsg, &txd->dsg_list, node) { 812 list_del(&dsg->node); 813 kfree(dsg); 814 } 815 816 kfree(txd); 817 } 818 819 static void pl08x_free_txd_list(struct pl08x_driver_data *pl08x, 820 struct pl08x_dma_chan *plchan) 821 { 822 struct pl08x_txd *txdi = NULL; 823 struct pl08x_txd *next; 824 825 if (!list_empty(&plchan->pend_list)) { 826 list_for_each_entry_safe(txdi, 827 next, &plchan->pend_list, node) { 828 list_del(&txdi->node); 829 pl08x_free_txd(pl08x, txdi); 830 } 831 } 832 } 833 834 /* 835 * The DMA ENGINE API 836 */ 837 static int pl08x_alloc_chan_resources(struct dma_chan *chan) 838 { 839 return 0; 840 } 841 842 static void pl08x_free_chan_resources(struct dma_chan *chan) 843 { 844 } 845 846 /* 847 * This should be called with the channel plchan->lock held 848 */ 849 static int prep_phy_channel(struct pl08x_dma_chan *plchan, 850 struct pl08x_txd *txd) 851 { 852 struct pl08x_driver_data *pl08x = plchan->host; 853 struct pl08x_phy_chan *ch; 854 int ret; 855 856 /* Check if we already have a channel */ 857 if (plchan->phychan) { 858 ch = plchan->phychan; 859 goto got_channel; 860 } 861 862 ch = pl08x_get_phy_channel(pl08x, plchan); 863 if (!ch) { 864 /* No physical channel available, cope with it */ 865 dev_dbg(&pl08x->adev->dev, "no physical channel available for xfer on %s\n", plchan->name); 866 return -EBUSY; 867 } 868 869 /* 870 * OK we have a physical channel: for memcpy() this is all we 871 * need, but for slaves the physical signals may be muxed! 872 * Can the platform allow us to use this channel? 873 */ 874 if (plchan->slave && pl08x->pd->get_signal) { 875 ret = pl08x->pd->get_signal(plchan); 876 if (ret < 0) { 877 dev_dbg(&pl08x->adev->dev, 878 "unable to use physical channel %d for transfer on %s due to platform restrictions\n", 879 ch->id, plchan->name); 880 /* Release physical channel & return */ 881 pl08x_put_phy_channel(pl08x, ch); 882 return -EBUSY; 883 } 884 ch->signal = ret; 885 } 886 887 plchan->phychan = ch; 888 dev_dbg(&pl08x->adev->dev, "allocated physical channel %d and signal %d for xfer on %s\n", 889 ch->id, 890 ch->signal, 891 plchan->name); 892 893 got_channel: 894 /* Assign the flow control signal to this channel */ 895 if (txd->direction == DMA_MEM_TO_DEV) 896 txd->ccfg |= ch->signal << PL080_CONFIG_DST_SEL_SHIFT; 897 else if (txd->direction == DMA_DEV_TO_MEM) 898 txd->ccfg |= ch->signal << PL080_CONFIG_SRC_SEL_SHIFT; 899 900 plchan->phychan_hold++; 901 902 return 0; 903 } 904 905 static void release_phy_channel(struct pl08x_dma_chan *plchan) 906 { 907 struct pl08x_driver_data *pl08x = plchan->host; 908 909 if ((plchan->phychan->signal >= 0) && pl08x->pd->put_signal) { 910 pl08x->pd->put_signal(plchan); 911 plchan->phychan->signal = -1; 912 } 913 pl08x_put_phy_channel(pl08x, plchan->phychan); 914 plchan->phychan = NULL; 915 } 916 917 static dma_cookie_t pl08x_tx_submit(struct dma_async_tx_descriptor *tx) 918 { 919 struct pl08x_dma_chan *plchan = to_pl08x_chan(tx->chan); 920 struct pl08x_txd *txd = to_pl08x_txd(tx); 921 unsigned long flags; 922 923 spin_lock_irqsave(&plchan->lock, flags); 924 925 plchan->chan.cookie += 1; 926 if (plchan->chan.cookie < 0) 927 plchan->chan.cookie = 1; 928 tx->cookie = plchan->chan.cookie; 929 930 /* Put this onto the pending list */ 931 list_add_tail(&txd->node, &plchan->pend_list); 932 933 /* 934 * If there was no physical channel available for this memcpy, 935 * stack the request up and indicate that the channel is waiting 936 * for a free physical channel. 937 */ 938 if (!plchan->slave && !plchan->phychan) { 939 /* Do this memcpy whenever there is a channel ready */ 940 plchan->state = PL08X_CHAN_WAITING; 941 plchan->waiting = txd; 942 } else { 943 plchan->phychan_hold--; 944 } 945 946 spin_unlock_irqrestore(&plchan->lock, flags); 947 948 return tx->cookie; 949 } 950 951 static struct dma_async_tx_descriptor *pl08x_prep_dma_interrupt( 952 struct dma_chan *chan, unsigned long flags) 953 { 954 struct dma_async_tx_descriptor *retval = NULL; 955 956 return retval; 957 } 958 959 /* 960 * Code accessing dma_async_is_complete() in a tight loop may give problems. 961 * If slaves are relying on interrupts to signal completion this function 962 * must not be called with interrupts disabled. 963 */ 964 static enum dma_status pl08x_dma_tx_status(struct dma_chan *chan, 965 dma_cookie_t cookie, struct dma_tx_state *txstate) 966 { 967 struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); 968 dma_cookie_t last_used; 969 dma_cookie_t last_complete; 970 enum dma_status ret; 971 u32 bytesleft = 0; 972 973 last_used = plchan->chan.cookie; 974 last_complete = plchan->lc; 975 976 ret = dma_async_is_complete(cookie, last_complete, last_used); 977 if (ret == DMA_SUCCESS) { 978 dma_set_tx_state(txstate, last_complete, last_used, 0); 979 return ret; 980 } 981 982 /* 983 * This cookie not complete yet 984 */ 985 last_used = plchan->chan.cookie; 986 last_complete = plchan->lc; 987 988 /* Get number of bytes left in the active transactions and queue */ 989 bytesleft = pl08x_getbytes_chan(plchan); 990 991 dma_set_tx_state(txstate, last_complete, last_used, 992 bytesleft); 993 994 if (plchan->state == PL08X_CHAN_PAUSED) 995 return DMA_PAUSED; 996 997 /* Whether waiting or running, we're in progress */ 998 return DMA_IN_PROGRESS; 999 } 1000 1001 /* PrimeCell DMA extension */ 1002 struct burst_table { 1003 u32 burstwords; 1004 u32 reg; 1005 }; 1006 1007 static const struct burst_table burst_sizes[] = { 1008 { 1009 .burstwords = 256, 1010 .reg = PL080_BSIZE_256, 1011 }, 1012 { 1013 .burstwords = 128, 1014 .reg = PL080_BSIZE_128, 1015 }, 1016 { 1017 .burstwords = 64, 1018 .reg = PL080_BSIZE_64, 1019 }, 1020 { 1021 .burstwords = 32, 1022 .reg = PL080_BSIZE_32, 1023 }, 1024 { 1025 .burstwords = 16, 1026 .reg = PL080_BSIZE_16, 1027 }, 1028 { 1029 .burstwords = 8, 1030 .reg = PL080_BSIZE_8, 1031 }, 1032 { 1033 .burstwords = 4, 1034 .reg = PL080_BSIZE_4, 1035 }, 1036 { 1037 .burstwords = 0, 1038 .reg = PL080_BSIZE_1, 1039 }, 1040 }; 1041 1042 /* 1043 * Given the source and destination available bus masks, select which 1044 * will be routed to each port. We try to have source and destination 1045 * on separate ports, but always respect the allowable settings. 1046 */ 1047 static u32 pl08x_select_bus(u8 src, u8 dst) 1048 { 1049 u32 cctl = 0; 1050 1051 if (!(dst & PL08X_AHB1) || ((dst & PL08X_AHB2) && (src & PL08X_AHB1))) 1052 cctl |= PL080_CONTROL_DST_AHB2; 1053 if (!(src & PL08X_AHB1) || ((src & PL08X_AHB2) && !(dst & PL08X_AHB2))) 1054 cctl |= PL080_CONTROL_SRC_AHB2; 1055 1056 return cctl; 1057 } 1058 1059 static u32 pl08x_cctl(u32 cctl) 1060 { 1061 cctl &= ~(PL080_CONTROL_SRC_AHB2 | PL080_CONTROL_DST_AHB2 | 1062 PL080_CONTROL_SRC_INCR | PL080_CONTROL_DST_INCR | 1063 PL080_CONTROL_PROT_MASK); 1064 1065 /* Access the cell in privileged mode, non-bufferable, non-cacheable */ 1066 return cctl | PL080_CONTROL_PROT_SYS; 1067 } 1068 1069 static u32 pl08x_width(enum dma_slave_buswidth width) 1070 { 1071 switch (width) { 1072 case DMA_SLAVE_BUSWIDTH_1_BYTE: 1073 return PL080_WIDTH_8BIT; 1074 case DMA_SLAVE_BUSWIDTH_2_BYTES: 1075 return PL080_WIDTH_16BIT; 1076 case DMA_SLAVE_BUSWIDTH_4_BYTES: 1077 return PL080_WIDTH_32BIT; 1078 default: 1079 return ~0; 1080 } 1081 } 1082 1083 static u32 pl08x_burst(u32 maxburst) 1084 { 1085 int i; 1086 1087 for (i = 0; i < ARRAY_SIZE(burst_sizes); i++) 1088 if (burst_sizes[i].burstwords <= maxburst) 1089 break; 1090 1091 return burst_sizes[i].reg; 1092 } 1093 1094 static int dma_set_runtime_config(struct dma_chan *chan, 1095 struct dma_slave_config *config) 1096 { 1097 struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); 1098 struct pl08x_driver_data *pl08x = plchan->host; 1099 enum dma_slave_buswidth addr_width; 1100 u32 width, burst, maxburst; 1101 u32 cctl = 0; 1102 1103 if (!plchan->slave) 1104 return -EINVAL; 1105 1106 /* Transfer direction */ 1107 plchan->runtime_direction = config->direction; 1108 if (config->direction == DMA_MEM_TO_DEV) { 1109 addr_width = config->dst_addr_width; 1110 maxburst = config->dst_maxburst; 1111 } else if (config->direction == DMA_DEV_TO_MEM) { 1112 addr_width = config->src_addr_width; 1113 maxburst = config->src_maxburst; 1114 } else { 1115 dev_err(&pl08x->adev->dev, 1116 "bad runtime_config: alien transfer direction\n"); 1117 return -EINVAL; 1118 } 1119 1120 width = pl08x_width(addr_width); 1121 if (width == ~0) { 1122 dev_err(&pl08x->adev->dev, 1123 "bad runtime_config: alien address width\n"); 1124 return -EINVAL; 1125 } 1126 1127 cctl |= width << PL080_CONTROL_SWIDTH_SHIFT; 1128 cctl |= width << PL080_CONTROL_DWIDTH_SHIFT; 1129 1130 /* 1131 * If this channel will only request single transfers, set this 1132 * down to ONE element. Also select one element if no maxburst 1133 * is specified. 1134 */ 1135 if (plchan->cd->single) 1136 maxburst = 1; 1137 1138 burst = pl08x_burst(maxburst); 1139 cctl |= burst << PL080_CONTROL_SB_SIZE_SHIFT; 1140 cctl |= burst << PL080_CONTROL_DB_SIZE_SHIFT; 1141 1142 if (plchan->runtime_direction == DMA_DEV_TO_MEM) { 1143 plchan->src_addr = config->src_addr; 1144 plchan->src_cctl = pl08x_cctl(cctl) | PL080_CONTROL_DST_INCR | 1145 pl08x_select_bus(plchan->cd->periph_buses, 1146 pl08x->mem_buses); 1147 } else { 1148 plchan->dst_addr = config->dst_addr; 1149 plchan->dst_cctl = pl08x_cctl(cctl) | PL080_CONTROL_SRC_INCR | 1150 pl08x_select_bus(pl08x->mem_buses, 1151 plchan->cd->periph_buses); 1152 } 1153 1154 dev_dbg(&pl08x->adev->dev, 1155 "configured channel %s (%s) for %s, data width %d, " 1156 "maxburst %d words, LE, CCTL=0x%08x\n", 1157 dma_chan_name(chan), plchan->name, 1158 (config->direction == DMA_DEV_TO_MEM) ? "RX" : "TX", 1159 addr_width, 1160 maxburst, 1161 cctl); 1162 1163 return 0; 1164 } 1165 1166 /* 1167 * Slave transactions callback to the slave device to allow 1168 * synchronization of slave DMA signals with the DMAC enable 1169 */ 1170 static void pl08x_issue_pending(struct dma_chan *chan) 1171 { 1172 struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); 1173 unsigned long flags; 1174 1175 spin_lock_irqsave(&plchan->lock, flags); 1176 /* Something is already active, or we're waiting for a channel... */ 1177 if (plchan->at || plchan->state == PL08X_CHAN_WAITING) { 1178 spin_unlock_irqrestore(&plchan->lock, flags); 1179 return; 1180 } 1181 1182 /* Take the first element in the queue and execute it */ 1183 if (!list_empty(&plchan->pend_list)) { 1184 struct pl08x_txd *next; 1185 1186 next = list_first_entry(&plchan->pend_list, 1187 struct pl08x_txd, 1188 node); 1189 list_del(&next->node); 1190 plchan->state = PL08X_CHAN_RUNNING; 1191 1192 pl08x_start_txd(plchan, next); 1193 } 1194 1195 spin_unlock_irqrestore(&plchan->lock, flags); 1196 } 1197 1198 static int pl08x_prep_channel_resources(struct pl08x_dma_chan *plchan, 1199 struct pl08x_txd *txd) 1200 { 1201 struct pl08x_driver_data *pl08x = plchan->host; 1202 unsigned long flags; 1203 int num_llis, ret; 1204 1205 num_llis = pl08x_fill_llis_for_desc(pl08x, txd); 1206 if (!num_llis) { 1207 spin_lock_irqsave(&plchan->lock, flags); 1208 pl08x_free_txd(pl08x, txd); 1209 spin_unlock_irqrestore(&plchan->lock, flags); 1210 return -EINVAL; 1211 } 1212 1213 spin_lock_irqsave(&plchan->lock, flags); 1214 1215 /* 1216 * See if we already have a physical channel allocated, 1217 * else this is the time to try to get one. 1218 */ 1219 ret = prep_phy_channel(plchan, txd); 1220 if (ret) { 1221 /* 1222 * No physical channel was available. 1223 * 1224 * memcpy transfers can be sorted out at submission time. 1225 * 1226 * Slave transfers may have been denied due to platform 1227 * channel muxing restrictions. Since there is no guarantee 1228 * that this will ever be resolved, and the signal must be 1229 * acquired AFTER acquiring the physical channel, we will let 1230 * them be NACK:ed with -EBUSY here. The drivers can retry 1231 * the prep() call if they are eager on doing this using DMA. 1232 */ 1233 if (plchan->slave) { 1234 pl08x_free_txd_list(pl08x, plchan); 1235 pl08x_free_txd(pl08x, txd); 1236 spin_unlock_irqrestore(&plchan->lock, flags); 1237 return -EBUSY; 1238 } 1239 } else 1240 /* 1241 * Else we're all set, paused and ready to roll, status 1242 * will switch to PL08X_CHAN_RUNNING when we call 1243 * issue_pending(). If there is something running on the 1244 * channel already we don't change its state. 1245 */ 1246 if (plchan->state == PL08X_CHAN_IDLE) 1247 plchan->state = PL08X_CHAN_PAUSED; 1248 1249 spin_unlock_irqrestore(&plchan->lock, flags); 1250 1251 return 0; 1252 } 1253 1254 static struct pl08x_txd *pl08x_get_txd(struct pl08x_dma_chan *plchan, 1255 unsigned long flags) 1256 { 1257 struct pl08x_txd *txd = kzalloc(sizeof(*txd), GFP_NOWAIT); 1258 1259 if (txd) { 1260 dma_async_tx_descriptor_init(&txd->tx, &plchan->chan); 1261 txd->tx.flags = flags; 1262 txd->tx.tx_submit = pl08x_tx_submit; 1263 INIT_LIST_HEAD(&txd->node); 1264 INIT_LIST_HEAD(&txd->dsg_list); 1265 1266 /* Always enable error and terminal interrupts */ 1267 txd->ccfg = PL080_CONFIG_ERR_IRQ_MASK | 1268 PL080_CONFIG_TC_IRQ_MASK; 1269 } 1270 return txd; 1271 } 1272 1273 /* 1274 * Initialize a descriptor to be used by memcpy submit 1275 */ 1276 static struct dma_async_tx_descriptor *pl08x_prep_dma_memcpy( 1277 struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, 1278 size_t len, unsigned long flags) 1279 { 1280 struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); 1281 struct pl08x_driver_data *pl08x = plchan->host; 1282 struct pl08x_txd *txd; 1283 struct pl08x_sg *dsg; 1284 int ret; 1285 1286 txd = pl08x_get_txd(plchan, flags); 1287 if (!txd) { 1288 dev_err(&pl08x->adev->dev, 1289 "%s no memory for descriptor\n", __func__); 1290 return NULL; 1291 } 1292 1293 dsg = kzalloc(sizeof(struct pl08x_sg), GFP_NOWAIT); 1294 if (!dsg) { 1295 pl08x_free_txd(pl08x, txd); 1296 dev_err(&pl08x->adev->dev, "%s no memory for pl080 sg\n", 1297 __func__); 1298 return NULL; 1299 } 1300 list_add_tail(&dsg->node, &txd->dsg_list); 1301 1302 txd->direction = DMA_NONE; 1303 dsg->src_addr = src; 1304 dsg->dst_addr = dest; 1305 dsg->len = len; 1306 1307 /* Set platform data for m2m */ 1308 txd->ccfg |= PL080_FLOW_MEM2MEM << PL080_CONFIG_FLOW_CONTROL_SHIFT; 1309 txd->cctl = pl08x->pd->memcpy_channel.cctl & 1310 ~(PL080_CONTROL_DST_AHB2 | PL080_CONTROL_SRC_AHB2); 1311 1312 /* Both to be incremented or the code will break */ 1313 txd->cctl |= PL080_CONTROL_SRC_INCR | PL080_CONTROL_DST_INCR; 1314 1315 if (pl08x->vd->dualmaster) 1316 txd->cctl |= pl08x_select_bus(pl08x->mem_buses, 1317 pl08x->mem_buses); 1318 1319 ret = pl08x_prep_channel_resources(plchan, txd); 1320 if (ret) 1321 return NULL; 1322 1323 return &txd->tx; 1324 } 1325 1326 static struct dma_async_tx_descriptor *pl08x_prep_slave_sg( 1327 struct dma_chan *chan, struct scatterlist *sgl, 1328 unsigned int sg_len, enum dma_transfer_direction direction, 1329 unsigned long flags) 1330 { 1331 struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); 1332 struct pl08x_driver_data *pl08x = plchan->host; 1333 struct pl08x_txd *txd; 1334 struct pl08x_sg *dsg; 1335 struct scatterlist *sg; 1336 dma_addr_t slave_addr; 1337 int ret, tmp; 1338 1339 dev_dbg(&pl08x->adev->dev, "%s prepare transaction of %d bytes from %s\n", 1340 __func__, sgl->length, plchan->name); 1341 1342 txd = pl08x_get_txd(plchan, flags); 1343 if (!txd) { 1344 dev_err(&pl08x->adev->dev, "%s no txd\n", __func__); 1345 return NULL; 1346 } 1347 1348 if (direction != plchan->runtime_direction) 1349 dev_err(&pl08x->adev->dev, "%s DMA setup does not match " 1350 "the direction configured for the PrimeCell\n", 1351 __func__); 1352 1353 /* 1354 * Set up addresses, the PrimeCell configured address 1355 * will take precedence since this may configure the 1356 * channel target address dynamically at runtime. 1357 */ 1358 txd->direction = direction; 1359 1360 if (direction == DMA_MEM_TO_DEV) { 1361 txd->cctl = plchan->dst_cctl; 1362 slave_addr = plchan->dst_addr; 1363 } else if (direction == DMA_DEV_TO_MEM) { 1364 txd->cctl = plchan->src_cctl; 1365 slave_addr = plchan->src_addr; 1366 } else { 1367 pl08x_free_txd(pl08x, txd); 1368 dev_err(&pl08x->adev->dev, 1369 "%s direction unsupported\n", __func__); 1370 return NULL; 1371 } 1372 1373 if (plchan->cd->device_fc) 1374 tmp = (direction == DMA_MEM_TO_DEV) ? PL080_FLOW_MEM2PER_PER : 1375 PL080_FLOW_PER2MEM_PER; 1376 else 1377 tmp = (direction == DMA_MEM_TO_DEV) ? PL080_FLOW_MEM2PER : 1378 PL080_FLOW_PER2MEM; 1379 1380 txd->ccfg |= tmp << PL080_CONFIG_FLOW_CONTROL_SHIFT; 1381 1382 for_each_sg(sgl, sg, sg_len, tmp) { 1383 dsg = kzalloc(sizeof(struct pl08x_sg), GFP_NOWAIT); 1384 if (!dsg) { 1385 pl08x_free_txd(pl08x, txd); 1386 dev_err(&pl08x->adev->dev, "%s no mem for pl080 sg\n", 1387 __func__); 1388 return NULL; 1389 } 1390 list_add_tail(&dsg->node, &txd->dsg_list); 1391 1392 dsg->len = sg_dma_len(sg); 1393 if (direction == DMA_MEM_TO_DEV) { 1394 dsg->src_addr = sg_phys(sg); 1395 dsg->dst_addr = slave_addr; 1396 } else { 1397 dsg->src_addr = slave_addr; 1398 dsg->dst_addr = sg_phys(sg); 1399 } 1400 } 1401 1402 ret = pl08x_prep_channel_resources(plchan, txd); 1403 if (ret) 1404 return NULL; 1405 1406 return &txd->tx; 1407 } 1408 1409 static int pl08x_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, 1410 unsigned long arg) 1411 { 1412 struct pl08x_dma_chan *plchan = to_pl08x_chan(chan); 1413 struct pl08x_driver_data *pl08x = plchan->host; 1414 unsigned long flags; 1415 int ret = 0; 1416 1417 /* Controls applicable to inactive channels */ 1418 if (cmd == DMA_SLAVE_CONFIG) { 1419 return dma_set_runtime_config(chan, 1420 (struct dma_slave_config *)arg); 1421 } 1422 1423 /* 1424 * Anything succeeds on channels with no physical allocation and 1425 * no queued transfers. 1426 */ 1427 spin_lock_irqsave(&plchan->lock, flags); 1428 if (!plchan->phychan && !plchan->at) { 1429 spin_unlock_irqrestore(&plchan->lock, flags); 1430 return 0; 1431 } 1432 1433 switch (cmd) { 1434 case DMA_TERMINATE_ALL: 1435 plchan->state = PL08X_CHAN_IDLE; 1436 1437 if (plchan->phychan) { 1438 pl08x_terminate_phy_chan(pl08x, plchan->phychan); 1439 1440 /* 1441 * Mark physical channel as free and free any slave 1442 * signal 1443 */ 1444 release_phy_channel(plchan); 1445 } 1446 /* Dequeue jobs and free LLIs */ 1447 if (plchan->at) { 1448 pl08x_free_txd(pl08x, plchan->at); 1449 plchan->at = NULL; 1450 } 1451 /* Dequeue jobs not yet fired as well */ 1452 pl08x_free_txd_list(pl08x, plchan); 1453 break; 1454 case DMA_PAUSE: 1455 pl08x_pause_phy_chan(plchan->phychan); 1456 plchan->state = PL08X_CHAN_PAUSED; 1457 break; 1458 case DMA_RESUME: 1459 pl08x_resume_phy_chan(plchan->phychan); 1460 plchan->state = PL08X_CHAN_RUNNING; 1461 break; 1462 default: 1463 /* Unknown command */ 1464 ret = -ENXIO; 1465 break; 1466 } 1467 1468 spin_unlock_irqrestore(&plchan->lock, flags); 1469 1470 return ret; 1471 } 1472 1473 bool pl08x_filter_id(struct dma_chan *chan, void *chan_id) 1474 { 1475 struct pl08x_dma_chan *plchan; 1476 char *name = chan_id; 1477 1478 /* Reject channels for devices not bound to this driver */ 1479 if (chan->device->dev->driver != &pl08x_amba_driver.drv) 1480 return false; 1481 1482 plchan = to_pl08x_chan(chan); 1483 1484 /* Check that the channel is not taken! */ 1485 if (!strcmp(plchan->name, name)) 1486 return true; 1487 1488 return false; 1489 } 1490 1491 /* 1492 * Just check that the device is there and active 1493 * TODO: turn this bit on/off depending on the number of physical channels 1494 * actually used, if it is zero... well shut it off. That will save some 1495 * power. Cut the clock at the same time. 1496 */ 1497 static void pl08x_ensure_on(struct pl08x_driver_data *pl08x) 1498 { 1499 writel(PL080_CONFIG_ENABLE, pl08x->base + PL080_CONFIG); 1500 } 1501 1502 static void pl08x_unmap_buffers(struct pl08x_txd *txd) 1503 { 1504 struct device *dev = txd->tx.chan->device->dev; 1505 struct pl08x_sg *dsg; 1506 1507 if (!(txd->tx.flags & DMA_COMPL_SKIP_SRC_UNMAP)) { 1508 if (txd->tx.flags & DMA_COMPL_SRC_UNMAP_SINGLE) 1509 list_for_each_entry(dsg, &txd->dsg_list, node) 1510 dma_unmap_single(dev, dsg->src_addr, dsg->len, 1511 DMA_TO_DEVICE); 1512 else { 1513 list_for_each_entry(dsg, &txd->dsg_list, node) 1514 dma_unmap_page(dev, dsg->src_addr, dsg->len, 1515 DMA_TO_DEVICE); 1516 } 1517 } 1518 if (!(txd->tx.flags & DMA_COMPL_SKIP_DEST_UNMAP)) { 1519 if (txd->tx.flags & DMA_COMPL_DEST_UNMAP_SINGLE) 1520 list_for_each_entry(dsg, &txd->dsg_list, node) 1521 dma_unmap_single(dev, dsg->dst_addr, dsg->len, 1522 DMA_FROM_DEVICE); 1523 else 1524 list_for_each_entry(dsg, &txd->dsg_list, node) 1525 dma_unmap_page(dev, dsg->dst_addr, dsg->len, 1526 DMA_FROM_DEVICE); 1527 } 1528 } 1529 1530 static void pl08x_tasklet(unsigned long data) 1531 { 1532 struct pl08x_dma_chan *plchan = (struct pl08x_dma_chan *) data; 1533 struct pl08x_driver_data *pl08x = plchan->host; 1534 struct pl08x_txd *txd; 1535 unsigned long flags; 1536 1537 spin_lock_irqsave(&plchan->lock, flags); 1538 1539 txd = plchan->at; 1540 plchan->at = NULL; 1541 1542 if (txd) { 1543 /* Update last completed */ 1544 plchan->lc = txd->tx.cookie; 1545 } 1546 1547 /* If a new descriptor is queued, set it up plchan->at is NULL here */ 1548 if (!list_empty(&plchan->pend_list)) { 1549 struct pl08x_txd *next; 1550 1551 next = list_first_entry(&plchan->pend_list, 1552 struct pl08x_txd, 1553 node); 1554 list_del(&next->node); 1555 1556 pl08x_start_txd(plchan, next); 1557 } else if (plchan->phychan_hold) { 1558 /* 1559 * This channel is still in use - we have a new txd being 1560 * prepared and will soon be queued. Don't give up the 1561 * physical channel. 1562 */ 1563 } else { 1564 struct pl08x_dma_chan *waiting = NULL; 1565 1566 /* 1567 * No more jobs, so free up the physical channel 1568 * Free any allocated signal on slave transfers too 1569 */ 1570 release_phy_channel(plchan); 1571 plchan->state = PL08X_CHAN_IDLE; 1572 1573 /* 1574 * And NOW before anyone else can grab that free:d up 1575 * physical channel, see if there is some memcpy pending 1576 * that seriously needs to start because of being stacked 1577 * up while we were choking the physical channels with data. 1578 */ 1579 list_for_each_entry(waiting, &pl08x->memcpy.channels, 1580 chan.device_node) { 1581 if (waiting->state == PL08X_CHAN_WAITING && 1582 waiting->waiting != NULL) { 1583 int ret; 1584 1585 /* This should REALLY not fail now */ 1586 ret = prep_phy_channel(waiting, 1587 waiting->waiting); 1588 BUG_ON(ret); 1589 waiting->phychan_hold--; 1590 waiting->state = PL08X_CHAN_RUNNING; 1591 waiting->waiting = NULL; 1592 pl08x_issue_pending(&waiting->chan); 1593 break; 1594 } 1595 } 1596 } 1597 1598 spin_unlock_irqrestore(&plchan->lock, flags); 1599 1600 if (txd) { 1601 dma_async_tx_callback callback = txd->tx.callback; 1602 void *callback_param = txd->tx.callback_param; 1603 1604 /* Don't try to unmap buffers on slave channels */ 1605 if (!plchan->slave) 1606 pl08x_unmap_buffers(txd); 1607 1608 /* Free the descriptor */ 1609 spin_lock_irqsave(&plchan->lock, flags); 1610 pl08x_free_txd(pl08x, txd); 1611 spin_unlock_irqrestore(&plchan->lock, flags); 1612 1613 /* Callback to signal completion */ 1614 if (callback) 1615 callback(callback_param); 1616 } 1617 } 1618 1619 static irqreturn_t pl08x_irq(int irq, void *dev) 1620 { 1621 struct pl08x_driver_data *pl08x = dev; 1622 u32 mask = 0, err, tc, i; 1623 1624 /* check & clear - ERR & TC interrupts */ 1625 err = readl(pl08x->base + PL080_ERR_STATUS); 1626 if (err) { 1627 dev_err(&pl08x->adev->dev, "%s error interrupt, register value 0x%08x\n", 1628 __func__, err); 1629 writel(err, pl08x->base + PL080_ERR_CLEAR); 1630 } 1631 tc = readl(pl08x->base + PL080_INT_STATUS); 1632 if (tc) 1633 writel(tc, pl08x->base + PL080_TC_CLEAR); 1634 1635 if (!err && !tc) 1636 return IRQ_NONE; 1637 1638 for (i = 0; i < pl08x->vd->channels; i++) { 1639 if (((1 << i) & err) || ((1 << i) & tc)) { 1640 /* Locate physical channel */ 1641 struct pl08x_phy_chan *phychan = &pl08x->phy_chans[i]; 1642 struct pl08x_dma_chan *plchan = phychan->serving; 1643 1644 if (!plchan) { 1645 dev_err(&pl08x->adev->dev, 1646 "%s Error TC interrupt on unused channel: 0x%08x\n", 1647 __func__, i); 1648 continue; 1649 } 1650 1651 /* Schedule tasklet on this channel */ 1652 tasklet_schedule(&plchan->tasklet); 1653 mask |= (1 << i); 1654 } 1655 } 1656 1657 return mask ? IRQ_HANDLED : IRQ_NONE; 1658 } 1659 1660 static void pl08x_dma_slave_init(struct pl08x_dma_chan *chan) 1661 { 1662 u32 cctl = pl08x_cctl(chan->cd->cctl); 1663 1664 chan->slave = true; 1665 chan->name = chan->cd->bus_id; 1666 chan->src_addr = chan->cd->addr; 1667 chan->dst_addr = chan->cd->addr; 1668 chan->src_cctl = cctl | PL080_CONTROL_DST_INCR | 1669 pl08x_select_bus(chan->cd->periph_buses, chan->host->mem_buses); 1670 chan->dst_cctl = cctl | PL080_CONTROL_SRC_INCR | 1671 pl08x_select_bus(chan->host->mem_buses, chan->cd->periph_buses); 1672 } 1673 1674 /* 1675 * Initialise the DMAC memcpy/slave channels. 1676 * Make a local wrapper to hold required data 1677 */ 1678 static int pl08x_dma_init_virtual_channels(struct pl08x_driver_data *pl08x, 1679 struct dma_device *dmadev, unsigned int channels, bool slave) 1680 { 1681 struct pl08x_dma_chan *chan; 1682 int i; 1683 1684 INIT_LIST_HEAD(&dmadev->channels); 1685 1686 /* 1687 * Register as many many memcpy as we have physical channels, 1688 * we won't always be able to use all but the code will have 1689 * to cope with that situation. 1690 */ 1691 for (i = 0; i < channels; i++) { 1692 chan = kzalloc(sizeof(*chan), GFP_KERNEL); 1693 if (!chan) { 1694 dev_err(&pl08x->adev->dev, 1695 "%s no memory for channel\n", __func__); 1696 return -ENOMEM; 1697 } 1698 1699 chan->host = pl08x; 1700 chan->state = PL08X_CHAN_IDLE; 1701 1702 if (slave) { 1703 chan->cd = &pl08x->pd->slave_channels[i]; 1704 pl08x_dma_slave_init(chan); 1705 } else { 1706 chan->cd = &pl08x->pd->memcpy_channel; 1707 chan->name = kasprintf(GFP_KERNEL, "memcpy%d", i); 1708 if (!chan->name) { 1709 kfree(chan); 1710 return -ENOMEM; 1711 } 1712 } 1713 if (chan->cd->circular_buffer) { 1714 dev_err(&pl08x->adev->dev, 1715 "channel %s: circular buffers not supported\n", 1716 chan->name); 1717 kfree(chan); 1718 continue; 1719 } 1720 dev_dbg(&pl08x->adev->dev, 1721 "initialize virtual channel \"%s\"\n", 1722 chan->name); 1723 1724 chan->chan.device = dmadev; 1725 chan->chan.cookie = 0; 1726 chan->lc = 0; 1727 1728 spin_lock_init(&chan->lock); 1729 INIT_LIST_HEAD(&chan->pend_list); 1730 tasklet_init(&chan->tasklet, pl08x_tasklet, 1731 (unsigned long) chan); 1732 1733 list_add_tail(&chan->chan.device_node, &dmadev->channels); 1734 } 1735 dev_info(&pl08x->adev->dev, "initialized %d virtual %s channels\n", 1736 i, slave ? "slave" : "memcpy"); 1737 return i; 1738 } 1739 1740 static void pl08x_free_virtual_channels(struct dma_device *dmadev) 1741 { 1742 struct pl08x_dma_chan *chan = NULL; 1743 struct pl08x_dma_chan *next; 1744 1745 list_for_each_entry_safe(chan, 1746 next, &dmadev->channels, chan.device_node) { 1747 list_del(&chan->chan.device_node); 1748 kfree(chan); 1749 } 1750 } 1751 1752 #ifdef CONFIG_DEBUG_FS 1753 static const char *pl08x_state_str(enum pl08x_dma_chan_state state) 1754 { 1755 switch (state) { 1756 case PL08X_CHAN_IDLE: 1757 return "idle"; 1758 case PL08X_CHAN_RUNNING: 1759 return "running"; 1760 case PL08X_CHAN_PAUSED: 1761 return "paused"; 1762 case PL08X_CHAN_WAITING: 1763 return "waiting"; 1764 default: 1765 break; 1766 } 1767 return "UNKNOWN STATE"; 1768 } 1769 1770 static int pl08x_debugfs_show(struct seq_file *s, void *data) 1771 { 1772 struct pl08x_driver_data *pl08x = s->private; 1773 struct pl08x_dma_chan *chan; 1774 struct pl08x_phy_chan *ch; 1775 unsigned long flags; 1776 int i; 1777 1778 seq_printf(s, "PL08x physical channels:\n"); 1779 seq_printf(s, "CHANNEL:\tUSER:\n"); 1780 seq_printf(s, "--------\t-----\n"); 1781 for (i = 0; i < pl08x->vd->channels; i++) { 1782 struct pl08x_dma_chan *virt_chan; 1783 1784 ch = &pl08x->phy_chans[i]; 1785 1786 spin_lock_irqsave(&ch->lock, flags); 1787 virt_chan = ch->serving; 1788 1789 seq_printf(s, "%d\t\t%s\n", 1790 ch->id, virt_chan ? virt_chan->name : "(none)"); 1791 1792 spin_unlock_irqrestore(&ch->lock, flags); 1793 } 1794 1795 seq_printf(s, "\nPL08x virtual memcpy channels:\n"); 1796 seq_printf(s, "CHANNEL:\tSTATE:\n"); 1797 seq_printf(s, "--------\t------\n"); 1798 list_for_each_entry(chan, &pl08x->memcpy.channels, chan.device_node) { 1799 seq_printf(s, "%s\t\t%s\n", chan->name, 1800 pl08x_state_str(chan->state)); 1801 } 1802 1803 seq_printf(s, "\nPL08x virtual slave channels:\n"); 1804 seq_printf(s, "CHANNEL:\tSTATE:\n"); 1805 seq_printf(s, "--------\t------\n"); 1806 list_for_each_entry(chan, &pl08x->slave.channels, chan.device_node) { 1807 seq_printf(s, "%s\t\t%s\n", chan->name, 1808 pl08x_state_str(chan->state)); 1809 } 1810 1811 return 0; 1812 } 1813 1814 static int pl08x_debugfs_open(struct inode *inode, struct file *file) 1815 { 1816 return single_open(file, pl08x_debugfs_show, inode->i_private); 1817 } 1818 1819 static const struct file_operations pl08x_debugfs_operations = { 1820 .open = pl08x_debugfs_open, 1821 .read = seq_read, 1822 .llseek = seq_lseek, 1823 .release = single_release, 1824 }; 1825 1826 static void init_pl08x_debugfs(struct pl08x_driver_data *pl08x) 1827 { 1828 /* Expose a simple debugfs interface to view all clocks */ 1829 (void) debugfs_create_file(dev_name(&pl08x->adev->dev), 1830 S_IFREG | S_IRUGO, NULL, pl08x, 1831 &pl08x_debugfs_operations); 1832 } 1833 1834 #else 1835 static inline void init_pl08x_debugfs(struct pl08x_driver_data *pl08x) 1836 { 1837 } 1838 #endif 1839 1840 static int pl08x_probe(struct amba_device *adev, const struct amba_id *id) 1841 { 1842 struct pl08x_driver_data *pl08x; 1843 const struct vendor_data *vd = id->data; 1844 int ret = 0; 1845 int i; 1846 1847 ret = amba_request_regions(adev, NULL); 1848 if (ret) 1849 return ret; 1850 1851 /* Create the driver state holder */ 1852 pl08x = kzalloc(sizeof(*pl08x), GFP_KERNEL); 1853 if (!pl08x) { 1854 ret = -ENOMEM; 1855 goto out_no_pl08x; 1856 } 1857 1858 pm_runtime_set_active(&adev->dev); 1859 pm_runtime_enable(&adev->dev); 1860 1861 /* Initialize memcpy engine */ 1862 dma_cap_set(DMA_MEMCPY, pl08x->memcpy.cap_mask); 1863 pl08x->memcpy.dev = &adev->dev; 1864 pl08x->memcpy.device_alloc_chan_resources = pl08x_alloc_chan_resources; 1865 pl08x->memcpy.device_free_chan_resources = pl08x_free_chan_resources; 1866 pl08x->memcpy.device_prep_dma_memcpy = pl08x_prep_dma_memcpy; 1867 pl08x->memcpy.device_prep_dma_interrupt = pl08x_prep_dma_interrupt; 1868 pl08x->memcpy.device_tx_status = pl08x_dma_tx_status; 1869 pl08x->memcpy.device_issue_pending = pl08x_issue_pending; 1870 pl08x->memcpy.device_control = pl08x_control; 1871 1872 /* Initialize slave engine */ 1873 dma_cap_set(DMA_SLAVE, pl08x->slave.cap_mask); 1874 pl08x->slave.dev = &adev->dev; 1875 pl08x->slave.device_alloc_chan_resources = pl08x_alloc_chan_resources; 1876 pl08x->slave.device_free_chan_resources = pl08x_free_chan_resources; 1877 pl08x->slave.device_prep_dma_interrupt = pl08x_prep_dma_interrupt; 1878 pl08x->slave.device_tx_status = pl08x_dma_tx_status; 1879 pl08x->slave.device_issue_pending = pl08x_issue_pending; 1880 pl08x->slave.device_prep_slave_sg = pl08x_prep_slave_sg; 1881 pl08x->slave.device_control = pl08x_control; 1882 1883 /* Get the platform data */ 1884 pl08x->pd = dev_get_platdata(&adev->dev); 1885 if (!pl08x->pd) { 1886 dev_err(&adev->dev, "no platform data supplied\n"); 1887 goto out_no_platdata; 1888 } 1889 1890 /* Assign useful pointers to the driver state */ 1891 pl08x->adev = adev; 1892 pl08x->vd = vd; 1893 1894 /* By default, AHB1 only. If dualmaster, from platform */ 1895 pl08x->lli_buses = PL08X_AHB1; 1896 pl08x->mem_buses = PL08X_AHB1; 1897 if (pl08x->vd->dualmaster) { 1898 pl08x->lli_buses = pl08x->pd->lli_buses; 1899 pl08x->mem_buses = pl08x->pd->mem_buses; 1900 } 1901 1902 /* A DMA memory pool for LLIs, align on 1-byte boundary */ 1903 pl08x->pool = dma_pool_create(DRIVER_NAME, &pl08x->adev->dev, 1904 PL08X_LLI_TSFR_SIZE, PL08X_ALIGN, 0); 1905 if (!pl08x->pool) { 1906 ret = -ENOMEM; 1907 goto out_no_lli_pool; 1908 } 1909 1910 spin_lock_init(&pl08x->lock); 1911 1912 pl08x->base = ioremap(adev->res.start, resource_size(&adev->res)); 1913 if (!pl08x->base) { 1914 ret = -ENOMEM; 1915 goto out_no_ioremap; 1916 } 1917 1918 /* Turn on the PL08x */ 1919 pl08x_ensure_on(pl08x); 1920 1921 /* Attach the interrupt handler */ 1922 writel(0x000000FF, pl08x->base + PL080_ERR_CLEAR); 1923 writel(0x000000FF, pl08x->base + PL080_TC_CLEAR); 1924 1925 ret = request_irq(adev->irq[0], pl08x_irq, IRQF_DISABLED, 1926 DRIVER_NAME, pl08x); 1927 if (ret) { 1928 dev_err(&adev->dev, "%s failed to request interrupt %d\n", 1929 __func__, adev->irq[0]); 1930 goto out_no_irq; 1931 } 1932 1933 /* Initialize physical channels */ 1934 pl08x->phy_chans = kmalloc((vd->channels * sizeof(*pl08x->phy_chans)), 1935 GFP_KERNEL); 1936 if (!pl08x->phy_chans) { 1937 dev_err(&adev->dev, "%s failed to allocate " 1938 "physical channel holders\n", 1939 __func__); 1940 goto out_no_phychans; 1941 } 1942 1943 for (i = 0; i < vd->channels; i++) { 1944 struct pl08x_phy_chan *ch = &pl08x->phy_chans[i]; 1945 1946 ch->id = i; 1947 ch->base = pl08x->base + PL080_Cx_BASE(i); 1948 spin_lock_init(&ch->lock); 1949 ch->serving = NULL; 1950 ch->signal = -1; 1951 dev_dbg(&adev->dev, "physical channel %d is %s\n", 1952 i, pl08x_phy_channel_busy(ch) ? "BUSY" : "FREE"); 1953 } 1954 1955 /* Register as many memcpy channels as there are physical channels */ 1956 ret = pl08x_dma_init_virtual_channels(pl08x, &pl08x->memcpy, 1957 pl08x->vd->channels, false); 1958 if (ret <= 0) { 1959 dev_warn(&pl08x->adev->dev, 1960 "%s failed to enumerate memcpy channels - %d\n", 1961 __func__, ret); 1962 goto out_no_memcpy; 1963 } 1964 pl08x->memcpy.chancnt = ret; 1965 1966 /* Register slave channels */ 1967 ret = pl08x_dma_init_virtual_channels(pl08x, &pl08x->slave, 1968 pl08x->pd->num_slave_channels, true); 1969 if (ret <= 0) { 1970 dev_warn(&pl08x->adev->dev, 1971 "%s failed to enumerate slave channels - %d\n", 1972 __func__, ret); 1973 goto out_no_slave; 1974 } 1975 pl08x->slave.chancnt = ret; 1976 1977 ret = dma_async_device_register(&pl08x->memcpy); 1978 if (ret) { 1979 dev_warn(&pl08x->adev->dev, 1980 "%s failed to register memcpy as an async device - %d\n", 1981 __func__, ret); 1982 goto out_no_memcpy_reg; 1983 } 1984 1985 ret = dma_async_device_register(&pl08x->slave); 1986 if (ret) { 1987 dev_warn(&pl08x->adev->dev, 1988 "%s failed to register slave as an async device - %d\n", 1989 __func__, ret); 1990 goto out_no_slave_reg; 1991 } 1992 1993 amba_set_drvdata(adev, pl08x); 1994 init_pl08x_debugfs(pl08x); 1995 dev_info(&pl08x->adev->dev, "DMA: PL%03x rev%u at 0x%08llx irq %d\n", 1996 amba_part(adev), amba_rev(adev), 1997 (unsigned long long)adev->res.start, adev->irq[0]); 1998 1999 pm_runtime_put(&adev->dev); 2000 return 0; 2001 2002 out_no_slave_reg: 2003 dma_async_device_unregister(&pl08x->memcpy); 2004 out_no_memcpy_reg: 2005 pl08x_free_virtual_channels(&pl08x->slave); 2006 out_no_slave: 2007 pl08x_free_virtual_channels(&pl08x->memcpy); 2008 out_no_memcpy: 2009 kfree(pl08x->phy_chans); 2010 out_no_phychans: 2011 free_irq(adev->irq[0], pl08x); 2012 out_no_irq: 2013 iounmap(pl08x->base); 2014 out_no_ioremap: 2015 dma_pool_destroy(pl08x->pool); 2016 out_no_lli_pool: 2017 out_no_platdata: 2018 pm_runtime_put(&adev->dev); 2019 pm_runtime_disable(&adev->dev); 2020 2021 kfree(pl08x); 2022 out_no_pl08x: 2023 amba_release_regions(adev); 2024 return ret; 2025 } 2026 2027 /* PL080 has 8 channels and the PL080 have just 2 */ 2028 static struct vendor_data vendor_pl080 = { 2029 .channels = 8, 2030 .dualmaster = true, 2031 }; 2032 2033 static struct vendor_data vendor_pl081 = { 2034 .channels = 2, 2035 .dualmaster = false, 2036 }; 2037 2038 static struct amba_id pl08x_ids[] = { 2039 /* PL080 */ 2040 { 2041 .id = 0x00041080, 2042 .mask = 0x000fffff, 2043 .data = &vendor_pl080, 2044 }, 2045 /* PL081 */ 2046 { 2047 .id = 0x00041081, 2048 .mask = 0x000fffff, 2049 .data = &vendor_pl081, 2050 }, 2051 /* Nomadik 8815 PL080 variant */ 2052 { 2053 .id = 0x00280880, 2054 .mask = 0x00ffffff, 2055 .data = &vendor_pl080, 2056 }, 2057 { 0, 0 }, 2058 }; 2059 2060 MODULE_DEVICE_TABLE(amba, pl08x_ids); 2061 2062 static struct amba_driver pl08x_amba_driver = { 2063 .drv.name = DRIVER_NAME, 2064 .id_table = pl08x_ids, 2065 .probe = pl08x_probe, 2066 }; 2067 2068 static int __init pl08x_init(void) 2069 { 2070 int retval; 2071 retval = amba_driver_register(&pl08x_amba_driver); 2072 if (retval) 2073 printk(KERN_WARNING DRIVER_NAME 2074 "failed to register as an AMBA device (%d)\n", 2075 retval); 2076 return retval; 2077 } 2078 subsys_initcall(pl08x_init); 2079