diff options
Diffstat (limited to 'arch/mips/mm/c-r4k.c')
-rw-r--r-- | arch/mips/mm/c-r4k.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c index 71df3390c07b..6e99665ae860 100644 --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c | |||
@@ -543,12 +543,8 @@ struct flush_icache_range_args { | |||
543 | unsigned long end; | 543 | unsigned long end; |
544 | }; | 544 | }; |
545 | 545 | ||
546 | static inline void local_r4k_flush_icache_range(void *args) | 546 | static inline void local_r4k_flush_icache_range(unsigned long start, unsigned long end) |
547 | { | 547 | { |
548 | struct flush_icache_range_args *fir_args = args; | ||
549 | unsigned long start = fir_args->start; | ||
550 | unsigned long end = fir_args->end; | ||
551 | |||
552 | if (!cpu_has_ic_fills_f_dc) { | 548 | if (!cpu_has_ic_fills_f_dc) { |
553 | if (end - start >= dcache_size) { | 549 | if (end - start >= dcache_size) { |
554 | r4k_blast_dcache(); | 550 | r4k_blast_dcache(); |
@@ -564,6 +560,15 @@ static inline void local_r4k_flush_icache_range(void *args) | |||
564 | protected_blast_icache_range(start, end); | 560 | protected_blast_icache_range(start, end); |
565 | } | 561 | } |
566 | 562 | ||
563 | static inline void local_r4k_flush_icache_range_ipi(void *args) | ||
564 | { | ||
565 | struct flush_icache_range_args *fir_args = args; | ||
566 | unsigned long start = fir_args->start; | ||
567 | unsigned long end = fir_args->end; | ||
568 | |||
569 | local_r4k_flush_icache_range(start, end); | ||
570 | } | ||
571 | |||
567 | static void r4k_flush_icache_range(unsigned long start, unsigned long end) | 572 | static void r4k_flush_icache_range(unsigned long start, unsigned long end) |
568 | { | 573 | { |
569 | struct flush_icache_range_args args; | 574 | struct flush_icache_range_args args; |
@@ -571,7 +576,7 @@ static void r4k_flush_icache_range(unsigned long start, unsigned long end) | |||
571 | args.start = start; | 576 | args.start = start; |
572 | args.end = end; | 577 | args.end = end; |
573 | 578 | ||
574 | r4k_on_each_cpu(local_r4k_flush_icache_range, &args, 1); | 579 | r4k_on_each_cpu(local_r4k_flush_icache_range_ipi, &args, 1); |
575 | instruction_hazard(); | 580 | instruction_hazard(); |
576 | } | 581 | } |
577 | 582 | ||
@@ -1375,6 +1380,7 @@ void __cpuinit r4k_cache_init(void) | |||
1375 | local_flush_data_cache_page = local_r4k_flush_data_cache_page; | 1380 | local_flush_data_cache_page = local_r4k_flush_data_cache_page; |
1376 | flush_data_cache_page = r4k_flush_data_cache_page; | 1381 | flush_data_cache_page = r4k_flush_data_cache_page; |
1377 | flush_icache_range = r4k_flush_icache_range; | 1382 | flush_icache_range = r4k_flush_icache_range; |
1383 | local_flush_icache_range = local_r4k_flush_icache_range; | ||
1378 | 1384 | ||
1379 | #if defined(CONFIG_DMA_NONCOHERENT) | 1385 | #if defined(CONFIG_DMA_NONCOHERENT) |
1380 | if (coherentio) { | 1386 | if (coherentio) { |