Commit abeb7521 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'dmaengine-fix-4.16-rc5' of git://git.infradead.org/users/vkoul/slave-dma

Pull dmaengine fixes from Vinod Koul:
 "Two small fixes are for this cycle:

   - fix max_chunk_size for rcar-dmac for R-Car Gen3

   - fix clock resource of mv_xor_v2"

* tag 'dmaengine-fix-4.16-rc5' of git://git.infradead.org/users/vkoul/slave-dma:
  dmaengine: mv_xor_v2: Fix clock resource by adding a register clock
  dmaengine: rcar-dmac: fix max_chunk_size for R-Car Gen3
parents d43be80a 3cd2c313
...@@ -11,7 +11,11 @@ Required properties: ...@@ -11,7 +11,11 @@ Required properties:
interrupts. interrupts.
Optional properties: Optional properties:
- clocks: Optional reference to the clock used by the XOR engine. - clocks: Optional reference to the clocks used by the XOR engine.
- clock-names: mandatory if there is a second clock, in this case the
name must be "core" for the first clock and "reg" for the second
one
Example: Example:
......
...@@ -163,6 +163,7 @@ struct mv_xor_v2_device { ...@@ -163,6 +163,7 @@ struct mv_xor_v2_device {
void __iomem *dma_base; void __iomem *dma_base;
void __iomem *glob_base; void __iomem *glob_base;
struct clk *clk; struct clk *clk;
struct clk *reg_clk;
struct tasklet_struct irq_tasklet; struct tasklet_struct irq_tasklet;
struct list_head free_sw_desc; struct list_head free_sw_desc;
struct dma_device dmadev; struct dma_device dmadev;
...@@ -749,13 +750,26 @@ static int mv_xor_v2_probe(struct platform_device *pdev) ...@@ -749,13 +750,26 @@ static int mv_xor_v2_probe(struct platform_device *pdev)
if (ret) if (ret)
return ret; return ret;
xor_dev->reg_clk = devm_clk_get(&pdev->dev, "reg");
if (PTR_ERR(xor_dev->reg_clk) != -ENOENT) {
if (!IS_ERR(xor_dev->reg_clk)) {
ret = clk_prepare_enable(xor_dev->reg_clk);
if (ret)
return ret;
} else {
return PTR_ERR(xor_dev->reg_clk);
}
}
xor_dev->clk = devm_clk_get(&pdev->dev, NULL); xor_dev->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER) if (IS_ERR(xor_dev->clk) && PTR_ERR(xor_dev->clk) == -EPROBE_DEFER) {
return -EPROBE_DEFER; ret = EPROBE_DEFER;
goto disable_reg_clk;
}
if (!IS_ERR(xor_dev->clk)) { if (!IS_ERR(xor_dev->clk)) {
ret = clk_prepare_enable(xor_dev->clk); ret = clk_prepare_enable(xor_dev->clk);
if (ret) if (ret)
return ret; goto disable_reg_clk;
} }
ret = platform_msi_domain_alloc_irqs(&pdev->dev, 1, ret = platform_msi_domain_alloc_irqs(&pdev->dev, 1,
...@@ -866,8 +880,9 @@ static int mv_xor_v2_probe(struct platform_device *pdev) ...@@ -866,8 +880,9 @@ static int mv_xor_v2_probe(struct platform_device *pdev)
free_msi_irqs: free_msi_irqs:
platform_msi_domain_free_irqs(&pdev->dev); platform_msi_domain_free_irqs(&pdev->dev);
disable_clk: disable_clk:
if (!IS_ERR(xor_dev->clk))
clk_disable_unprepare(xor_dev->clk); clk_disable_unprepare(xor_dev->clk);
disable_reg_clk:
clk_disable_unprepare(xor_dev->reg_clk);
return ret; return ret;
} }
......
...@@ -917,7 +917,7 @@ rcar_dmac_chan_prep_sg(struct rcar_dmac_chan *chan, struct scatterlist *sgl, ...@@ -917,7 +917,7 @@ rcar_dmac_chan_prep_sg(struct rcar_dmac_chan *chan, struct scatterlist *sgl,
rcar_dmac_chan_configure_desc(chan, desc); rcar_dmac_chan_configure_desc(chan, desc);
max_chunk_size = (RCAR_DMATCR_MASK + 1) << desc->xfer_shift; max_chunk_size = RCAR_DMATCR_MASK << desc->xfer_shift;
/* /*
* Allocate and fill the transfer chunk descriptors. We own the only * Allocate and fill the transfer chunk descriptors. We own the only
......
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