diff options
Diffstat (limited to 'arch/mips/mm/dma-noncoherent.c')
-rw-r--r-- | arch/mips/mm/dma-noncoherent.c | 46 |
1 files changed, 8 insertions, 38 deletions
diff --git a/arch/mips/mm/dma-noncoherent.c b/arch/mips/mm/dma-noncoherent.c index 4ce02028a292..cd4ea8474f89 100644 --- a/arch/mips/mm/dma-noncoherent.c +++ b/arch/mips/mm/dma-noncoherent.c | |||
@@ -105,22 +105,7 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | |||
105 | { | 105 | { |
106 | unsigned long addr = (unsigned long) ptr; | 106 | unsigned long addr = (unsigned long) ptr; |
107 | 107 | ||
108 | switch (direction) { | 108 | __dma_sync(addr, size, direction); |
109 | case DMA_TO_DEVICE: | ||
110 | dma_cache_wback(addr, size); | ||
111 | break; | ||
112 | |||
113 | case DMA_FROM_DEVICE: | ||
114 | dma_cache_inv(addr, size); | ||
115 | break; | ||
116 | |||
117 | case DMA_BIDIRECTIONAL: | ||
118 | dma_cache_wback_inv(addr, size); | ||
119 | break; | ||
120 | |||
121 | default: | ||
122 | BUG(); | ||
123 | } | ||
124 | 109 | ||
125 | return virt_to_phys(ptr); | 110 | return virt_to_phys(ptr); |
126 | } | 111 | } |
@@ -133,22 +118,7 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | |||
133 | unsigned long addr; | 118 | unsigned long addr; |
134 | addr = dma_addr + PAGE_OFFSET; | 119 | addr = dma_addr + PAGE_OFFSET; |
135 | 120 | ||
136 | switch (direction) { | 121 | //__dma_sync(addr, size, direction); |
137 | case DMA_TO_DEVICE: | ||
138 | //dma_cache_wback(addr, size); | ||
139 | break; | ||
140 | |||
141 | case DMA_FROM_DEVICE: | ||
142 | //dma_cache_inv(addr, size); | ||
143 | break; | ||
144 | |||
145 | case DMA_BIDIRECTIONAL: | ||
146 | //dma_cache_wback_inv(addr, size); | ||
147 | break; | ||
148 | |||
149 | default: | ||
150 | BUG(); | ||
151 | } | ||
152 | } | 122 | } |
153 | 123 | ||
154 | EXPORT_SYMBOL(dma_unmap_single); | 124 | EXPORT_SYMBOL(dma_unmap_single); |
@@ -164,10 +134,11 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | |||
164 | unsigned long addr; | 134 | unsigned long addr; |
165 | 135 | ||
166 | addr = (unsigned long) page_address(sg->page); | 136 | addr = (unsigned long) page_address(sg->page); |
167 | if (addr) | 137 | if (addr) { |
168 | __dma_sync(addr + sg->offset, sg->length, direction); | 138 | __dma_sync(addr + sg->offset, sg->length, direction); |
169 | sg->dma_address = (dma_addr_t) | 139 | sg->dma_address = (dma_addr_t)page_to_phys(sg->page) |
170 | (page_to_phys(sg->page) + sg->offset); | 140 | + sg->offset; |
141 | } | ||
171 | } | 142 | } |
172 | 143 | ||
173 | return nents; | 144 | return nents; |
@@ -218,9 +189,8 @@ void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, | |||
218 | 189 | ||
219 | for (i = 0; i < nhwentries; i++, sg++) { | 190 | for (i = 0; i < nhwentries; i++, sg++) { |
220 | addr = (unsigned long) page_address(sg->page); | 191 | addr = (unsigned long) page_address(sg->page); |
221 | if (!addr) | 192 | if (addr) |
222 | continue; | 193 | __dma_sync(addr + sg->offset, sg->length, direction); |
223 | dma_cache_wback_inv(addr + sg->offset, sg->length); | ||
224 | } | 194 | } |
225 | } | 195 | } |
226 | 196 | ||