diff options
Diffstat (limited to 'arch/mips/mm/c-r4k.c')
-rw-r--r-- | arch/mips/mm/c-r4k.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c index 7f660dc67596..fbea4432f3f2 100644 --- a/arch/mips/mm/c-r4k.c +++ b/arch/mips/mm/c-r4k.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <asm/cacheflush.h> /* for run_uncached() */ | 37 | #include <asm/cacheflush.h> /* for run_uncached() */ |
38 | #include <asm/traps.h> | 38 | #include <asm/traps.h> |
39 | #include <asm/dma-coherence.h> | 39 | #include <asm/dma-coherence.h> |
40 | #include <asm/mips-cm.h> | ||
40 | 41 | ||
41 | /* | 42 | /* |
42 | * Special Variant of smp_call_function for use by cache functions: | 43 | * Special Variant of smp_call_function for use by cache functions: |
@@ -51,9 +52,16 @@ static inline void r4k_on_each_cpu(void (*func) (void *info), void *info) | |||
51 | { | 52 | { |
52 | preempt_disable(); | 53 | preempt_disable(); |
53 | 54 | ||
54 | #ifndef CONFIG_MIPS_MT_SMP | 55 | /* |
55 | smp_call_function(func, info, 1); | 56 | * The Coherent Manager propagates address-based cache ops to other |
56 | #endif | 57 | * cores but not index-based ops. However, r4k_on_each_cpu is used |
58 | * in both cases so there is no easy way to tell what kind of op is | ||
59 | * executed to the other cores. The best we can probably do is | ||
60 | * to restrict that call when a CM is not present because both | ||
61 | * CM-based SMP protocols (CMP & CPS) restrict index-based cache ops. | ||
62 | */ | ||
63 | if (!mips_cm_present()) | ||
64 | smp_call_function_many(&cpu_foreign_map, func, info, 1); | ||
57 | func(info); | 65 | func(info); |
58 | preempt_enable(); | 66 | preempt_enable(); |
59 | } | 67 | } |
@@ -937,7 +945,9 @@ static void b5k_instruction_hazard(void) | |||
937 | } | 945 | } |
938 | 946 | ||
939 | static char *way_string[] = { NULL, "direct mapped", "2-way", | 947 | static char *way_string[] = { NULL, "direct mapped", "2-way", |
940 | "3-way", "4-way", "5-way", "6-way", "7-way", "8-way" | 948 | "3-way", "4-way", "5-way", "6-way", "7-way", "8-way", |
949 | "9-way", "10-way", "11-way", "12-way", | ||
950 | "13-way", "14-way", "15-way", "16-way", | ||
941 | }; | 951 | }; |
942 | 952 | ||
943 | static void probe_pcache(void) | 953 | static void probe_pcache(void) |