Commit 3750c140 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'fixes' of git://git.infradead.org/users/vkoul/slave-dma

Pull slave-dma fixes from Vinod Koul:
 "This request brings you two small fixes.  First one for fixing
  dereference of freed descriptor and second for fixing sdma bindings
  for it to work for imx25.

  I was planning to send this about 10days ago but then I had to proceed
  on my paternity leave and didnt get chance to send this.  Now got a
  bit of time from dady duties :)"

* 'fixes' of git://git.infradead.org/users/vkoul/slave-dma:
  dma: sdma: Add imx25 compatible
  dma: ste_dma40: don't dereference free:d descriptor
parents 751a03c3 63edea16
* Freescale Smart Direct Memory Access (SDMA) Controller for i.MX * Freescale Smart Direct Memory Access (SDMA) Controller for i.MX
Required properties: Required properties:
- compatible : Should be "fsl,imx31-sdma", "fsl,imx31-to1-sdma", - compatible : Should be one of
"fsl,imx31-to2-sdma", "fsl,imx35-sdma", "fsl,imx35-to1-sdma", "fsl,imx25-sdma"
"fsl,imx35-to2-sdma", "fsl,imx51-sdma", "fsl,imx53-sdma" or "fsl,imx31-sdma", "fsl,imx31-to1-sdma", "fsl,imx31-to2-sdma"
"fsl,imx6q-sdma". The -to variants should be preferred since they "fsl,imx35-sdma", "fsl,imx35-to1-sdma", "fsl,imx35-to2-sdma"
allow to determnine the correct ROM script addresses needed for "fsl,imx51-sdma"
the driver to work without additional firmware. "fsl,imx53-sdma"
"fsl,imx6q-sdma"
The -to variants should be preferred since they allow to determnine the
correct ROM script addresses needed for the driver to work without additional
firmware.
- reg : Should contain SDMA registers location and length - reg : Should contain SDMA registers location and length
- interrupts : Should contain SDMA interrupt - interrupts : Should contain SDMA interrupt
- #dma-cells : Must be <3>. - #dma-cells : Must be <3>.
......
...@@ -449,6 +449,7 @@ static const struct of_device_id sdma_dt_ids[] = { ...@@ -449,6 +449,7 @@ static const struct of_device_id sdma_dt_ids[] = {
{ .compatible = "fsl,imx51-sdma", .data = &sdma_imx51, }, { .compatible = "fsl,imx51-sdma", .data = &sdma_imx51, },
{ .compatible = "fsl,imx35-sdma", .data = &sdma_imx35, }, { .compatible = "fsl,imx35-sdma", .data = &sdma_imx35, },
{ .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, }, { .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, },
{ .compatible = "fsl,imx25-sdma", .data = &sdma_imx25, },
{ /* sentinel */ } { /* sentinel */ }
}; };
MODULE_DEVICE_TABLE(of, sdma_dt_ids); MODULE_DEVICE_TABLE(of, sdma_dt_ids);
......
...@@ -1641,6 +1641,7 @@ static void dma_tasklet(unsigned long data) ...@@ -1641,6 +1641,7 @@ static void dma_tasklet(unsigned long data)
struct d40_chan *d40c = (struct d40_chan *) data; struct d40_chan *d40c = (struct d40_chan *) data;
struct d40_desc *d40d; struct d40_desc *d40d;
unsigned long flags; unsigned long flags;
bool callback_active;
dma_async_tx_callback callback; dma_async_tx_callback callback;
void *callback_param; void *callback_param;
...@@ -1668,6 +1669,7 @@ static void dma_tasklet(unsigned long data) ...@@ -1668,6 +1669,7 @@ static void dma_tasklet(unsigned long data)
} }
/* Callback to client */ /* Callback to client */
callback_active = !!(d40d->txd.flags & DMA_PREP_INTERRUPT);
callback = d40d->txd.callback; callback = d40d->txd.callback;
callback_param = d40d->txd.callback_param; callback_param = d40d->txd.callback_param;
...@@ -1690,7 +1692,7 @@ static void dma_tasklet(unsigned long data) ...@@ -1690,7 +1692,7 @@ static void dma_tasklet(unsigned long data)
spin_unlock_irqrestore(&d40c->lock, flags); spin_unlock_irqrestore(&d40c->lock, flags);
if (callback && (d40d->txd.flags & DMA_PREP_INTERRUPT)) if (callback_active && callback)
callback(callback_param); callback(callback_param);
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment