diff options
Diffstat (limited to 'arch/arm/mm/cache-v6.S')
-rw-r--r-- | arch/arm/mm/cache-v6.S | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S index 73b4a8b66a5..6b5441d737b 100644 --- a/arch/arm/mm/cache-v6.S +++ b/arch/arm/mm/cache-v6.S | |||
@@ -272,6 +272,11 @@ v6_dma_clean_range: | |||
272 | * - end - virtual end address of region | 272 | * - end - virtual end address of region |
273 | */ | 273 | */ |
274 | ENTRY(v6_dma_flush_range) | 274 | ENTRY(v6_dma_flush_range) |
275 | #ifdef CONFIG_CACHE_FLUSH_RANGE_LIMIT | ||
276 | sub r2, r1, r0 | ||
277 | cmp r2, #CONFIG_CACHE_FLUSH_RANGE_LIMIT | ||
278 | bhi v6_dma_flush_dcache_all | ||
279 | #endif | ||
275 | #ifdef CONFIG_DMA_CACHE_RWFO | 280 | #ifdef CONFIG_DMA_CACHE_RWFO |
276 | ldrb r2, [r0] @ read for ownership | 281 | ldrb r2, [r0] @ read for ownership |
277 | strb r2, [r0] @ write for ownership | 282 | strb r2, [r0] @ write for ownership |
@@ -294,6 +299,18 @@ ENTRY(v6_dma_flush_range) | |||
294 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer | 299 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer |
295 | mov pc, lr | 300 | mov pc, lr |
296 | 301 | ||
302 | #ifdef CONFIG_CACHE_FLUSH_RANGE_LIMIT | ||
303 | v6_dma_flush_dcache_all: | ||
304 | mov r0, #0 | ||
305 | #ifdef HARVARD_CACHE | ||
306 | mcr p15, 0, r0, c7, c14, 0 @ D cache clean+invalidate | ||
307 | #else | ||
308 | mcr p15, 0, r0, c7, c15, 0 @ Cache clean+invalidate | ||
309 | #endif | ||
310 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer | ||
311 | mov pc, lr | ||
312 | #endif | ||
313 | |||
297 | /* | 314 | /* |
298 | * dma_map_area(start, size, dir) | 315 | * dma_map_area(start, size, dir) |
299 | * - start - kernel virtual start address | 316 | * - start - kernel virtual start address |