Revert "usbtmc: convert to devm_kzalloc"
[cascardo/linux.git] / drivers / dma / dw / core.c
1 /*
2  * Core driver for the Synopsys DesignWare DMA Controller
3  *
4  * Copyright (C) 2007-2008 Atmel Corporation
5  * Copyright (C) 2010-2011 ST Microelectronics
6  * Copyright (C) 2013 Intel Corporation
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #include <linux/bitops.h>
14 #include <linux/delay.h>
15 #include <linux/dmaengine.h>
16 #include <linux/dma-mapping.h>
17 #include <linux/dmapool.h>
18 #include <linux/err.h>
19 #include <linux/init.h>
20 #include <linux/interrupt.h>
21 #include <linux/io.h>
22 #include <linux/mm.h>
23 #include <linux/module.h>
24 #include <linux/slab.h>
25 #include <linux/pm_runtime.h>
26
27 #include "../dmaengine.h"
28 #include "internal.h"
29
30 /*
31  * This supports the Synopsys "DesignWare AHB Central DMA Controller",
32  * (DW_ahb_dmac) which is used with various AMBA 2.0 systems (not all
33  * of which use ARM any more).  See the "Databook" from Synopsys for
34  * information beyond what licensees probably provide.
35  *
36  * The driver has been tested with the Atmel AT32AP7000, which does not
37  * support descriptor writeback.
38  */
39
40 #define DWC_DEFAULT_CTLLO(_chan) ({                             \
41                 struct dw_dma_chan *_dwc = to_dw_dma_chan(_chan);       \
42                 struct dma_slave_config *_sconfig = &_dwc->dma_sconfig; \
43                 bool _is_slave = is_slave_direction(_dwc->direction);   \
44                 u8 _smsize = _is_slave ? _sconfig->src_maxburst :       \
45                         DW_DMA_MSIZE_16;                        \
46                 u8 _dmsize = _is_slave ? _sconfig->dst_maxburst :       \
47                         DW_DMA_MSIZE_16;                        \
48                 u8 _dms = (_dwc->direction == DMA_MEM_TO_DEV) ?         \
49                         _dwc->p_master : _dwc->m_master;                \
50                 u8 _sms = (_dwc->direction == DMA_DEV_TO_MEM) ?         \
51                         _dwc->p_master : _dwc->m_master;                \
52                                                                 \
53                 (DWC_CTLL_DST_MSIZE(_dmsize)                    \
54                  | DWC_CTLL_SRC_MSIZE(_smsize)                  \
55                  | DWC_CTLL_LLP_D_EN                            \
56                  | DWC_CTLL_LLP_S_EN                            \
57                  | DWC_CTLL_DMS(_dms)                           \
58                  | DWC_CTLL_SMS(_sms));                         \
59         })
60
61 /* The set of bus widths supported by the DMA controller */
62 #define DW_DMA_BUSWIDTHS                          \
63         BIT(DMA_SLAVE_BUSWIDTH_UNDEFINED)       | \
64         BIT(DMA_SLAVE_BUSWIDTH_1_BYTE)          | \
65         BIT(DMA_SLAVE_BUSWIDTH_2_BYTES)         | \
66         BIT(DMA_SLAVE_BUSWIDTH_4_BYTES)
67
68 /*----------------------------------------------------------------------*/
69
70 static struct device *chan2dev(struct dma_chan *chan)
71 {
72         return &chan->dev->device;
73 }
74
75 static struct dw_desc *dwc_first_active(struct dw_dma_chan *dwc)
76 {
77         return to_dw_desc(dwc->active_list.next);
78 }
79
80 static dma_cookie_t dwc_tx_submit(struct dma_async_tx_descriptor *tx)
81 {
82         struct dw_desc          *desc = txd_to_dw_desc(tx);
83         struct dw_dma_chan      *dwc = to_dw_dma_chan(tx->chan);
84         dma_cookie_t            cookie;
85         unsigned long           flags;
86
87         spin_lock_irqsave(&dwc->lock, flags);
88         cookie = dma_cookie_assign(tx);
89
90         /*
91          * REVISIT: We should attempt to chain as many descriptors as
92          * possible, perhaps even appending to those already submitted
93          * for DMA. But this is hard to do in a race-free manner.
94          */
95
96         list_add_tail(&desc->desc_node, &dwc->queue);
97         spin_unlock_irqrestore(&dwc->lock, flags);
98         dev_vdbg(chan2dev(tx->chan), "%s: queued %u\n",
99                  __func__, desc->txd.cookie);
100
101         return cookie;
102 }
103
104 static struct dw_desc *dwc_desc_get(struct dw_dma_chan *dwc)
105 {
106         struct dw_dma *dw = to_dw_dma(dwc->chan.device);
107         struct dw_desc *desc;
108         dma_addr_t phys;
109
110         desc = dma_pool_zalloc(dw->desc_pool, GFP_ATOMIC, &phys);
111         if (!desc)
112                 return NULL;
113
114         dwc->descs_allocated++;
115         INIT_LIST_HEAD(&desc->tx_list);
116         dma_async_tx_descriptor_init(&desc->txd, &dwc->chan);
117         desc->txd.tx_submit = dwc_tx_submit;
118         desc->txd.flags = DMA_CTRL_ACK;
119         desc->txd.phys = phys;
120         return desc;
121 }
122
123 static void dwc_desc_put(struct dw_dma_chan *dwc, struct dw_desc *desc)
124 {
125         struct dw_dma *dw = to_dw_dma(dwc->chan.device);
126         struct dw_desc *child, *_next;
127
128         if (unlikely(!desc))
129                 return;
130
131         list_for_each_entry_safe(child, _next, &desc->tx_list, desc_node) {
132                 list_del(&child->desc_node);
133                 dma_pool_free(dw->desc_pool, child, child->txd.phys);
134                 dwc->descs_allocated--;
135         }
136
137         dma_pool_free(dw->desc_pool, desc, desc->txd.phys);
138         dwc->descs_allocated--;
139 }
140
141 static void dwc_initialize(struct dw_dma_chan *dwc)
142 {
143         struct dw_dma *dw = to_dw_dma(dwc->chan.device);
144         u32 cfghi = DWC_CFGH_FIFO_MODE;
145         u32 cfglo = DWC_CFGL_CH_PRIOR(dwc->priority);
146
147         if (test_bit(DW_DMA_IS_INITIALIZED, &dwc->flags))
148                 return;
149
150         cfghi |= DWC_CFGH_DST_PER(dwc->dst_id);
151         cfghi |= DWC_CFGH_SRC_PER(dwc->src_id);
152
153         channel_writel(dwc, CFG_LO, cfglo);
154         channel_writel(dwc, CFG_HI, cfghi);
155
156         /* Enable interrupts */
157         channel_set_bit(dw, MASK.XFER, dwc->mask);
158         channel_set_bit(dw, MASK.ERROR, dwc->mask);
159
160         set_bit(DW_DMA_IS_INITIALIZED, &dwc->flags);
161 }
162
163 /*----------------------------------------------------------------------*/
164
165 static inline void dwc_dump_chan_regs(struct dw_dma_chan *dwc)
166 {
167         dev_err(chan2dev(&dwc->chan),
168                 "  SAR: 0x%x DAR: 0x%x LLP: 0x%x CTL: 0x%x:%08x\n",
169                 channel_readl(dwc, SAR),
170                 channel_readl(dwc, DAR),
171                 channel_readl(dwc, LLP),
172                 channel_readl(dwc, CTL_HI),
173                 channel_readl(dwc, CTL_LO));
174 }
175
176 static inline void dwc_chan_disable(struct dw_dma *dw, struct dw_dma_chan *dwc)
177 {
178         channel_clear_bit(dw, CH_EN, dwc->mask);
179         while (dma_readl(dw, CH_EN) & dwc->mask)
180                 cpu_relax();
181 }
182
183 /*----------------------------------------------------------------------*/
184
185 /* Perform single block transfer */
186 static inline void dwc_do_single_block(struct dw_dma_chan *dwc,
187                                        struct dw_desc *desc)
188 {
189         struct dw_dma   *dw = to_dw_dma(dwc->chan.device);
190         u32             ctllo;
191
192         /*
193          * Software emulation of LLP mode relies on interrupts to continue
194          * multi block transfer.
195          */
196         ctllo = lli_read(desc, ctllo) | DWC_CTLL_INT_EN;
197
198         channel_writel(dwc, SAR, lli_read(desc, sar));
199         channel_writel(dwc, DAR, lli_read(desc, dar));
200         channel_writel(dwc, CTL_LO, ctllo);
201         channel_writel(dwc, CTL_HI, lli_read(desc, ctlhi));
202         channel_set_bit(dw, CH_EN, dwc->mask);
203
204         /* Move pointer to next descriptor */
205         dwc->tx_node_active = dwc->tx_node_active->next;
206 }
207
208 /* Called with dwc->lock held and bh disabled */
209 static void dwc_dostart(struct dw_dma_chan *dwc, struct dw_desc *first)
210 {
211         struct dw_dma   *dw = to_dw_dma(dwc->chan.device);
212         u8              lms = DWC_LLP_LMS(dwc->m_master);
213         unsigned long   was_soft_llp;
214
215         /* ASSERT:  channel is idle */
216         if (dma_readl(dw, CH_EN) & dwc->mask) {
217                 dev_err(chan2dev(&dwc->chan),
218                         "%s: BUG: Attempted to start non-idle channel\n",
219                         __func__);
220                 dwc_dump_chan_regs(dwc);
221
222                 /* The tasklet will hopefully advance the queue... */
223                 return;
224         }
225
226         if (dwc->nollp) {
227                 was_soft_llp = test_and_set_bit(DW_DMA_IS_SOFT_LLP,
228                                                 &dwc->flags);
229                 if (was_soft_llp) {
230                         dev_err(chan2dev(&dwc->chan),
231                                 "BUG: Attempted to start new LLP transfer inside ongoing one\n");
232                         return;
233                 }
234
235                 dwc_initialize(dwc);
236
237                 first->residue = first->total_len;
238                 dwc->tx_node_active = &first->tx_list;
239
240                 /* Submit first block */
241                 dwc_do_single_block(dwc, first);
242
243                 return;
244         }
245
246         dwc_initialize(dwc);
247
248         channel_writel(dwc, LLP, first->txd.phys | lms);
249         channel_writel(dwc, CTL_LO, DWC_CTLL_LLP_D_EN | DWC_CTLL_LLP_S_EN);
250         channel_writel(dwc, CTL_HI, 0);
251         channel_set_bit(dw, CH_EN, dwc->mask);
252 }
253
254 static void dwc_dostart_first_queued(struct dw_dma_chan *dwc)
255 {
256         struct dw_desc *desc;
257
258         if (list_empty(&dwc->queue))
259                 return;
260
261         list_move(dwc->queue.next, &dwc->active_list);
262         desc = dwc_first_active(dwc);
263         dev_vdbg(chan2dev(&dwc->chan), "%s: started %u\n", __func__, desc->txd.cookie);
264         dwc_dostart(dwc, desc);
265 }
266
267 /*----------------------------------------------------------------------*/
268
269 static void
270 dwc_descriptor_complete(struct dw_dma_chan *dwc, struct dw_desc *desc,
271                 bool callback_required)
272 {
273         dma_async_tx_callback           callback = NULL;
274         void                            *param = NULL;
275         struct dma_async_tx_descriptor  *txd = &desc->txd;
276         struct dw_desc                  *child;
277         unsigned long                   flags;
278
279         dev_vdbg(chan2dev(&dwc->chan), "descriptor %u complete\n", txd->cookie);
280
281         spin_lock_irqsave(&dwc->lock, flags);
282         dma_cookie_complete(txd);
283         if (callback_required) {
284                 callback = txd->callback;
285                 param = txd->callback_param;
286         }
287
288         /* async_tx_ack */
289         list_for_each_entry(child, &desc->tx_list, desc_node)
290                 async_tx_ack(&child->txd);
291         async_tx_ack(&desc->txd);
292         dwc_desc_put(dwc, desc);
293         spin_unlock_irqrestore(&dwc->lock, flags);
294
295         if (callback)
296                 callback(param);
297 }
298
299 static void dwc_complete_all(struct dw_dma *dw, struct dw_dma_chan *dwc)
300 {
301         struct dw_desc *desc, *_desc;
302         LIST_HEAD(list);
303         unsigned long flags;
304
305         spin_lock_irqsave(&dwc->lock, flags);
306         if (dma_readl(dw, CH_EN) & dwc->mask) {
307                 dev_err(chan2dev(&dwc->chan),
308                         "BUG: XFER bit set, but channel not idle!\n");
309
310                 /* Try to continue after resetting the channel... */
311                 dwc_chan_disable(dw, dwc);
312         }
313
314         /*
315          * Submit queued descriptors ASAP, i.e. before we go through
316          * the completed ones.
317          */
318         list_splice_init(&dwc->active_list, &list);
319         dwc_dostart_first_queued(dwc);
320
321         spin_unlock_irqrestore(&dwc->lock, flags);
322
323         list_for_each_entry_safe(desc, _desc, &list, desc_node)
324                 dwc_descriptor_complete(dwc, desc, true);
325 }
326
327 /* Returns how many bytes were already received from source */
328 static inline u32 dwc_get_sent(struct dw_dma_chan *dwc)
329 {
330         u32 ctlhi = channel_readl(dwc, CTL_HI);
331         u32 ctllo = channel_readl(dwc, CTL_LO);
332
333         return (ctlhi & DWC_CTLH_BLOCK_TS_MASK) * (1 << (ctllo >> 4 & 7));
334 }
335
336 static void dwc_scan_descriptors(struct dw_dma *dw, struct dw_dma_chan *dwc)
337 {
338         dma_addr_t llp;
339         struct dw_desc *desc, *_desc;
340         struct dw_desc *child;
341         u32 status_xfer;
342         unsigned long flags;
343
344         spin_lock_irqsave(&dwc->lock, flags);
345         llp = channel_readl(dwc, LLP);
346         status_xfer = dma_readl(dw, RAW.XFER);
347
348         if (status_xfer & dwc->mask) {
349                 /* Everything we've submitted is done */
350                 dma_writel(dw, CLEAR.XFER, dwc->mask);
351
352                 if (test_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags)) {
353                         struct list_head *head, *active = dwc->tx_node_active;
354
355                         /*
356                          * We are inside first active descriptor.
357                          * Otherwise something is really wrong.
358                          */
359                         desc = dwc_first_active(dwc);
360
361                         head = &desc->tx_list;
362                         if (active != head) {
363                                 /* Update residue to reflect last sent descriptor */
364                                 if (active == head->next)
365                                         desc->residue -= desc->len;
366                                 else
367                                         desc->residue -= to_dw_desc(active->prev)->len;
368
369                                 child = to_dw_desc(active);
370
371                                 /* Submit next block */
372                                 dwc_do_single_block(dwc, child);
373
374                                 spin_unlock_irqrestore(&dwc->lock, flags);
375                                 return;
376                         }
377
378                         /* We are done here */
379                         clear_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags);
380                 }
381
382                 spin_unlock_irqrestore(&dwc->lock, flags);
383
384                 dwc_complete_all(dw, dwc);
385                 return;
386         }
387
388         if (list_empty(&dwc->active_list)) {
389                 spin_unlock_irqrestore(&dwc->lock, flags);
390                 return;
391         }
392
393         if (test_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags)) {
394                 dev_vdbg(chan2dev(&dwc->chan), "%s: soft LLP mode\n", __func__);
395                 spin_unlock_irqrestore(&dwc->lock, flags);
396                 return;
397         }
398
399         dev_vdbg(chan2dev(&dwc->chan), "%s: llp=%pad\n", __func__, &llp);
400
401         list_for_each_entry_safe(desc, _desc, &dwc->active_list, desc_node) {
402                 /* Initial residue value */
403                 desc->residue = desc->total_len;
404
405                 /* Check first descriptors addr */
406                 if (desc->txd.phys == DWC_LLP_LOC(llp)) {
407                         spin_unlock_irqrestore(&dwc->lock, flags);
408                         return;
409                 }
410
411                 /* Check first descriptors llp */
412                 if (lli_read(desc, llp) == llp) {
413                         /* This one is currently in progress */
414                         desc->residue -= dwc_get_sent(dwc);
415                         spin_unlock_irqrestore(&dwc->lock, flags);
416                         return;
417                 }
418
419                 desc->residue -= desc->len;
420                 list_for_each_entry(child, &desc->tx_list, desc_node) {
421                         if (lli_read(child, llp) == llp) {
422                                 /* Currently in progress */
423                                 desc->residue -= dwc_get_sent(dwc);
424                                 spin_unlock_irqrestore(&dwc->lock, flags);
425                                 return;
426                         }
427                         desc->residue -= child->len;
428                 }
429
430                 /*
431                  * No descriptors so far seem to be in progress, i.e.
432                  * this one must be done.
433                  */
434                 spin_unlock_irqrestore(&dwc->lock, flags);
435                 dwc_descriptor_complete(dwc, desc, true);
436                 spin_lock_irqsave(&dwc->lock, flags);
437         }
438
439         dev_err(chan2dev(&dwc->chan),
440                 "BUG: All descriptors done, but channel not idle!\n");
441
442         /* Try to continue after resetting the channel... */
443         dwc_chan_disable(dw, dwc);
444
445         dwc_dostart_first_queued(dwc);
446         spin_unlock_irqrestore(&dwc->lock, flags);
447 }
448
449 static inline void dwc_dump_lli(struct dw_dma_chan *dwc, struct dw_desc *desc)
450 {
451         dev_crit(chan2dev(&dwc->chan), "  desc: s0x%x d0x%x l0x%x c0x%x:%x\n",
452                  lli_read(desc, sar),
453                  lli_read(desc, dar),
454                  lli_read(desc, llp),
455                  lli_read(desc, ctlhi),
456                  lli_read(desc, ctllo));
457 }
458
459 static void dwc_handle_error(struct dw_dma *dw, struct dw_dma_chan *dwc)
460 {
461         struct dw_desc *bad_desc;
462         struct dw_desc *child;
463         unsigned long flags;
464
465         dwc_scan_descriptors(dw, dwc);
466
467         spin_lock_irqsave(&dwc->lock, flags);
468
469         /*
470          * The descriptor currently at the head of the active list is
471          * borked. Since we don't have any way to report errors, we'll
472          * just have to scream loudly and try to carry on.
473          */
474         bad_desc = dwc_first_active(dwc);
475         list_del_init(&bad_desc->desc_node);
476         list_move(dwc->queue.next, dwc->active_list.prev);
477
478         /* Clear the error flag and try to restart the controller */
479         dma_writel(dw, CLEAR.ERROR, dwc->mask);
480         if (!list_empty(&dwc->active_list))
481                 dwc_dostart(dwc, dwc_first_active(dwc));
482
483         /*
484          * WARN may seem harsh, but since this only happens
485          * when someone submits a bad physical address in a
486          * descriptor, we should consider ourselves lucky that the
487          * controller flagged an error instead of scribbling over
488          * random memory locations.
489          */
490         dev_WARN(chan2dev(&dwc->chan), "Bad descriptor submitted for DMA!\n"
491                                        "  cookie: %d\n", bad_desc->txd.cookie);
492         dwc_dump_lli(dwc, bad_desc);
493         list_for_each_entry(child, &bad_desc->tx_list, desc_node)
494                 dwc_dump_lli(dwc, child);
495
496         spin_unlock_irqrestore(&dwc->lock, flags);
497
498         /* Pretend the descriptor completed successfully */
499         dwc_descriptor_complete(dwc, bad_desc, true);
500 }
501
502 /* --------------------- Cyclic DMA API extensions -------------------- */
503
504 dma_addr_t dw_dma_get_src_addr(struct dma_chan *chan)
505 {
506         struct dw_dma_chan *dwc = to_dw_dma_chan(chan);
507         return channel_readl(dwc, SAR);
508 }
509 EXPORT_SYMBOL(dw_dma_get_src_addr);
510
511 dma_addr_t dw_dma_get_dst_addr(struct dma_chan *chan)
512 {
513         struct dw_dma_chan *dwc = to_dw_dma_chan(chan);
514         return channel_readl(dwc, DAR);
515 }
516 EXPORT_SYMBOL(dw_dma_get_dst_addr);
517
518 /* Called with dwc->lock held and all DMAC interrupts disabled */
519 static void dwc_handle_cyclic(struct dw_dma *dw, struct dw_dma_chan *dwc,
520                 u32 status_block, u32 status_err, u32 status_xfer)
521 {
522         unsigned long flags;
523
524         if (status_block & dwc->mask) {
525                 void (*callback)(void *param);
526                 void *callback_param;
527
528                 dev_vdbg(chan2dev(&dwc->chan), "new cyclic period llp 0x%08x\n",
529                                 channel_readl(dwc, LLP));
530                 dma_writel(dw, CLEAR.BLOCK, dwc->mask);
531
532                 callback = dwc->cdesc->period_callback;
533                 callback_param = dwc->cdesc->period_callback_param;
534
535                 if (callback)
536                         callback(callback_param);
537         }
538
539         /*
540          * Error and transfer complete are highly unlikely, and will most
541          * likely be due to a configuration error by the user.
542          */
543         if (unlikely(status_err & dwc->mask) ||
544                         unlikely(status_xfer & dwc->mask)) {
545                 unsigned int i;
546
547                 dev_err(chan2dev(&dwc->chan),
548                         "cyclic DMA unexpected %s interrupt, stopping DMA transfer\n",
549                         status_xfer ? "xfer" : "error");
550
551                 spin_lock_irqsave(&dwc->lock, flags);
552
553                 dwc_dump_chan_regs(dwc);
554
555                 dwc_chan_disable(dw, dwc);
556
557                 /* Make sure DMA does not restart by loading a new list */
558                 channel_writel(dwc, LLP, 0);
559                 channel_writel(dwc, CTL_LO, 0);
560                 channel_writel(dwc, CTL_HI, 0);
561
562                 dma_writel(dw, CLEAR.BLOCK, dwc->mask);
563                 dma_writel(dw, CLEAR.ERROR, dwc->mask);
564                 dma_writel(dw, CLEAR.XFER, dwc->mask);
565
566                 for (i = 0; i < dwc->cdesc->periods; i++)
567                         dwc_dump_lli(dwc, dwc->cdesc->desc[i]);
568
569                 spin_unlock_irqrestore(&dwc->lock, flags);
570         }
571
572         /* Re-enable interrupts */
573         channel_set_bit(dw, MASK.BLOCK, dwc->mask);
574 }
575
576 /* ------------------------------------------------------------------------- */
577
578 static void dw_dma_tasklet(unsigned long data)
579 {
580         struct dw_dma *dw = (struct dw_dma *)data;
581         struct dw_dma_chan *dwc;
582         u32 status_block;
583         u32 status_xfer;
584         u32 status_err;
585         unsigned int i;
586
587         status_block = dma_readl(dw, RAW.BLOCK);
588         status_xfer = dma_readl(dw, RAW.XFER);
589         status_err = dma_readl(dw, RAW.ERROR);
590
591         dev_vdbg(dw->dma.dev, "%s: status_err=%x\n", __func__, status_err);
592
593         for (i = 0; i < dw->dma.chancnt; i++) {
594                 dwc = &dw->chan[i];
595                 if (test_bit(DW_DMA_IS_CYCLIC, &dwc->flags))
596                         dwc_handle_cyclic(dw, dwc, status_block, status_err,
597                                         status_xfer);
598                 else if (status_err & (1 << i))
599                         dwc_handle_error(dw, dwc);
600                 else if (status_xfer & (1 << i))
601                         dwc_scan_descriptors(dw, dwc);
602         }
603
604         /* Re-enable interrupts */
605         channel_set_bit(dw, MASK.XFER, dw->all_chan_mask);
606         channel_set_bit(dw, MASK.ERROR, dw->all_chan_mask);
607 }
608
609 static irqreturn_t dw_dma_interrupt(int irq, void *dev_id)
610 {
611         struct dw_dma *dw = dev_id;
612         u32 status;
613
614         /* Check if we have any interrupt from the DMAC which is not in use */
615         if (!dw->in_use)
616                 return IRQ_NONE;
617
618         status = dma_readl(dw, STATUS_INT);
619         dev_vdbg(dw->dma.dev, "%s: status=0x%x\n", __func__, status);
620
621         /* Check if we have any interrupt from the DMAC */
622         if (!status)
623                 return IRQ_NONE;
624
625         /*
626          * Just disable the interrupts. We'll turn them back on in the
627          * softirq handler.
628          */
629         channel_clear_bit(dw, MASK.XFER, dw->all_chan_mask);
630         channel_clear_bit(dw, MASK.BLOCK, dw->all_chan_mask);
631         channel_clear_bit(dw, MASK.ERROR, dw->all_chan_mask);
632
633         status = dma_readl(dw, STATUS_INT);
634         if (status) {
635                 dev_err(dw->dma.dev,
636                         "BUG: Unexpected interrupts pending: 0x%x\n",
637                         status);
638
639                 /* Try to recover */
640                 channel_clear_bit(dw, MASK.XFER, (1 << 8) - 1);
641                 channel_clear_bit(dw, MASK.BLOCK, (1 << 8) - 1);
642                 channel_clear_bit(dw, MASK.SRC_TRAN, (1 << 8) - 1);
643                 channel_clear_bit(dw, MASK.DST_TRAN, (1 << 8) - 1);
644                 channel_clear_bit(dw, MASK.ERROR, (1 << 8) - 1);
645         }
646
647         tasklet_schedule(&dw->tasklet);
648
649         return IRQ_HANDLED;
650 }
651
652 /*----------------------------------------------------------------------*/
653
654 static struct dma_async_tx_descriptor *
655 dwc_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
656                 size_t len, unsigned long flags)
657 {
658         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
659         struct dw_dma           *dw = to_dw_dma(chan->device);
660         struct dw_desc          *desc;
661         struct dw_desc          *first;
662         struct dw_desc          *prev;
663         size_t                  xfer_count;
664         size_t                  offset;
665         u8                      m_master = dwc->m_master;
666         unsigned int            src_width;
667         unsigned int            dst_width;
668         unsigned int            data_width = dw->pdata->data_width[m_master];
669         u32                     ctllo;
670         u8                      lms = DWC_LLP_LMS(m_master);
671
672         dev_vdbg(chan2dev(chan),
673                         "%s: d%pad s%pad l0x%zx f0x%lx\n", __func__,
674                         &dest, &src, len, flags);
675
676         if (unlikely(!len)) {
677                 dev_dbg(chan2dev(chan), "%s: length is zero!\n", __func__);
678                 return NULL;
679         }
680
681         dwc->direction = DMA_MEM_TO_MEM;
682
683         src_width = dst_width = __ffs(data_width | src | dest | len);
684
685         ctllo = DWC_DEFAULT_CTLLO(chan)
686                         | DWC_CTLL_DST_WIDTH(dst_width)
687                         | DWC_CTLL_SRC_WIDTH(src_width)
688                         | DWC_CTLL_DST_INC
689                         | DWC_CTLL_SRC_INC
690                         | DWC_CTLL_FC_M2M;
691         prev = first = NULL;
692
693         for (offset = 0; offset < len; offset += xfer_count << src_width) {
694                 xfer_count = min_t(size_t, (len - offset) >> src_width,
695                                            dwc->block_size);
696
697                 desc = dwc_desc_get(dwc);
698                 if (!desc)
699                         goto err_desc_get;
700
701                 lli_write(desc, sar, src + offset);
702                 lli_write(desc, dar, dest + offset);
703                 lli_write(desc, ctllo, ctllo);
704                 lli_write(desc, ctlhi, xfer_count);
705                 desc->len = xfer_count << src_width;
706
707                 if (!first) {
708                         first = desc;
709                 } else {
710                         lli_write(prev, llp, desc->txd.phys | lms);
711                         list_add_tail(&desc->desc_node, &first->tx_list);
712                 }
713                 prev = desc;
714         }
715
716         if (flags & DMA_PREP_INTERRUPT)
717                 /* Trigger interrupt after last block */
718                 lli_set(prev, ctllo, DWC_CTLL_INT_EN);
719
720         prev->lli.llp = 0;
721         lli_clear(prev, ctllo, DWC_CTLL_LLP_D_EN | DWC_CTLL_LLP_S_EN);
722         first->txd.flags = flags;
723         first->total_len = len;
724
725         return &first->txd;
726
727 err_desc_get:
728         dwc_desc_put(dwc, first);
729         return NULL;
730 }
731
732 static struct dma_async_tx_descriptor *
733 dwc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
734                 unsigned int sg_len, enum dma_transfer_direction direction,
735                 unsigned long flags, void *context)
736 {
737         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
738         struct dw_dma           *dw = to_dw_dma(chan->device);
739         struct dma_slave_config *sconfig = &dwc->dma_sconfig;
740         struct dw_desc          *prev;
741         struct dw_desc          *first;
742         u32                     ctllo;
743         u8                      m_master = dwc->m_master;
744         u8                      lms = DWC_LLP_LMS(m_master);
745         dma_addr_t              reg;
746         unsigned int            reg_width;
747         unsigned int            mem_width;
748         unsigned int            data_width = dw->pdata->data_width[m_master];
749         unsigned int            i;
750         struct scatterlist      *sg;
751         size_t                  total_len = 0;
752
753         dev_vdbg(chan2dev(chan), "%s\n", __func__);
754
755         if (unlikely(!is_slave_direction(direction) || !sg_len))
756                 return NULL;
757
758         dwc->direction = direction;
759
760         prev = first = NULL;
761
762         switch (direction) {
763         case DMA_MEM_TO_DEV:
764                 reg_width = __ffs(sconfig->dst_addr_width);
765                 reg = sconfig->dst_addr;
766                 ctllo = (DWC_DEFAULT_CTLLO(chan)
767                                 | DWC_CTLL_DST_WIDTH(reg_width)
768                                 | DWC_CTLL_DST_FIX
769                                 | DWC_CTLL_SRC_INC);
770
771                 ctllo |= sconfig->device_fc ? DWC_CTLL_FC(DW_DMA_FC_P_M2P) :
772                         DWC_CTLL_FC(DW_DMA_FC_D_M2P);
773
774                 for_each_sg(sgl, sg, sg_len, i) {
775                         struct dw_desc  *desc;
776                         u32             len, dlen, mem;
777
778                         mem = sg_dma_address(sg);
779                         len = sg_dma_len(sg);
780
781                         mem_width = __ffs(data_width | mem | len);
782
783 slave_sg_todev_fill_desc:
784                         desc = dwc_desc_get(dwc);
785                         if (!desc)
786                                 goto err_desc_get;
787
788                         lli_write(desc, sar, mem);
789                         lli_write(desc, dar, reg);
790                         lli_write(desc, ctllo, ctllo | DWC_CTLL_SRC_WIDTH(mem_width));
791                         if ((len >> mem_width) > dwc->block_size) {
792                                 dlen = dwc->block_size << mem_width;
793                                 mem += dlen;
794                                 len -= dlen;
795                         } else {
796                                 dlen = len;
797                                 len = 0;
798                         }
799
800                         lli_write(desc, ctlhi, dlen >> mem_width);
801                         desc->len = dlen;
802
803                         if (!first) {
804                                 first = desc;
805                         } else {
806                                 lli_write(prev, llp, desc->txd.phys | lms);
807                                 list_add_tail(&desc->desc_node, &first->tx_list);
808                         }
809                         prev = desc;
810                         total_len += dlen;
811
812                         if (len)
813                                 goto slave_sg_todev_fill_desc;
814                 }
815                 break;
816         case DMA_DEV_TO_MEM:
817                 reg_width = __ffs(sconfig->src_addr_width);
818                 reg = sconfig->src_addr;
819                 ctllo = (DWC_DEFAULT_CTLLO(chan)
820                                 | DWC_CTLL_SRC_WIDTH(reg_width)
821                                 | DWC_CTLL_DST_INC
822                                 | DWC_CTLL_SRC_FIX);
823
824                 ctllo |= sconfig->device_fc ? DWC_CTLL_FC(DW_DMA_FC_P_P2M) :
825                         DWC_CTLL_FC(DW_DMA_FC_D_P2M);
826
827                 for_each_sg(sgl, sg, sg_len, i) {
828                         struct dw_desc  *desc;
829                         u32             len, dlen, mem;
830
831                         mem = sg_dma_address(sg);
832                         len = sg_dma_len(sg);
833
834                         mem_width = __ffs(data_width | mem | len);
835
836 slave_sg_fromdev_fill_desc:
837                         desc = dwc_desc_get(dwc);
838                         if (!desc)
839                                 goto err_desc_get;
840
841                         lli_write(desc, sar, reg);
842                         lli_write(desc, dar, mem);
843                         lli_write(desc, ctllo, ctllo | DWC_CTLL_DST_WIDTH(mem_width));
844                         if ((len >> reg_width) > dwc->block_size) {
845                                 dlen = dwc->block_size << reg_width;
846                                 mem += dlen;
847                                 len -= dlen;
848                         } else {
849                                 dlen = len;
850                                 len = 0;
851                         }
852                         lli_write(desc, ctlhi, dlen >> reg_width);
853                         desc->len = dlen;
854
855                         if (!first) {
856                                 first = desc;
857                         } else {
858                                 lli_write(prev, llp, desc->txd.phys | lms);
859                                 list_add_tail(&desc->desc_node, &first->tx_list);
860                         }
861                         prev = desc;
862                         total_len += dlen;
863
864                         if (len)
865                                 goto slave_sg_fromdev_fill_desc;
866                 }
867                 break;
868         default:
869                 return NULL;
870         }
871
872         if (flags & DMA_PREP_INTERRUPT)
873                 /* Trigger interrupt after last block */
874                 lli_set(prev, ctllo, DWC_CTLL_INT_EN);
875
876         prev->lli.llp = 0;
877         lli_clear(prev, ctllo, DWC_CTLL_LLP_D_EN | DWC_CTLL_LLP_S_EN);
878         first->total_len = total_len;
879
880         return &first->txd;
881
882 err_desc_get:
883         dev_err(chan2dev(chan),
884                 "not enough descriptors available. Direction %d\n", direction);
885         dwc_desc_put(dwc, first);
886         return NULL;
887 }
888
889 bool dw_dma_filter(struct dma_chan *chan, void *param)
890 {
891         struct dw_dma_chan *dwc = to_dw_dma_chan(chan);
892         struct dw_dma_slave *dws = param;
893
894         if (dws->dma_dev != chan->device->dev)
895                 return false;
896
897         /* We have to copy data since dws can be temporary storage */
898
899         dwc->src_id = dws->src_id;
900         dwc->dst_id = dws->dst_id;
901
902         dwc->m_master = dws->m_master;
903         dwc->p_master = dws->p_master;
904
905         return true;
906 }
907 EXPORT_SYMBOL_GPL(dw_dma_filter);
908
909 /*
910  * Fix sconfig's burst size according to dw_dmac. We need to convert them as:
911  * 1 -> 0, 4 -> 1, 8 -> 2, 16 -> 3.
912  *
913  * NOTE: burst size 2 is not supported by controller.
914  *
915  * This can be done by finding least significant bit set: n & (n - 1)
916  */
917 static inline void convert_burst(u32 *maxburst)
918 {
919         if (*maxburst > 1)
920                 *maxburst = fls(*maxburst) - 2;
921         else
922                 *maxburst = 0;
923 }
924
925 static int dwc_config(struct dma_chan *chan, struct dma_slave_config *sconfig)
926 {
927         struct dw_dma_chan *dwc = to_dw_dma_chan(chan);
928
929         /* Check if chan will be configured for slave transfers */
930         if (!is_slave_direction(sconfig->direction))
931                 return -EINVAL;
932
933         memcpy(&dwc->dma_sconfig, sconfig, sizeof(*sconfig));
934         dwc->direction = sconfig->direction;
935
936         convert_burst(&dwc->dma_sconfig.src_maxburst);
937         convert_burst(&dwc->dma_sconfig.dst_maxburst);
938
939         return 0;
940 }
941
942 static int dwc_pause(struct dma_chan *chan)
943 {
944         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
945         unsigned long           flags;
946         unsigned int            count = 20;     /* timeout iterations */
947         u32                     cfglo;
948
949         spin_lock_irqsave(&dwc->lock, flags);
950
951         cfglo = channel_readl(dwc, CFG_LO);
952         channel_writel(dwc, CFG_LO, cfglo | DWC_CFGL_CH_SUSP);
953         while (!(channel_readl(dwc, CFG_LO) & DWC_CFGL_FIFO_EMPTY) && count--)
954                 udelay(2);
955
956         set_bit(DW_DMA_IS_PAUSED, &dwc->flags);
957
958         spin_unlock_irqrestore(&dwc->lock, flags);
959
960         return 0;
961 }
962
963 static inline void dwc_chan_resume(struct dw_dma_chan *dwc)
964 {
965         u32 cfglo = channel_readl(dwc, CFG_LO);
966
967         channel_writel(dwc, CFG_LO, cfglo & ~DWC_CFGL_CH_SUSP);
968
969         clear_bit(DW_DMA_IS_PAUSED, &dwc->flags);
970 }
971
972 static int dwc_resume(struct dma_chan *chan)
973 {
974         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
975         unsigned long           flags;
976
977         spin_lock_irqsave(&dwc->lock, flags);
978
979         if (test_bit(DW_DMA_IS_PAUSED, &dwc->flags))
980                 dwc_chan_resume(dwc);
981
982         spin_unlock_irqrestore(&dwc->lock, flags);
983
984         return 0;
985 }
986
987 static int dwc_terminate_all(struct dma_chan *chan)
988 {
989         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
990         struct dw_dma           *dw = to_dw_dma(chan->device);
991         struct dw_desc          *desc, *_desc;
992         unsigned long           flags;
993         LIST_HEAD(list);
994
995         spin_lock_irqsave(&dwc->lock, flags);
996
997         clear_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags);
998
999         dwc_chan_disable(dw, dwc);
1000
1001         dwc_chan_resume(dwc);
1002
1003         /* active_list entries will end up before queued entries */
1004         list_splice_init(&dwc->queue, &list);
1005         list_splice_init(&dwc->active_list, &list);
1006
1007         spin_unlock_irqrestore(&dwc->lock, flags);
1008
1009         /* Flush all pending and queued descriptors */
1010         list_for_each_entry_safe(desc, _desc, &list, desc_node)
1011                 dwc_descriptor_complete(dwc, desc, false);
1012
1013         return 0;
1014 }
1015
1016 static struct dw_desc *dwc_find_desc(struct dw_dma_chan *dwc, dma_cookie_t c)
1017 {
1018         struct dw_desc *desc;
1019
1020         list_for_each_entry(desc, &dwc->active_list, desc_node)
1021                 if (desc->txd.cookie == c)
1022                         return desc;
1023
1024         return NULL;
1025 }
1026
1027 static u32 dwc_get_residue(struct dw_dma_chan *dwc, dma_cookie_t cookie)
1028 {
1029         struct dw_desc *desc;
1030         unsigned long flags;
1031         u32 residue;
1032
1033         spin_lock_irqsave(&dwc->lock, flags);
1034
1035         desc = dwc_find_desc(dwc, cookie);
1036         if (desc) {
1037                 if (desc == dwc_first_active(dwc)) {
1038                         residue = desc->residue;
1039                         if (test_bit(DW_DMA_IS_SOFT_LLP, &dwc->flags) && residue)
1040                                 residue -= dwc_get_sent(dwc);
1041                 } else {
1042                         residue = desc->total_len;
1043                 }
1044         } else {
1045                 residue = 0;
1046         }
1047
1048         spin_unlock_irqrestore(&dwc->lock, flags);
1049         return residue;
1050 }
1051
1052 static enum dma_status
1053 dwc_tx_status(struct dma_chan *chan,
1054               dma_cookie_t cookie,
1055               struct dma_tx_state *txstate)
1056 {
1057         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
1058         enum dma_status         ret;
1059
1060         ret = dma_cookie_status(chan, cookie, txstate);
1061         if (ret == DMA_COMPLETE)
1062                 return ret;
1063
1064         dwc_scan_descriptors(to_dw_dma(chan->device), dwc);
1065
1066         ret = dma_cookie_status(chan, cookie, txstate);
1067         if (ret == DMA_COMPLETE)
1068                 return ret;
1069
1070         dma_set_residue(txstate, dwc_get_residue(dwc, cookie));
1071
1072         if (test_bit(DW_DMA_IS_PAUSED, &dwc->flags) && ret == DMA_IN_PROGRESS)
1073                 return DMA_PAUSED;
1074
1075         return ret;
1076 }
1077
1078 static void dwc_issue_pending(struct dma_chan *chan)
1079 {
1080         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
1081         unsigned long           flags;
1082
1083         spin_lock_irqsave(&dwc->lock, flags);
1084         if (list_empty(&dwc->active_list))
1085                 dwc_dostart_first_queued(dwc);
1086         spin_unlock_irqrestore(&dwc->lock, flags);
1087 }
1088
1089 /*----------------------------------------------------------------------*/
1090
1091 static void dw_dma_off(struct dw_dma *dw)
1092 {
1093         unsigned int i;
1094
1095         dma_writel(dw, CFG, 0);
1096
1097         channel_clear_bit(dw, MASK.XFER, dw->all_chan_mask);
1098         channel_clear_bit(dw, MASK.BLOCK, dw->all_chan_mask);
1099         channel_clear_bit(dw, MASK.SRC_TRAN, dw->all_chan_mask);
1100         channel_clear_bit(dw, MASK.DST_TRAN, dw->all_chan_mask);
1101         channel_clear_bit(dw, MASK.ERROR, dw->all_chan_mask);
1102
1103         while (dma_readl(dw, CFG) & DW_CFG_DMA_EN)
1104                 cpu_relax();
1105
1106         for (i = 0; i < dw->dma.chancnt; i++)
1107                 clear_bit(DW_DMA_IS_INITIALIZED, &dw->chan[i].flags);
1108 }
1109
1110 static void dw_dma_on(struct dw_dma *dw)
1111 {
1112         dma_writel(dw, CFG, DW_CFG_DMA_EN);
1113 }
1114
1115 static int dwc_alloc_chan_resources(struct dma_chan *chan)
1116 {
1117         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
1118         struct dw_dma           *dw = to_dw_dma(chan->device);
1119
1120         dev_vdbg(chan2dev(chan), "%s\n", __func__);
1121
1122         /* ASSERT:  channel is idle */
1123         if (dma_readl(dw, CH_EN) & dwc->mask) {
1124                 dev_dbg(chan2dev(chan), "DMA channel not idle?\n");
1125                 return -EIO;
1126         }
1127
1128         dma_cookie_init(chan);
1129
1130         /*
1131          * NOTE: some controllers may have additional features that we
1132          * need to initialize here, like "scatter-gather" (which
1133          * doesn't mean what you think it means), and status writeback.
1134          */
1135
1136         /*
1137          * We need controller-specific data to set up slave transfers.
1138          */
1139         if (chan->private && !dw_dma_filter(chan, chan->private)) {
1140                 dev_warn(chan2dev(chan), "Wrong controller-specific data\n");
1141                 return -EINVAL;
1142         }
1143
1144         /* Enable controller here if needed */
1145         if (!dw->in_use)
1146                 dw_dma_on(dw);
1147         dw->in_use |= dwc->mask;
1148
1149         return 0;
1150 }
1151
1152 static void dwc_free_chan_resources(struct dma_chan *chan)
1153 {
1154         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
1155         struct dw_dma           *dw = to_dw_dma(chan->device);
1156         unsigned long           flags;
1157         LIST_HEAD(list);
1158
1159         dev_dbg(chan2dev(chan), "%s: descs allocated=%u\n", __func__,
1160                         dwc->descs_allocated);
1161
1162         /* ASSERT:  channel is idle */
1163         BUG_ON(!list_empty(&dwc->active_list));
1164         BUG_ON(!list_empty(&dwc->queue));
1165         BUG_ON(dma_readl(to_dw_dma(chan->device), CH_EN) & dwc->mask);
1166
1167         spin_lock_irqsave(&dwc->lock, flags);
1168
1169         /* Clear custom channel configuration */
1170         dwc->src_id = 0;
1171         dwc->dst_id = 0;
1172
1173         dwc->m_master = 0;
1174         dwc->p_master = 0;
1175
1176         clear_bit(DW_DMA_IS_INITIALIZED, &dwc->flags);
1177
1178         /* Disable interrupts */
1179         channel_clear_bit(dw, MASK.XFER, dwc->mask);
1180         channel_clear_bit(dw, MASK.BLOCK, dwc->mask);
1181         channel_clear_bit(dw, MASK.ERROR, dwc->mask);
1182
1183         spin_unlock_irqrestore(&dwc->lock, flags);
1184
1185         /* Disable controller in case it was a last user */
1186         dw->in_use &= ~dwc->mask;
1187         if (!dw->in_use)
1188                 dw_dma_off(dw);
1189
1190         dev_vdbg(chan2dev(chan), "%s: done\n", __func__);
1191 }
1192
1193 /* --------------------- Cyclic DMA API extensions -------------------- */
1194
1195 /**
1196  * dw_dma_cyclic_start - start the cyclic DMA transfer
1197  * @chan: the DMA channel to start
1198  *
1199  * Must be called with soft interrupts disabled. Returns zero on success or
1200  * -errno on failure.
1201  */
1202 int dw_dma_cyclic_start(struct dma_chan *chan)
1203 {
1204         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
1205         struct dw_dma           *dw = to_dw_dma(chan->device);
1206         unsigned long           flags;
1207
1208         if (!test_bit(DW_DMA_IS_CYCLIC, &dwc->flags)) {
1209                 dev_err(chan2dev(&dwc->chan), "missing prep for cyclic DMA\n");
1210                 return -ENODEV;
1211         }
1212
1213         spin_lock_irqsave(&dwc->lock, flags);
1214
1215         /* Enable interrupts to perform cyclic transfer */
1216         channel_set_bit(dw, MASK.BLOCK, dwc->mask);
1217
1218         dwc_dostart(dwc, dwc->cdesc->desc[0]);
1219
1220         spin_unlock_irqrestore(&dwc->lock, flags);
1221
1222         return 0;
1223 }
1224 EXPORT_SYMBOL(dw_dma_cyclic_start);
1225
1226 /**
1227  * dw_dma_cyclic_stop - stop the cyclic DMA transfer
1228  * @chan: the DMA channel to stop
1229  *
1230  * Must be called with soft interrupts disabled.
1231  */
1232 void dw_dma_cyclic_stop(struct dma_chan *chan)
1233 {
1234         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
1235         struct dw_dma           *dw = to_dw_dma(dwc->chan.device);
1236         unsigned long           flags;
1237
1238         spin_lock_irqsave(&dwc->lock, flags);
1239
1240         dwc_chan_disable(dw, dwc);
1241
1242         spin_unlock_irqrestore(&dwc->lock, flags);
1243 }
1244 EXPORT_SYMBOL(dw_dma_cyclic_stop);
1245
1246 /**
1247  * dw_dma_cyclic_prep - prepare the cyclic DMA transfer
1248  * @chan: the DMA channel to prepare
1249  * @buf_addr: physical DMA address where the buffer starts
1250  * @buf_len: total number of bytes for the entire buffer
1251  * @period_len: number of bytes for each period
1252  * @direction: transfer direction, to or from device
1253  *
1254  * Must be called before trying to start the transfer. Returns a valid struct
1255  * dw_cyclic_desc if successful or an ERR_PTR(-errno) if not successful.
1256  */
1257 struct dw_cyclic_desc *dw_dma_cyclic_prep(struct dma_chan *chan,
1258                 dma_addr_t buf_addr, size_t buf_len, size_t period_len,
1259                 enum dma_transfer_direction direction)
1260 {
1261         struct dw_dma_chan              *dwc = to_dw_dma_chan(chan);
1262         struct dma_slave_config         *sconfig = &dwc->dma_sconfig;
1263         struct dw_cyclic_desc           *cdesc;
1264         struct dw_cyclic_desc           *retval = NULL;
1265         struct dw_desc                  *desc;
1266         struct dw_desc                  *last = NULL;
1267         u8                              lms = DWC_LLP_LMS(dwc->m_master);
1268         unsigned long                   was_cyclic;
1269         unsigned int                    reg_width;
1270         unsigned int                    periods;
1271         unsigned int                    i;
1272         unsigned long                   flags;
1273
1274         spin_lock_irqsave(&dwc->lock, flags);
1275         if (dwc->nollp) {
1276                 spin_unlock_irqrestore(&dwc->lock, flags);
1277                 dev_dbg(chan2dev(&dwc->chan),
1278                                 "channel doesn't support LLP transfers\n");
1279                 return ERR_PTR(-EINVAL);
1280         }
1281
1282         if (!list_empty(&dwc->queue) || !list_empty(&dwc->active_list)) {
1283                 spin_unlock_irqrestore(&dwc->lock, flags);
1284                 dev_dbg(chan2dev(&dwc->chan),
1285                                 "queue and/or active list are not empty\n");
1286                 return ERR_PTR(-EBUSY);
1287         }
1288
1289         was_cyclic = test_and_set_bit(DW_DMA_IS_CYCLIC, &dwc->flags);
1290         spin_unlock_irqrestore(&dwc->lock, flags);
1291         if (was_cyclic) {
1292                 dev_dbg(chan2dev(&dwc->chan),
1293                                 "channel already prepared for cyclic DMA\n");
1294                 return ERR_PTR(-EBUSY);
1295         }
1296
1297         retval = ERR_PTR(-EINVAL);
1298
1299         if (unlikely(!is_slave_direction(direction)))
1300                 goto out_err;
1301
1302         dwc->direction = direction;
1303
1304         if (direction == DMA_MEM_TO_DEV)
1305                 reg_width = __ffs(sconfig->dst_addr_width);
1306         else
1307                 reg_width = __ffs(sconfig->src_addr_width);
1308
1309         periods = buf_len / period_len;
1310
1311         /* Check for too big/unaligned periods and unaligned DMA buffer. */
1312         if (period_len > (dwc->block_size << reg_width))
1313                 goto out_err;
1314         if (unlikely(period_len & ((1 << reg_width) - 1)))
1315                 goto out_err;
1316         if (unlikely(buf_addr & ((1 << reg_width) - 1)))
1317                 goto out_err;
1318
1319         retval = ERR_PTR(-ENOMEM);
1320
1321         cdesc = kzalloc(sizeof(struct dw_cyclic_desc), GFP_KERNEL);
1322         if (!cdesc)
1323                 goto out_err;
1324
1325         cdesc->desc = kzalloc(sizeof(struct dw_desc *) * periods, GFP_KERNEL);
1326         if (!cdesc->desc)
1327                 goto out_err_alloc;
1328
1329         for (i = 0; i < periods; i++) {
1330                 desc = dwc_desc_get(dwc);
1331                 if (!desc)
1332                         goto out_err_desc_get;
1333
1334                 switch (direction) {
1335                 case DMA_MEM_TO_DEV:
1336                         lli_write(desc, dar, sconfig->dst_addr);
1337                         lli_write(desc, sar, buf_addr + period_len * i);
1338                         lli_write(desc, ctllo, (DWC_DEFAULT_CTLLO(chan)
1339                                 | DWC_CTLL_DST_WIDTH(reg_width)
1340                                 | DWC_CTLL_SRC_WIDTH(reg_width)
1341                                 | DWC_CTLL_DST_FIX
1342                                 | DWC_CTLL_SRC_INC
1343                                 | DWC_CTLL_INT_EN));
1344
1345                         lli_set(desc, ctllo, sconfig->device_fc ?
1346                                         DWC_CTLL_FC(DW_DMA_FC_P_M2P) :
1347                                         DWC_CTLL_FC(DW_DMA_FC_D_M2P));
1348
1349                         break;
1350                 case DMA_DEV_TO_MEM:
1351                         lli_write(desc, dar, buf_addr + period_len * i);
1352                         lli_write(desc, sar, sconfig->src_addr);
1353                         lli_write(desc, ctllo, (DWC_DEFAULT_CTLLO(chan)
1354                                 | DWC_CTLL_SRC_WIDTH(reg_width)
1355                                 | DWC_CTLL_DST_WIDTH(reg_width)
1356                                 | DWC_CTLL_DST_INC
1357                                 | DWC_CTLL_SRC_FIX
1358                                 | DWC_CTLL_INT_EN));
1359
1360                         lli_set(desc, ctllo, sconfig->device_fc ?
1361                                         DWC_CTLL_FC(DW_DMA_FC_P_P2M) :
1362                                         DWC_CTLL_FC(DW_DMA_FC_D_P2M));
1363
1364                         break;
1365                 default:
1366                         break;
1367                 }
1368
1369                 lli_write(desc, ctlhi, period_len >> reg_width);
1370                 cdesc->desc[i] = desc;
1371
1372                 if (last)
1373                         lli_write(last, llp, desc->txd.phys | lms);
1374
1375                 last = desc;
1376         }
1377
1378         /* Let's make a cyclic list */
1379         lli_write(last, llp, cdesc->desc[0]->txd.phys | lms);
1380
1381         dev_dbg(chan2dev(&dwc->chan),
1382                         "cyclic prepared buf %pad len %zu period %zu periods %d\n",
1383                         &buf_addr, buf_len, period_len, periods);
1384
1385         cdesc->periods = periods;
1386         dwc->cdesc = cdesc;
1387
1388         return cdesc;
1389
1390 out_err_desc_get:
1391         while (i--)
1392                 dwc_desc_put(dwc, cdesc->desc[i]);
1393 out_err_alloc:
1394         kfree(cdesc);
1395 out_err:
1396         clear_bit(DW_DMA_IS_CYCLIC, &dwc->flags);
1397         return (struct dw_cyclic_desc *)retval;
1398 }
1399 EXPORT_SYMBOL(dw_dma_cyclic_prep);
1400
1401 /**
1402  * dw_dma_cyclic_free - free a prepared cyclic DMA transfer
1403  * @chan: the DMA channel to free
1404  */
1405 void dw_dma_cyclic_free(struct dma_chan *chan)
1406 {
1407         struct dw_dma_chan      *dwc = to_dw_dma_chan(chan);
1408         struct dw_dma           *dw = to_dw_dma(dwc->chan.device);
1409         struct dw_cyclic_desc   *cdesc = dwc->cdesc;
1410         unsigned int            i;
1411         unsigned long           flags;
1412
1413         dev_dbg(chan2dev(&dwc->chan), "%s\n", __func__);
1414
1415         if (!cdesc)
1416                 return;
1417
1418         spin_lock_irqsave(&dwc->lock, flags);
1419
1420         dwc_chan_disable(dw, dwc);
1421
1422         dma_writel(dw, CLEAR.BLOCK, dwc->mask);
1423         dma_writel(dw, CLEAR.ERROR, dwc->mask);
1424         dma_writel(dw, CLEAR.XFER, dwc->mask);
1425
1426         spin_unlock_irqrestore(&dwc->lock, flags);
1427
1428         for (i = 0; i < cdesc->periods; i++)
1429                 dwc_desc_put(dwc, cdesc->desc[i]);
1430
1431         kfree(cdesc->desc);
1432         kfree(cdesc);
1433
1434         dwc->cdesc = NULL;
1435
1436         clear_bit(DW_DMA_IS_CYCLIC, &dwc->flags);
1437 }
1438 EXPORT_SYMBOL(dw_dma_cyclic_free);
1439
1440 /*----------------------------------------------------------------------*/
1441
1442 int dw_dma_probe(struct dw_dma_chip *chip)
1443 {
1444         struct dw_dma_platform_data *pdata;
1445         struct dw_dma           *dw;
1446         bool                    autocfg = false;
1447         unsigned int            dw_params;
1448         unsigned int            i;
1449         int                     err;
1450
1451         dw = devm_kzalloc(chip->dev, sizeof(*dw), GFP_KERNEL);
1452         if (!dw)
1453                 return -ENOMEM;
1454
1455         dw->pdata = devm_kzalloc(chip->dev, sizeof(*dw->pdata), GFP_KERNEL);
1456         if (!dw->pdata)
1457                 return -ENOMEM;
1458
1459         dw->regs = chip->regs;
1460         chip->dw = dw;
1461
1462         pm_runtime_get_sync(chip->dev);
1463
1464         if (!chip->pdata) {
1465                 dw_params = dma_readl(dw, DW_PARAMS);
1466                 dev_dbg(chip->dev, "DW_PARAMS: 0x%08x\n", dw_params);
1467
1468                 autocfg = dw_params >> DW_PARAMS_EN & 1;
1469                 if (!autocfg) {
1470                         err = -EINVAL;
1471                         goto err_pdata;
1472                 }
1473
1474                 /* Reassign the platform data pointer */
1475                 pdata = dw->pdata;
1476
1477                 /* Get hardware configuration parameters */
1478                 pdata->nr_channels = (dw_params >> DW_PARAMS_NR_CHAN & 7) + 1;
1479                 pdata->nr_masters = (dw_params >> DW_PARAMS_NR_MASTER & 3) + 1;
1480                 for (i = 0; i < pdata->nr_masters; i++) {
1481                         pdata->data_width[i] =
1482                                 4 << (dw_params >> DW_PARAMS_DATA_WIDTH(i) & 3);
1483                 }
1484                 pdata->block_size = dma_readl(dw, MAX_BLK_SIZE);
1485
1486                 /* Fill platform data with the default values */
1487                 pdata->is_private = true;
1488                 pdata->is_memcpy = true;
1489                 pdata->chan_allocation_order = CHAN_ALLOCATION_ASCENDING;
1490                 pdata->chan_priority = CHAN_PRIORITY_ASCENDING;
1491         } else if (chip->pdata->nr_channels > DW_DMA_MAX_NR_CHANNELS) {
1492                 err = -EINVAL;
1493                 goto err_pdata;
1494         } else {
1495                 memcpy(dw->pdata, chip->pdata, sizeof(*dw->pdata));
1496
1497                 /* Reassign the platform data pointer */
1498                 pdata = dw->pdata;
1499         }
1500
1501         dw->chan = devm_kcalloc(chip->dev, pdata->nr_channels, sizeof(*dw->chan),
1502                                 GFP_KERNEL);
1503         if (!dw->chan) {
1504                 err = -ENOMEM;
1505                 goto err_pdata;
1506         }
1507
1508         /* Calculate all channel mask before DMA setup */
1509         dw->all_chan_mask = (1 << pdata->nr_channels) - 1;
1510
1511         /* Force dma off, just in case */
1512         dw_dma_off(dw);
1513
1514         /* Create a pool of consistent memory blocks for hardware descriptors */
1515         dw->desc_pool = dmam_pool_create("dw_dmac_desc_pool", chip->dev,
1516                                          sizeof(struct dw_desc), 4, 0);
1517         if (!dw->desc_pool) {
1518                 dev_err(chip->dev, "No memory for descriptors dma pool\n");
1519                 err = -ENOMEM;
1520                 goto err_pdata;
1521         }
1522
1523         tasklet_init(&dw->tasklet, dw_dma_tasklet, (unsigned long)dw);
1524
1525         err = request_irq(chip->irq, dw_dma_interrupt, IRQF_SHARED,
1526                           "dw_dmac", dw);
1527         if (err)
1528                 goto err_pdata;
1529
1530         INIT_LIST_HEAD(&dw->dma.channels);
1531         for (i = 0; i < pdata->nr_channels; i++) {
1532                 struct dw_dma_chan      *dwc = &dw->chan[i];
1533
1534                 dwc->chan.device = &dw->dma;
1535                 dma_cookie_init(&dwc->chan);
1536                 if (pdata->chan_allocation_order == CHAN_ALLOCATION_ASCENDING)
1537                         list_add_tail(&dwc->chan.device_node,
1538                                         &dw->dma.channels);
1539                 else
1540                         list_add(&dwc->chan.device_node, &dw->dma.channels);
1541
1542                 /* 7 is highest priority & 0 is lowest. */
1543                 if (pdata->chan_priority == CHAN_PRIORITY_ASCENDING)
1544                         dwc->priority = pdata->nr_channels - i - 1;
1545                 else
1546                         dwc->priority = i;
1547
1548                 dwc->ch_regs = &__dw_regs(dw)->CHAN[i];
1549                 spin_lock_init(&dwc->lock);
1550                 dwc->mask = 1 << i;
1551
1552                 INIT_LIST_HEAD(&dwc->active_list);
1553                 INIT_LIST_HEAD(&dwc->queue);
1554
1555                 channel_clear_bit(dw, CH_EN, dwc->mask);
1556
1557                 dwc->direction = DMA_TRANS_NONE;
1558
1559                 /* Hardware configuration */
1560                 if (autocfg) {
1561                         unsigned int r = DW_DMA_MAX_NR_CHANNELS - i - 1;
1562                         void __iomem *addr = &__dw_regs(dw)->DWC_PARAMS[r];
1563                         unsigned int dwc_params = dma_readl_native(addr);
1564
1565                         dev_dbg(chip->dev, "DWC_PARAMS[%d]: 0x%08x\n", i,
1566                                            dwc_params);
1567
1568                         /*
1569                          * Decode maximum block size for given channel. The
1570                          * stored 4 bit value represents blocks from 0x00 for 3
1571                          * up to 0x0a for 4095.
1572                          */
1573                         dwc->block_size =
1574                                 (4 << ((pdata->block_size >> 4 * i) & 0xf)) - 1;
1575                         dwc->nollp =
1576                                 (dwc_params >> DWC_PARAMS_MBLK_EN & 0x1) == 0;
1577                 } else {
1578                         dwc->block_size = pdata->block_size;
1579
1580                         /* Check if channel supports multi block transfer */
1581                         channel_writel(dwc, LLP, DWC_LLP_LOC(0xffffffff));
1582                         dwc->nollp = DWC_LLP_LOC(channel_readl(dwc, LLP)) == 0;
1583                         channel_writel(dwc, LLP, 0);
1584                 }
1585         }
1586
1587         /* Clear all interrupts on all channels. */
1588         dma_writel(dw, CLEAR.XFER, dw->all_chan_mask);
1589         dma_writel(dw, CLEAR.BLOCK, dw->all_chan_mask);
1590         dma_writel(dw, CLEAR.SRC_TRAN, dw->all_chan_mask);
1591         dma_writel(dw, CLEAR.DST_TRAN, dw->all_chan_mask);
1592         dma_writel(dw, CLEAR.ERROR, dw->all_chan_mask);
1593
1594         /* Set capabilities */
1595         dma_cap_set(DMA_SLAVE, dw->dma.cap_mask);
1596         if (pdata->is_private)
1597                 dma_cap_set(DMA_PRIVATE, dw->dma.cap_mask);
1598         if (pdata->is_memcpy)
1599                 dma_cap_set(DMA_MEMCPY, dw->dma.cap_mask);
1600
1601         dw->dma.dev = chip->dev;
1602         dw->dma.device_alloc_chan_resources = dwc_alloc_chan_resources;
1603         dw->dma.device_free_chan_resources = dwc_free_chan_resources;
1604
1605         dw->dma.device_prep_dma_memcpy = dwc_prep_dma_memcpy;
1606         dw->dma.device_prep_slave_sg = dwc_prep_slave_sg;
1607
1608         dw->dma.device_config = dwc_config;
1609         dw->dma.device_pause = dwc_pause;
1610         dw->dma.device_resume = dwc_resume;
1611         dw->dma.device_terminate_all = dwc_terminate_all;
1612
1613         dw->dma.device_tx_status = dwc_tx_status;
1614         dw->dma.device_issue_pending = dwc_issue_pending;
1615
1616         /* DMA capabilities */
1617         dw->dma.src_addr_widths = DW_DMA_BUSWIDTHS;
1618         dw->dma.dst_addr_widths = DW_DMA_BUSWIDTHS;
1619         dw->dma.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV) |
1620                              BIT(DMA_MEM_TO_MEM);
1621         dw->dma.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
1622
1623         err = dma_async_device_register(&dw->dma);
1624         if (err)
1625                 goto err_dma_register;
1626
1627         dev_info(chip->dev, "DesignWare DMA Controller, %d channels\n",
1628                  pdata->nr_channels);
1629
1630         pm_runtime_put_sync_suspend(chip->dev);
1631
1632         return 0;
1633
1634 err_dma_register:
1635         free_irq(chip->irq, dw);
1636 err_pdata:
1637         pm_runtime_put_sync_suspend(chip->dev);
1638         return err;
1639 }
1640 EXPORT_SYMBOL_GPL(dw_dma_probe);
1641
1642 int dw_dma_remove(struct dw_dma_chip *chip)
1643 {
1644         struct dw_dma           *dw = chip->dw;
1645         struct dw_dma_chan      *dwc, *_dwc;
1646
1647         pm_runtime_get_sync(chip->dev);
1648
1649         dw_dma_off(dw);
1650         dma_async_device_unregister(&dw->dma);
1651
1652         free_irq(chip->irq, dw);
1653         tasklet_kill(&dw->tasklet);
1654
1655         list_for_each_entry_safe(dwc, _dwc, &dw->dma.channels,
1656                         chan.device_node) {
1657                 list_del(&dwc->chan.device_node);
1658                 channel_clear_bit(dw, CH_EN, dwc->mask);
1659         }
1660
1661         pm_runtime_put_sync_suspend(chip->dev);
1662         return 0;
1663 }
1664 EXPORT_SYMBOL_GPL(dw_dma_remove);
1665
1666 int dw_dma_disable(struct dw_dma_chip *chip)
1667 {
1668         struct dw_dma *dw = chip->dw;
1669
1670         dw_dma_off(dw);
1671         return 0;
1672 }
1673 EXPORT_SYMBOL_GPL(dw_dma_disable);
1674
1675 int dw_dma_enable(struct dw_dma_chip *chip)
1676 {
1677         struct dw_dma *dw = chip->dw;
1678
1679         dw_dma_on(dw);
1680         return 0;
1681 }
1682 EXPORT_SYMBOL_GPL(dw_dma_enable);
1683
1684 MODULE_LICENSE("GPL v2");
1685 MODULE_DESCRIPTION("Synopsys DesignWare DMA Controller core driver");
1686 MODULE_AUTHOR("Haavard Skinnemoen (Atmel)");
1687 MODULE_AUTHOR("Viresh Kumar <vireshk@kernel.org>");