patch-2.4.25 linux-2.4.25/arch/mips/mm/c-sb1.c
Next file: linux-2.4.25/arch/mips/mm/c-tx39.c
Previous file: linux-2.4.25/arch/mips/mm/c-r4k.c
Back to the patch index
Back to the overall index
- Lines: 98
- Date:
2004-02-18 05:36:30.000000000 -0800
- Orig file:
linux-2.4.24/arch/mips/mm/c-sb1.c
- Orig date:
2003-08-25 04:44:40.000000000 -0700
diff -urN linux-2.4.24/arch/mips/mm/c-sb1.c linux-2.4.25/arch/mips/mm/c-sb1.c
@@ -1,7 +1,7 @@
/*
* Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
* Copyright (C) 1997, 2001 Ralf Baechle (ralf@gnu.org)
- * Copyright (C) 2000, 2001 Broadcom Corporation
+ * Copyright (C) 2000, 2001, 2002, 2003 Broadcom Corporation
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -25,14 +25,7 @@
#include <asm/cpu.h>
#include <asm/uaccess.h>
-#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
extern void sb1_dma_init(void);
-extern void sb1_clear_page_dma(void * page);
-extern void sb1_copy_page_dma(void * to, void * from);
-#else
-extern void sb1_clear_page(void * page);
-extern void sb1_copy_page(void * to, void * from);
-#endif
/* These are probed at ld_mmu time */
static unsigned long icache_size;
@@ -53,23 +46,6 @@
static unsigned int icache_range_cutoff;
static unsigned int dcache_range_cutoff;
-void pgd_init(unsigned long page)
-{
- unsigned long *p = (unsigned long *) page;
- int i;
-
- for (i = 0; i < USER_PTRS_PER_PGD; i+=8) {
- p[i + 0] = (unsigned long) invalid_pte_table;
- p[i + 1] = (unsigned long) invalid_pte_table;
- p[i + 2] = (unsigned long) invalid_pte_table;
- p[i + 3] = (unsigned long) invalid_pte_table;
- p[i + 4] = (unsigned long) invalid_pte_table;
- p[i + 5] = (unsigned long) invalid_pte_table;
- p[i + 6] = (unsigned long) invalid_pte_table;
- p[i + 7] = (unsigned long) invalid_pte_table;
- }
-}
-
/*
* The dcache is fully coherent to the system, with one
* big caveat: the instruction stream. In other words,
@@ -248,6 +224,7 @@
if (!(vma->vm_flags & VM_EXEC))
return;
+ addr &= PAGE_MASK;
args.vma = vma;
args.addr = addr;
smp_call_function(sb1_flush_cache_page_ipi, (void *) &args, 1, 1);
@@ -573,21 +550,18 @@
void ld_mmu_sb1(void)
{
extern char except_vec2_sb1;
+ extern char handle_vec2_sb1;
unsigned long temp;
/* Special cache error handler for SB1 */
memcpy((void *)(KSEG0 + 0x100), &except_vec2_sb1, 0x80);
memcpy((void *)(KSEG1 + 0x100), &except_vec2_sb1, 0x80);
+ memcpy((void *)KSEG1ADDR(&handle_vec2_sb1), &handle_vec2_sb1, 0x80);
probe_cache_sizes();
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
- _clear_page = sb1_clear_page_dma;
- _copy_page = sb1_copy_page_dma;
sb1_dma_init();
-#else
- _clear_page = sb1_clear_page;
- _copy_page = sb1_copy_page;
#endif
/*
@@ -596,7 +570,6 @@
* occur
*/
_flush_cache_range = (void *) sb1_nop;
- _flush_cache_page = sb1_flush_cache_page;
_flush_cache_mm = (void (*)(struct mm_struct *))sb1_nop;
_flush_cache_all = sb1_nop;
@@ -605,6 +578,9 @@
_flush_icache_page = sb1_flush_icache_page;
_flush_icache_all = __sb1_flush_icache_all; /* local only */
+ /* This implies an Icache flush too, so can't be nop'ed */
+ _flush_cache_page = sb1_flush_cache_page;
+
_flush_cache_sigtramp = sb1_flush_cache_sigtramp;
_flush_data_cache_page = (void *) sb1_nop;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)