diff options
| -rw-r--r-- | arch/arm/include/asm/cacheflush.h | 7 | ||||
| -rw-r--r-- | arch/arm/mm/proc-syms.c | 1 | ||||
| -rw-r--r-- | drivers/mtd/maps/pxa2xx-flash.c | 13 |
3 files changed, 11 insertions, 10 deletions
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index 73eceb87e588..3db7acd39a62 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
| @@ -465,13 +465,6 @@ static inline void flush_kernel_dcache_page(struct page *page) | |||
| 465 | */ | 465 | */ |
| 466 | #define flush_icache_page(vma,page) do { } while (0) | 466 | #define flush_icache_page(vma,page) do { } while (0) |
| 467 | 467 | ||
| 468 | static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt, | ||
| 469 | unsigned offset, size_t size) | ||
| 470 | { | ||
| 471 | const void *start = (void __force *)virt + offset; | ||
| 472 | dmac_inv_range(start, start + size); | ||
| 473 | } | ||
| 474 | |||
| 475 | /* | 468 | /* |
| 476 | * flush_cache_vmap() is used when creating mappings (eg, via vmap, | 469 | * flush_cache_vmap() is used when creating mappings (eg, via vmap, |
| 477 | * vmalloc, ioremap etc) in kernel space for pages. On non-VIPT | 470 | * vmalloc, ioremap etc) in kernel space for pages. On non-VIPT |
diff --git a/arch/arm/mm/proc-syms.c b/arch/arm/mm/proc-syms.c index ac5c80062b70..f604aa8acae9 100644 --- a/arch/arm/mm/proc-syms.c +++ b/arch/arm/mm/proc-syms.c | |||
| @@ -28,7 +28,6 @@ EXPORT_SYMBOL(__cpuc_flush_user_all); | |||
| 28 | EXPORT_SYMBOL(__cpuc_flush_user_range); | 28 | EXPORT_SYMBOL(__cpuc_flush_user_range); |
| 29 | EXPORT_SYMBOL(__cpuc_coherent_kern_range); | 29 | EXPORT_SYMBOL(__cpuc_coherent_kern_range); |
| 30 | EXPORT_SYMBOL(__cpuc_flush_dcache_page); | 30 | EXPORT_SYMBOL(__cpuc_flush_dcache_page); |
| 31 | EXPORT_SYMBOL(dmac_inv_range); /* because of flush_ioremap_region() */ | ||
| 32 | #else | 31 | #else |
| 33 | EXPORT_SYMBOL(cpu_cache); | 32 | EXPORT_SYMBOL(cpu_cache); |
| 34 | #endif | 33 | #endif |
diff --git a/drivers/mtd/maps/pxa2xx-flash.c b/drivers/mtd/maps/pxa2xx-flash.c index 74fa075c838a..b13f6417b5b2 100644 --- a/drivers/mtd/maps/pxa2xx-flash.c +++ b/drivers/mtd/maps/pxa2xx-flash.c | |||
| @@ -20,14 +20,23 @@ | |||
| 20 | 20 | ||
| 21 | #include <asm/io.h> | 21 | #include <asm/io.h> |
| 22 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
| 23 | #include <asm/cacheflush.h> | ||
| 24 | 23 | ||
| 25 | #include <asm/mach/flash.h> | 24 | #include <asm/mach/flash.h> |
| 26 | 25 | ||
| 26 | #define CACHELINESIZE 32 | ||
| 27 | |||
| 27 | static void pxa2xx_map_inval_cache(struct map_info *map, unsigned long from, | 28 | static void pxa2xx_map_inval_cache(struct map_info *map, unsigned long from, |
| 28 | ssize_t len) | 29 | ssize_t len) |
| 29 | { | 30 | { |
| 30 | flush_ioremap_region(map->phys, map->cached, from, len); | 31 | unsigned long start = (unsigned long)map->cached + from; |
| 32 | unsigned long end = start + len; | ||
| 33 | |||
| 34 | start &= ~(CACHELINESIZE - 1); | ||
| 35 | while (start < end) { | ||
| 36 | /* invalidate D cache line */ | ||
| 37 | asm volatile ("mcr p15, 0, %0, c7, c6, 1" : : "r" (start)); | ||
| 38 | start += CACHELINESIZE; | ||
| 39 | } | ||
| 31 | } | 40 | } |
| 32 | 41 | ||
| 33 | struct pxa2xx_flash_info { | 42 | struct pxa2xx_flash_info { |
