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