diff options
Diffstat (limited to 'arch/sh/mm/flush-sh4.c')
-rw-r--r-- | arch/sh/mm/flush-sh4.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/arch/sh/mm/flush-sh4.c b/arch/sh/mm/flush-sh4.c index edefc53891a..1b6b6a12a99 100644 --- a/arch/sh/mm/flush-sh4.c +++ b/arch/sh/mm/flush-sh4.c @@ -10,10 +10,11 @@ */ void __weak __flush_wback_region(void *start, int size) { - unsigned long v, cnt, end; + reg_size_t aligned_start, v, cnt, end; - v = (unsigned long)start & ~(L1_CACHE_BYTES-1); - end = ((unsigned long)start + size + L1_CACHE_BYTES-1) + aligned_start = register_align(start); + v = aligned_start & ~(L1_CACHE_BYTES-1); + end = (aligned_start + size + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); cnt = (end - v) / L1_CACHE_BYTES; @@ -52,10 +53,11 @@ void __weak __flush_wback_region(void *start, int size) */ void __weak __flush_purge_region(void *start, int size) { - unsigned long v, cnt, end; + reg_size_t aligned_start, v, cnt, end; - v = (unsigned long)start & ~(L1_CACHE_BYTES-1); - end = ((unsigned long)start + size + L1_CACHE_BYTES-1) + aligned_start = register_align(start); + v = aligned_start & ~(L1_CACHE_BYTES-1); + end = (aligned_start + size + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); cnt = (end - v) / L1_CACHE_BYTES; @@ -90,10 +92,11 @@ void __weak __flush_purge_region(void *start, int size) */ void __weak __flush_invalidate_region(void *start, int size) { - unsigned long v, cnt, end; + reg_size_t aligned_start, v, cnt, end; - v = (unsigned long)start & ~(L1_CACHE_BYTES-1); - end = ((unsigned long)start + size + L1_CACHE_BYTES-1) + aligned_start = register_align(start); + v = aligned_start & ~(L1_CACHE_BYTES-1); + end = (aligned_start + size + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); cnt = (end - v) / L1_CACHE_BYTES; |