diff options
author | Christoph Hellwig <hch@lst.de> | 2018-05-19 08:58:51 +0200 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2018-09-08 11:17:32 +0200 |
commit | f406f222d4b21e63b0ad24d4ddcb2b9745177b55 (patch) | |
tree | b3a51cd0ea52c459b2f7f6c82c5b903e7412b7de /arch/hexagon/kernel | |
parent | hexagon: remove the sync_single_for_cpu DMA operation (diff) | |
download | linux-f406f222d4b21e63b0ad24d4ddcb2b9745177b55.tar.xz linux-f406f222d4b21e63b0ad24d4ddcb2b9745177b55.zip |
hexagon: implement the sync_sg_for_device DMA operation
This methods needs to provide the equivalent of sync_single_for_device
for each S/G list element, but was missing.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'arch/hexagon/kernel')
-rw-r--r-- | arch/hexagon/kernel/dma.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/hexagon/kernel/dma.c b/arch/hexagon/kernel/dma.c index d2b717f352f4..9e46556a227d 100644 --- a/arch/hexagon/kernel/dma.c +++ b/arch/hexagon/kernel/dma.c @@ -188,6 +188,18 @@ static void hexagon_sync_single_for_device(struct device *dev, dma_sync(dma_addr_to_virt(dma_handle), size, dir); } +static void hexagon_sync_sg_for_device(struct device *dev, + struct scatterlist *sgl, int nents, enum dma_data_direction dir) +{ + struct scatterlist *sg; + int i; + + for_each_sg(sgl, sg, nents, i) + hexagon_sync_single_for_device(dev, sg_dma_address(sg), + sg->length, dir); +} + + static int hexagon_mapping_error(struct device *dev, dma_addr_t dma_addr) { return dma_addr == HEXAGON_MAPPING_ERROR; @@ -199,6 +211,7 @@ const struct dma_map_ops hexagon_dma_ops = { .map_sg = hexagon_map_sg, .map_page = hexagon_map_page, .sync_single_for_device = hexagon_sync_single_for_device, + .sync_sg_for_device = hexagon_sync_sg_for_device, .mapping_error = hexagon_mapping_error, }; |