Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26a55226 authored by Eric Miao's avatar Eric Miao
Browse files

[ARM] pxa: stop and disable IRQ for each DMA channels at startup



Some broken bootloaders will leave the DMA channel state unclean, which
we should really initialize correctly here.

Signed-off-by: default avatarEric Miao <eric.miao@marvell.com>
parent b6729deb
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -121,20 +121,22 @@ int __init pxa_init_dma(int num_ch)
	if (dma_channels == NULL)
		return -ENOMEM;

	ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL);
	if (ret) {
		printk (KERN_CRIT "Wow!  Can't register IRQ for DMA\n");
		kfree(dma_channels);
		return ret;
	}

	/* dma channel priorities on pxa2xx processors:
	 * ch 0 - 3,  16 - 19  <--> (0) DMA_PRIO_HIGH
	 * ch 4 - 7,  20 - 23  <--> (1) DMA_PRIO_MEDIUM
	 * ch 8 - 15, 24 - 31  <--> (2) DMA_PRIO_LOW
	 */
	for (i = 0; i < num_ch; i++)
	for (i = 0; i < num_ch; i++) {
		DCSR(i) = 0;
		dma_channels[i].prio = min((i & 0xf) >> 2, DMA_PRIO_LOW);
	}

	ret = request_irq(IRQ_DMA, dma_irq_handler, IRQF_DISABLED, "DMA", NULL);
	if (ret) {
		printk (KERN_CRIT "Wow!  Can't register IRQ for DMA\n");
		kfree(dma_channels);
		return ret;
	}

	num_dma_channels = num_ch;
	return 0;