|
@@ -150,14 +150,11 @@ static void cppi_pool_free(struct cppi_channel *c)
|
|
|
c->last_processed = NULL;
|
|
|
}
|
|
|
|
|
|
-static int cppi_controller_start(struct dma_controller *c)
|
|
|
+static void cppi_controller_start(struct cppi *controller)
|
|
|
{
|
|
|
- struct cppi *controller;
|
|
|
void __iomem *tibase;
|
|
|
int i;
|
|
|
|
|
|
- controller = container_of(c, struct cppi, controller);
|
|
|
-
|
|
|
/* do whatever is necessary to start controller */
|
|
|
for (i = 0; i < ARRAY_SIZE(controller->tx); i++) {
|
|
|
controller->tx[i].transmit = true;
|
|
@@ -212,8 +209,6 @@ static int cppi_controller_start(struct dma_controller *c)
|
|
|
/* disable RNDIS mode, also host rx RNDIS autorequest */
|
|
|
musb_writel(tibase, DAVINCI_RNDIS_REG, 0);
|
|
|
musb_writel(tibase, DAVINCI_AUTOREQ_REG, 0);
|
|
|
-
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -222,14 +217,12 @@ static int cppi_controller_start(struct dma_controller *c)
|
|
|
* De-Init the DMA controller as necessary.
|
|
|
*/
|
|
|
|
|
|
-static int cppi_controller_stop(struct dma_controller *c)
|
|
|
+static void cppi_controller_stop(struct cppi *controller)
|
|
|
{
|
|
|
- struct cppi *controller;
|
|
|
void __iomem *tibase;
|
|
|
int i;
|
|
|
struct musb *musb;
|
|
|
|
|
|
- controller = container_of(c, struct cppi, controller);
|
|
|
musb = controller->musb;
|
|
|
|
|
|
tibase = controller->tibase;
|
|
@@ -255,8 +248,6 @@ static int cppi_controller_stop(struct dma_controller *c)
|
|
|
/*disable tx/rx cppi */
|
|
|
musb_writel(tibase, DAVINCI_TXCPPI_CTRL_REG, DAVINCI_DMA_CTRL_DISABLE);
|
|
|
musb_writel(tibase, DAVINCI_RXCPPI_CTRL_REG, DAVINCI_DMA_CTRL_DISABLE);
|
|
|
-
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/* While dma channel is allocated, we only want the core irqs active
|
|
@@ -1321,8 +1312,6 @@ struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *mr
|
|
|
controller->tibase = mregs - DAVINCI_BASE_OFFSET;
|
|
|
|
|
|
controller->musb = musb;
|
|
|
- controller->controller.start = cppi_controller_start;
|
|
|
- controller->controller.stop = cppi_controller_stop;
|
|
|
controller->controller.channel_alloc = cppi_channel_allocate;
|
|
|
controller->controller.channel_release = cppi_channel_release;
|
|
|
controller->controller.channel_program = cppi_channel_program;
|
|
@@ -1351,6 +1340,7 @@ struct dma_controller *dma_controller_create(struct musb *musb, void __iomem *mr
|
|
|
controller->irq = irq;
|
|
|
}
|
|
|
|
|
|
+ cppi_controller_start(controller);
|
|
|
return &controller->controller;
|
|
|
}
|
|
|
|
|
@@ -1363,6 +1353,8 @@ void dma_controller_destroy(struct dma_controller *c)
|
|
|
|
|
|
cppi = container_of(c, struct cppi, controller);
|
|
|
|
|
|
+ cppi_controller_stop(cppi);
|
|
|
+
|
|
|
if (cppi->irq)
|
|
|
free_irq(cppi->irq, cppi->musb);
|
|
|
|