45
45
#define DMA_STATUS_MASK_BITS 0x3
46
46
#define DMA_STATUS_SHIFT_BITS 16
47
47
#define DMA_STATUS_IRQ(x) (0x1 << (x))
48
#define DMA_STATUS_ERR(x) (0x1 << ((x) + 8))
48
#define DMA_STATUS0_ERR(x) (0x1 << ((x) + 8))
49
#define DMA_STATUS2_ERR(x) (0x1 << (x))
50
51
#define DMA_DESC_WIDTH_SHIFT_BITS 12
51
52
#define DMA_DESC_WIDTH_1_BYTE (0x3 << DMA_DESC_WIDTH_SHIFT_BITS)
59
60
#define DMA_DESC_FOLLOW_WITHOUT_IRQ 0x2
60
61
#define DMA_DESC_FOLLOW_WITH_IRQ 0x3
63
#define MAX_CHAN_NR 12
65
#define DMA_MASK_CTL0_MODE 0x33333333
66
#define DMA_MASK_CTL2_MODE 0x00003333
64
68
static unsigned int init_nr_desc_per_channel = 64;
65
69
module_param(init_nr_desc_per_channel, uint, 0644);
133
137
#define PCH_DMA_CTL3 0x0C
134
138
#define PCH_DMA_STS0 0x10
135
139
#define PCH_DMA_STS1 0x14
140
#define PCH_DMA_STS2 0x18
137
142
#define dma_readl(pd, name) \
138
143
readl((pd)->membase + PCH_DMA_##name)
184
189
struct pch_dma *pd = to_pd(chan->device);
193
if (chan->chan_id < 8)
196
pos = chan->chan_id + 8;
187
198
val = dma_readl(pd, CTL2);
190
val |= 0x1 << chan->chan_id;
192
val &= ~(0x1 << chan->chan_id);
203
val &= ~(0x1 << pos);
194
205
dma_writel(pd, CTL2, val);
202
213
struct pch_dma_chan *pd_chan = to_pd_chan(chan);
203
214
struct pch_dma *pd = to_pd(chan->device);
206
219
if (chan->chan_id < 8) {
207
220
val = dma_readl(pd, CTL0);
222
mask_mode = DMA_CTL0_MODE_MASK_BITS <<
223
(DMA_CTL0_BITS_PER_CH * chan->chan_id);
224
mask_ctl = DMA_MASK_CTL0_MODE & ~(DMA_CTL0_MODE_MASK_BITS <<
225
(DMA_CTL0_BITS_PER_CH * chan->chan_id));
209
227
if (pd_chan->dir == DMA_TO_DEVICE)
210
228
val |= 0x1 << (DMA_CTL0_BITS_PER_CH * chan->chan_id +
211
229
DMA_CTL0_DIR_SHIFT_BITS);
213
231
val &= ~(0x1 << (DMA_CTL0_BITS_PER_CH * chan->chan_id +
214
232
DMA_CTL0_DIR_SHIFT_BITS));
216
235
dma_writel(pd, CTL0, val);
218
237
int ch = chan->chan_id - 8; /* ch8-->0 ch9-->1 ... ch11->3 */
219
238
val = dma_readl(pd, CTL3);
240
mask_mode = DMA_CTL0_MODE_MASK_BITS <<
241
(DMA_CTL0_BITS_PER_CH * ch);
242
mask_ctl = DMA_MASK_CTL2_MODE & ~(DMA_CTL0_MODE_MASK_BITS <<
243
(DMA_CTL0_BITS_PER_CH * ch));
221
245
if (pd_chan->dir == DMA_TO_DEVICE)
222
246
val |= 0x1 << (DMA_CTL0_BITS_PER_CH * ch +
223
247
DMA_CTL0_DIR_SHIFT_BITS);
225
249
val &= ~(0x1 << (DMA_CTL0_BITS_PER_CH * ch +
226
250
DMA_CTL0_DIR_SHIFT_BITS));
228
252
dma_writel(pd, CTL3, val);
237
261
struct pch_dma *pd = to_pd(chan->device);
240
266
if (chan->chan_id < 8) {
267
mask_ctl = DMA_MASK_CTL0_MODE & ~(DMA_CTL0_MODE_MASK_BITS <<
268
(DMA_CTL0_BITS_PER_CH * chan->chan_id));
269
mask_dir = 1 << (DMA_CTL0_BITS_PER_CH * chan->chan_id +\
270
DMA_CTL0_DIR_SHIFT_BITS);
241
271
val = dma_readl(pd, CTL0);
243
val &= ~(DMA_CTL0_MODE_MASK_BITS <<
244
(DMA_CTL0_BITS_PER_CH * chan->chan_id));
245
273
val |= mode << (DMA_CTL0_BITS_PER_CH * chan->chan_id);
247
275
dma_writel(pd, CTL0, val);
249
277
int ch = chan->chan_id - 8; /* ch8-->0 ch9-->1 ... ch11->3 */
278
mask_ctl = DMA_MASK_CTL2_MODE & ~(DMA_CTL0_MODE_MASK_BITS <<
279
(DMA_CTL0_BITS_PER_CH * ch));
280
mask_dir = 1 << (DMA_CTL0_BITS_PER_CH * ch +\
281
DMA_CTL0_DIR_SHIFT_BITS);
251
282
val = dma_readl(pd, CTL3);
253
val &= ~(DMA_CTL0_MODE_MASK_BITS <<
254
(DMA_CTL0_BITS_PER_CH * ch));
255
284
val |= mode << (DMA_CTL0_BITS_PER_CH * ch);
257
286
dma_writel(pd, CTL3, val);
261
289
dev_dbg(chan2dev(chan), "pdc_set_mode: chan %d -> %x\n",
262
290
chan->chan_id, val);
265
static u32 pdc_get_status(struct pch_dma_chan *pd_chan)
293
static u32 pdc_get_status0(struct pch_dma_chan *pd_chan)
267
295
struct pch_dma *pd = to_pd(pd_chan->chan.device);
272
300
DMA_STATUS_BITS_PER_CH * pd_chan->chan.chan_id));
303
static u32 pdc_get_status2(struct pch_dma_chan *pd_chan)
305
struct pch_dma *pd = to_pd(pd_chan->chan.device);
308
val = dma_readl(pd, STS2);
309
return DMA_STATUS_MASK_BITS & (val >> (DMA_STATUS_SHIFT_BITS +
310
DMA_STATUS_BITS_PER_CH * (pd_chan->chan.chan_id - 8)));
275
313
static bool pdc_is_idle(struct pch_dma_chan *pd_chan)
277
if (pdc_get_status(pd_chan) == DMA_STATUS_IDLE)
317
if (pd_chan->chan.chan_id < 8)
318
sts = pdc_get_status0(pd_chan);
320
sts = pdc_get_status2(pd_chan);
323
if (sts == DMA_STATUS_IDLE)
495
541
list_add_tail(&desc->desc_node, &tmp_list);
498
spin_lock_bh(&pd_chan->lock);
544
spin_lock_irq(&pd_chan->lock);
499
545
list_splice(&tmp_list, &pd_chan->free_list);
500
546
pd_chan->descs_allocated = i;
501
547
pd_chan->completed_cookie = chan->cookie = 1;
502
spin_unlock_bh(&pd_chan->lock);
548
spin_unlock_irq(&pd_chan->lock);
504
550
pdc_enable_irq(chan, 1);
517
563
BUG_ON(!list_empty(&pd_chan->active_list));
518
564
BUG_ON(!list_empty(&pd_chan->queue));
520
spin_lock_bh(&pd_chan->lock);
566
spin_lock_irq(&pd_chan->lock);
521
567
list_splice_init(&pd_chan->free_list, &tmp_list);
522
568
pd_chan->descs_allocated = 0;
523
spin_unlock_bh(&pd_chan->lock);
569
spin_unlock_irq(&pd_chan->lock);
525
571
list_for_each_entry_safe(desc, _d, &tmp_list, desc_node)
526
572
pci_pool_free(pd->pool, desc, desc->txd.phys);
536
582
dma_cookie_t last_completed;
539
spin_lock_bh(&pd_chan->lock);
585
spin_lock_irq(&pd_chan->lock);
540
586
last_completed = pd_chan->completed_cookie;
541
587
last_used = chan->cookie;
542
spin_unlock_bh(&pd_chan->lock);
588
spin_unlock_irq(&pd_chan->lock);
544
590
ret = dma_async_is_complete(cookie, last_completed, last_used);
654
700
if (cmd != DMA_TERMINATE_ALL)
657
spin_lock_bh(&pd_chan->lock);
703
spin_lock_irq(&pd_chan->lock);
659
705
pdc_set_mode(&pd_chan->chan, DMA_CTL0_DISABLE);
664
710
list_for_each_entry_safe(desc, _d, &list, desc_node)
665
711
pdc_chain_complete(pd_chan, desc);
667
spin_unlock_bh(&pd_chan->lock);
713
spin_unlock_irq(&pd_chan->lock);
693
739
struct pch_dma *pd = (struct pch_dma *)devid;
694
740
struct pch_dma_chan *pd_chan;
699
747
sts0 = dma_readl(pd, STS0);
748
sts2 = dma_readl(pd, STS2);
701
750
dev_dbg(pd->dma.dev, "pd_irq sts0: %x\n", sts0);
703
752
for (i = 0; i < pd->dma.chancnt; i++) {
704
753
pd_chan = &pd->channels[i];
706
if (sts0 & DMA_STATUS_IRQ(i)) {
707
if (sts0 & DMA_STATUS_ERR(i))
708
set_bit(0, &pd_chan->err_status);
710
tasklet_schedule(&pd_chan->tasklet);
756
if (sts0 & DMA_STATUS_IRQ(i)) {
757
if (sts0 & DMA_STATUS0_ERR(i))
758
set_bit(0, &pd_chan->err_status);
760
tasklet_schedule(&pd_chan->tasklet);
764
if (sts2 & DMA_STATUS_IRQ(i - 8)) {
765
if (sts2 & DMA_STATUS2_ERR(i))
766
set_bit(0, &pd_chan->err_status);
768
tasklet_schedule(&pd_chan->tasklet);
716
774
/* clear interrupt bits in status register */
717
dma_writel(pd, STS0, sts0);
776
dma_writel(pd, STS0, sts0);
778
dma_writel(pd, STS2, sts2);
813
874
nr_channels = id->driver_data;
814
pd = kzalloc(sizeof(struct pch_dma)+
815
sizeof(struct pch_dma_chan) * nr_channels, GFP_KERNEL);
875
pd = kzalloc(sizeof(*pd), GFP_KERNEL);