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