patch-2.4.20 linux-2.4.20/arch/mips64/mm/r4xx0.c
Next file: linux-2.4.20/arch/mips64/mm/r5k-sc.c
Previous file: linux-2.4.20/arch/mips64/mm/pg-sb1.c
Back to the patch index
Back to the overall index
- Lines: 142
- Date:
Thu Nov 28 15:53:10 2002
- Orig file:
linux-2.4.19/arch/mips64/mm/r4xx0.c
- Orig date:
Fri Aug 2 17:39:43 2002
diff -urN linux-2.4.19/arch/mips64/mm/r4xx0.c linux-2.4.20/arch/mips64/mm/r4xx0.c
@@ -136,10 +136,10 @@
* Hit_Invalidate_D and Create_Dirty_Excl_D should only be
* executed if there is no other dcache activity. If the dcache is
* accessed for another instruction immeidately preceding when these
- * cache instructions are executing, it is possible that the dcache
- * tag match outputs used by these cache instructions will be
+ * cache instructions are executing, it is possible that the dcache
+ * tag match outputs used by these cache instructions will be
* incorrect. These cache instructions should be preceded by at least
- * four instructions that are not any kind of load or store
+ * four instructions that are not any kind of load or store
* instruction.
*
* This is not allowed: lw
@@ -1237,7 +1237,7 @@
* for every cache flush operation. So we do indexed flushes
* in that case, which doesn't overly flush the cache too much.
*/
- if (CPU_CONTEXT(smp_processor_id(), mm) !=
+ if (CPU_CONTEXT(smp_processor_id(), mm) !=
CPU_CONTEXT(smp_processor_id(), current->mm)) {
/* Do indexed flush, too much work to get the (possible)
* tlb refills to work correctly.
@@ -1285,7 +1285,7 @@
* for every cache flush operation. So we do indexed flushes
* in that case, which doesn't overly flush the cache too much.
*/
- if (CPU_CONTEXT(smp_processor_id(), mm) !=
+ if (CPU_CONTEXT(smp_processor_id(), mm) !=
CPU_CONTEXT(smp_processor_id(), current->mm)) {
/*
* Do indexed flush, too much work to get the (possible)
@@ -1335,7 +1335,7 @@
* for every cache flush operation. So we do indexed flushes
* in that case, which doesn't overly flush the cache too much.
*/
- if (CPU_CONTEXT(smp_processor_id(), mm) !=
+ if (CPU_CONTEXT(smp_processor_id(), mm) !=
CPU_CONTEXT(smp_processor_id(), current->mm)) {
/*
* Do indexed flush, too much work to get the (possible)
@@ -1385,7 +1385,7 @@
* for every cache flush operation. So we do indexed flushes
* in that case, which doesn't overly flush the cache too much.
*/
- if (CPU_CONTEXT(smp_processor_id(), mm) !=
+ if (CPU_CONTEXT(smp_processor_id(), mm) !=
CPU_CONTEXT(smp_processor_id(), current->mm)) {
/*
* Do indexed flush, too much work to get the (possible)
@@ -1434,7 +1434,7 @@
* for every cache flush operation. So we do indexed flushes
* in that case, which doesn't overly flush the cache too much.
*/
- if (CPU_CONTEXT(smp_processor_id(), mm) !=
+ if (CPU_CONTEXT(smp_processor_id(), mm) !=
CPU_CONTEXT(smp_processor_id(), current->mm)) {
/* Do indexed flush, too much work to get the (possible)
* tlb refills to work correctly.
@@ -1746,11 +1746,6 @@
}
}
-static void r4k_dma_cache_wback(unsigned long addr, unsigned long size)
-{
- panic("r4k_dma_cache called - should not happen.");
-}
-
/*
* While we're protected against bad userland addresses we don't care
* very much about what happens in that case. Usually a segmentation
@@ -1877,7 +1872,7 @@
} else {
get_new_mmu_context(mm, smp_processor_id());
if(mm == current->mm)
- set_entryhi(CPU_CONTEXT(smp_processor_id(),
+ set_entryhi(CPU_CONTEXT(smp_processor_id(),
mm) & 0xff);
}
__restore_flags(flags);
@@ -2152,7 +2147,7 @@
}
_flush_icache_page = r4k_flush_icache_page_p;
_dma_cache_wback_inv = r4k_dma_cache_wback_inv_pc;
- _dma_cache_wback = r4k_dma_cache_wback;
+ _dma_cache_wback = r4k_dma_cache_wback_inv_pc;
_dma_cache_inv = r4k_dma_cache_inv_pc;
}
@@ -2241,11 +2236,12 @@
}
_flush_icache_page = r4k_flush_icache_page_s;
_dma_cache_wback_inv = r4k_dma_cache_wback_inv_sc;
- _dma_cache_wback = r4k_dma_cache_wback;
+ _dma_cache_wback = r4k_dma_cache_wback_inv_sc;
_dma_cache_inv = r4k_dma_cache_inv_sc;
}
typedef int (*probe_func_t)(unsigned long);
+extern int r5k_sc_init(void);
static inline void __init setup_scache(unsigned int config)
{
@@ -2256,23 +2252,30 @@
probe_scache_kseg1 = (probe_func_t) (KSEG1ADDR(&probe_scache));
sc_present = probe_scache_kseg1(config);
- if (sc_present) {
- setup_scache_funcs();
+ if (!sc_present) {
+ setup_noscache_funcs();
return;
}
- setup_noscache_funcs();
+ switch(mips_cpu.cputype) {
+ case CPU_R5000:
+ case CPU_NEVADA:
+ setup_noscache_funcs();
+#if defined(CONFIG_CPU_R5000) || defined(CONFIG_CPU_NEVADA)
+ r5k_sc_init();
+#endif
+ break;
+ default:
+ setup_scache_funcs();
+ }
+
}
void __init ld_mmu_r4xx0(void)
{
unsigned long config = read_32bit_cp0_register(CP0_CONFIG);
-#ifdef CONFIG_MIPS_UNCACHED
- change_cp0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
-#else
- change_cp0_config(CONF_CM_CMASK, CONF_CM_CACHABLE_NONCOHERENT);
-#endif /* UNCACHED */
+ change_cp0_config(CONF_CM_CMASK | CONF_CU, CONF_CM_DEFAULT);
probe_icache(config);
probe_dcache(config);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)