diff options
Diffstat (limited to 'arch/arm/mm/proc-mohawk.S')
-rw-r--r-- | arch/arm/mm/proc-mohawk.S | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S index 52b5fd74fbb3..caa31154e7db 100644 --- a/arch/arm/mm/proc-mohawk.S +++ b/arch/arm/mm/proc-mohawk.S | |||
@@ -186,15 +186,16 @@ ENTRY(mohawk_coherent_user_range) | |||
186 | mov pc, lr | 186 | mov pc, lr |
187 | 187 | ||
188 | /* | 188 | /* |
189 | * flush_kern_dcache_page(void *page) | 189 | * flush_kern_dcache_area(void *addr, size_t size) |
190 | * | 190 | * |
191 | * Ensure no D cache aliasing occurs, either with itself or | 191 | * Ensure no D cache aliasing occurs, either with itself or |
192 | * the I cache | 192 | * the I cache |
193 | * | 193 | * |
194 | * - addr - page aligned address | 194 | * - addr - kernel address |
195 | * - size - region size | ||
195 | */ | 196 | */ |
196 | ENTRY(mohawk_flush_kern_dcache_page) | 197 | ENTRY(mohawk_flush_kern_dcache_area) |
197 | add r1, r0, #PAGE_SZ | 198 | add r1, r0, r1 |
198 | 1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry | 199 | 1: mcr p15, 0, r0, c7, c14, 1 @ clean+invalidate D entry |
199 | add r0, r0, #CACHE_DLINESIZE | 200 | add r0, r0, #CACHE_DLINESIZE |
200 | cmp r0, r1 | 201 | cmp r0, r1 |
@@ -217,7 +218,7 @@ ENTRY(mohawk_flush_kern_dcache_page) | |||
217 | * | 218 | * |
218 | * (same as v4wb) | 219 | * (same as v4wb) |
219 | */ | 220 | */ |
220 | ENTRY(mohawk_dma_inv_range) | 221 | mohawk_dma_inv_range: |
221 | tst r0, #CACHE_DLINESIZE - 1 | 222 | tst r0, #CACHE_DLINESIZE - 1 |
222 | mcrne p15, 0, r0, c7, c10, 1 @ clean D entry | 223 | mcrne p15, 0, r0, c7, c10, 1 @ clean D entry |
223 | tst r1, #CACHE_DLINESIZE - 1 | 224 | tst r1, #CACHE_DLINESIZE - 1 |
@@ -240,7 +241,7 @@ ENTRY(mohawk_dma_inv_range) | |||
240 | * | 241 | * |
241 | * (same as v4wb) | 242 | * (same as v4wb) |
242 | */ | 243 | */ |
243 | ENTRY(mohawk_dma_clean_range) | 244 | mohawk_dma_clean_range: |
244 | bic r0, r0, #CACHE_DLINESIZE - 1 | 245 | bic r0, r0, #CACHE_DLINESIZE - 1 |
245 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 246 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry |
246 | add r0, r0, #CACHE_DLINESIZE | 247 | add r0, r0, #CACHE_DLINESIZE |
@@ -267,15 +268,39 @@ ENTRY(mohawk_dma_flush_range) | |||
267 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 268 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
268 | mov pc, lr | 269 | mov pc, lr |
269 | 270 | ||
271 | /* | ||
272 | * dma_map_area(start, size, dir) | ||
273 | * - start - kernel virtual start address | ||
274 | * - size - size of region | ||
275 | * - dir - DMA direction | ||
276 | */ | ||
277 | ENTRY(mohawk_dma_map_area) | ||
278 | add r1, r1, r0 | ||
279 | cmp r2, #DMA_TO_DEVICE | ||
280 | beq mohawk_dma_clean_range | ||
281 | bcs mohawk_dma_inv_range | ||
282 | b mohawk_dma_flush_range | ||
283 | ENDPROC(mohawk_dma_map_area) | ||
284 | |||
285 | /* | ||
286 | * dma_unmap_area(start, size, dir) | ||
287 | * - start - kernel virtual start address | ||
288 | * - size - size of region | ||
289 | * - dir - DMA direction | ||
290 | */ | ||
291 | ENTRY(mohawk_dma_unmap_area) | ||
292 | mov pc, lr | ||
293 | ENDPROC(mohawk_dma_unmap_area) | ||
294 | |||
270 | ENTRY(mohawk_cache_fns) | 295 | ENTRY(mohawk_cache_fns) |
271 | .long mohawk_flush_kern_cache_all | 296 | .long mohawk_flush_kern_cache_all |
272 | .long mohawk_flush_user_cache_all | 297 | .long mohawk_flush_user_cache_all |
273 | .long mohawk_flush_user_cache_range | 298 | .long mohawk_flush_user_cache_range |
274 | .long mohawk_coherent_kern_range | 299 | .long mohawk_coherent_kern_range |
275 | .long mohawk_coherent_user_range | 300 | .long mohawk_coherent_user_range |
276 | .long mohawk_flush_kern_dcache_page | 301 | .long mohawk_flush_kern_dcache_area |
277 | .long mohawk_dma_inv_range | 302 | .long mohawk_dma_map_area |
278 | .long mohawk_dma_clean_range | 303 | .long mohawk_dma_unmap_area |
279 | .long mohawk_dma_flush_range | 304 | .long mohawk_dma_flush_range |
280 | 305 | ||
281 | ENTRY(cpu_mohawk_dcache_clean_area) | 306 | ENTRY(cpu_mohawk_dcache_clean_area) |