diff options
Diffstat (limited to 'arch/powerpc/kernel/dma.c')
-rw-r--r-- | arch/powerpc/kernel/dma.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c index e64a6016fba7..6877e3fa95bb 100644 --- a/arch/powerpc/kernel/dma.c +++ b/arch/powerpc/kernel/dma.c | |||
@@ -203,6 +203,10 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, | |||
203 | for_each_sg(sgl, sg, nents, i) { | 203 | for_each_sg(sgl, sg, nents, i) { |
204 | sg->dma_address = sg_phys(sg) + get_dma_offset(dev); | 204 | sg->dma_address = sg_phys(sg) + get_dma_offset(dev); |
205 | sg->dma_length = sg->length; | 205 | sg->dma_length = sg->length; |
206 | |||
207 | if (attrs & DMA_ATTR_SKIP_CPU_SYNC) | ||
208 | continue; | ||
209 | |||
206 | __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction); | 210 | __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction); |
207 | } | 211 | } |
208 | 212 | ||
@@ -235,7 +239,10 @@ static inline dma_addr_t dma_direct_map_page(struct device *dev, | |||
235 | unsigned long attrs) | 239 | unsigned long attrs) |
236 | { | 240 | { |
237 | BUG_ON(dir == DMA_NONE); | 241 | BUG_ON(dir == DMA_NONE); |
238 | __dma_sync_page(page, offset, size, dir); | 242 | |
243 | if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC)) | ||
244 | __dma_sync_page(page, offset, size, dir); | ||
245 | |||
239 | return page_to_phys(page) + offset + get_dma_offset(dev); | 246 | return page_to_phys(page) + offset + get_dma_offset(dev); |
240 | } | 247 | } |
241 | 248 | ||