diff options
author | Christoph Hellwig <hch@lst.de> | 2018-05-19 02:58:51 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2018-09-08 05:17:32 -0400 |
commit | f406f222d4b21e63b0ad24d4ddcb2b9745177b55 (patch) | |
tree | b3a51cd0ea52c459b2f7f6c82c5b903e7412b7de | |
parent | 37fca4bd018f9959cf28ea4a6da9f74ccc4d4025 (diff) |
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>
-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, | |||
188 | dma_sync(dma_addr_to_virt(dma_handle), size, dir); | 188 | dma_sync(dma_addr_to_virt(dma_handle), size, dir); |
189 | } | 189 | } |
190 | 190 | ||
191 | static void hexagon_sync_sg_for_device(struct device *dev, | ||
192 | struct scatterlist *sgl, int nents, enum dma_data_direction dir) | ||
193 | { | ||
194 | struct scatterlist *sg; | ||
195 | int i; | ||
196 | |||
197 | for_each_sg(sgl, sg, nents, i) | ||
198 | hexagon_sync_single_for_device(dev, sg_dma_address(sg), | ||
199 | sg->length, dir); | ||
200 | } | ||
201 | |||
202 | |||
191 | static int hexagon_mapping_error(struct device *dev, dma_addr_t dma_addr) | 203 | static int hexagon_mapping_error(struct device *dev, dma_addr_t dma_addr) |
192 | { | 204 | { |
193 | return dma_addr == HEXAGON_MAPPING_ERROR; | 205 | return dma_addr == HEXAGON_MAPPING_ERROR; |
@@ -199,6 +211,7 @@ const struct dma_map_ops hexagon_dma_ops = { | |||
199 | .map_sg = hexagon_map_sg, | 211 | .map_sg = hexagon_map_sg, |
200 | .map_page = hexagon_map_page, | 212 | .map_page = hexagon_map_page, |
201 | .sync_single_for_device = hexagon_sync_single_for_device, | 213 | .sync_single_for_device = hexagon_sync_single_for_device, |
214 | .sync_sg_for_device = hexagon_sync_sg_for_device, | ||
202 | .mapping_error = hexagon_mapping_error, | 215 | .mapping_error = hexagon_mapping_error, |
203 | }; | 216 | }; |
204 | 217 | ||