diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/mtd/maps/pxa2xx-flash.c | 13 |
1 files changed, 11 insertions, 2 deletions
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 { |
