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