|
@@ -986,6 +986,7 @@ static void rcar_dmac_free_chan_resources(struct dma_chan *chan)
|
|
{
|
|
{
|
|
struct rcar_dmac_chan *rchan = to_rcar_dmac_chan(chan);
|
|
struct rcar_dmac_chan *rchan = to_rcar_dmac_chan(chan);
|
|
struct rcar_dmac *dmac = to_rcar_dmac(chan->device);
|
|
struct rcar_dmac *dmac = to_rcar_dmac(chan->device);
|
|
|
|
+ struct rcar_dmac_chan_map *map = &rchan->map;
|
|
struct rcar_dmac_desc_page *page, *_page;
|
|
struct rcar_dmac_desc_page *page, *_page;
|
|
struct rcar_dmac_desc *desc;
|
|
struct rcar_dmac_desc *desc;
|
|
LIST_HEAD(list);
|
|
LIST_HEAD(list);
|
|
@@ -1019,6 +1020,13 @@ static void rcar_dmac_free_chan_resources(struct dma_chan *chan)
|
|
free_page((unsigned long)page);
|
|
free_page((unsigned long)page);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* Remove slave mapping if present. */
|
|
|
|
+ if (map->slave.xfer_size) {
|
|
|
|
+ dma_unmap_resource(chan->device->dev, map->addr,
|
|
|
|
+ map->slave.xfer_size, map->dir, 0);
|
|
|
|
+ map->slave.xfer_size = 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
pm_runtime_put(chan->device->dev);
|
|
pm_runtime_put(chan->device->dev);
|
|
}
|
|
}
|
|
|
|
|