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) { |
