diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-06-20 01:06:27 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-06-20 01:06:27 +0000 |
commit | 68a1cd72aca3ddd79de33703a1760887e3dbe164 (patch) | |
tree | 128a3c32d6b8883de3fff9a70fd7a68dc643aa55 | |
parent | 6d403070f28cd44860fdb3a53be5da0275c65cf4 (diff) |
R3000 cache handling. flush_icache_page now actually flushes
something.
-rw-r--r-- | arch/mips/mm/r2300.c | 58 | ||||
-rw-r--r-- | include/asm-mips/mipsregs.h | 6 | ||||
-rw-r--r-- | include/asm-mips/pgtable.h | 5 | ||||
-rw-r--r-- | include/asm-mips64/mipsregs.h | 4 | ||||
-rw-r--r-- | include/asm-mips64/pgtable.h | 9 |
5 files changed, 41 insertions, 41 deletions
diff --git a/arch/mips/mm/r2300.c b/arch/mips/mm/r2300.c index 2e699b416..dcf1e8a2d 100644 --- a/arch/mips/mm/r2300.c +++ b/arch/mips/mm/r2300.c @@ -151,15 +151,15 @@ unsigned long __init r3k_cache_size(unsigned long ca_flags) static void __init probe_dcache(void) { - dcache_size = r3k_cache_size(ST0_DE); + dcache_size = r3k_cache_size(ST0_ISC); printk("Primary data cache %dkb, linesize 4 bytes\n", dcache_size >> 10); } static void __init probe_icache(void) { - icache_size = r3k_cache_size(ST0_DE|ST0_CE); - printk("Primary instruction cache %dkb, linesize 8 bytes\n", + icache_size = r3k_cache_size(ST0_ISC|ST0_SWC); + printk("Primary instruction cache %dkb, linesize 4 bytes\n", icache_size >> 10); } @@ -174,43 +174,43 @@ static void r3k_flush_icache_range(unsigned long start, unsigned long size) save_and_cli(flags); /* isolate cache space */ - write_32bit_cp0_register(CP0_STATUS, (ST0_DE|ST0_CE|flags)&~ST0_IEC); + write_32bit_cp0_register(CP0_STATUS, (ST0_ISC|ST0_SWC|flags)&~ST0_IEC); - for (i = 0; i < size; i += 0x100) { + for (i = 0; i < size; i += 0x080) { asm ( "sb\t$0,0x000(%0)\n\t" + "sb\t$0,0x004(%0)\n\t" "sb\t$0,0x008(%0)\n\t" + "sb\t$0,0x00c(%0)\n\t" "sb\t$0,0x010(%0)\n\t" + "sb\t$0,0x014(%0)\n\t" "sb\t$0,0x018(%0)\n\t" - "sb\t$0,0x020(%0)\n\t" + "sb\t$0,0x01c(%0)\n\t" + "sb\t$0,0x020(%0)\n\t" + "sb\t$0,0x024(%0)\n\t" "sb\t$0,0x028(%0)\n\t" + "sb\t$0,0x02c(%0)\n\t" "sb\t$0,0x030(%0)\n\t" + "sb\t$0,0x034(%0)\n\t" "sb\t$0,0x038(%0)\n\t" - "sb\t$0,0x040(%0)\n\t" + "sb\t$0,0x03c(%0)\n\t" + "sb\t$0,0x040(%0)\n\t" + "sb\t$0,0x044(%0)\n\t" "sb\t$0,0x048(%0)\n\t" + "sb\t$0,0x04c(%0)\n\t" "sb\t$0,0x050(%0)\n\t" + "sb\t$0,0x054(%0)\n\t" "sb\t$0,0x058(%0)\n\t" - "sb\t$0,0x060(%0)\n\t" + "sb\t$0,0x05c(%0)\n\t" + "sb\t$0,0x060(%0)\n\t" + "sb\t$0,0x064(%0)\n\t" "sb\t$0,0x068(%0)\n\t" + "sb\t$0,0x06c(%0)\n\t" "sb\t$0,0x070(%0)\n\t" + "sb\t$0,0x074(%0)\n\t" "sb\t$0,0x078(%0)\n\t" - "sb\t$0,0x080(%0)\n\t" - "sb\t$0,0x088(%0)\n\t" - "sb\t$0,0x090(%0)\n\t" - "sb\t$0,0x098(%0)\n\t" - "sb\t$0,0x0a0(%0)\n\t" - "sb\t$0,0x0a8(%0)\n\t" - "sb\t$0,0x0b0(%0)\n\t" - "sb\t$0,0x0b8(%0)\n\t" - "sb\t$0,0x0c0(%0)\n\t" - "sb\t$0,0x0c8(%0)\n\t" - "sb\t$0,0x0d0(%0)\n\t" - "sb\t$0,0x0d8(%0)\n\t" - "sb\t$0,0x0e0(%0)\n\t" - "sb\t$0,0x0e8(%0)\n\t" - "sb\t$0,0x0f0(%0)\n\t" - "sb\t$0,0x0f8(%0)\n\t" + "sb\t$0,0x07c(%0)\n\t" : : "r" (p) ); - p += 0x100; + p += 0x080; } restore_flags(flags); @@ -221,13 +221,13 @@ static void r3k_flush_dcache_range(unsigned long start, unsigned long size) unsigned long i, flags; volatile unsigned char *p = (char *)start; - if (size > icache_size) - size = icache_size; + if (size > dcache_size) + size = dcache_size; save_and_cli(flags); /* isolate cache space */ - write_32bit_cp0_register(CP0_STATUS, (ST0_DE|flags)&~ST0_IEC); + write_32bit_cp0_register(CP0_STATUS, (ST0_ISC|flags)&~ST0_IEC); for (i = 0; i < size; i += 0x080) { asm ( "sb\t$0,0x000(%0)\n\t" @@ -376,7 +376,7 @@ static void r3k_flush_cache_sigtramp(unsigned long addr) save_and_cli(flags); - write_32bit_cp0_register(CP0_STATUS, (ST0_DE|ST0_CE|flags)&~ST0_IEC); + write_32bit_cp0_register(CP0_STATUS, (ST0_ISC|ST0_SWC|flags)&~ST0_IEC); asm ( "sb\t$0,0x000(%0)\n\t" "sb\t$0,0x008(%0)\n\t" diff --git a/include/asm-mips/mipsregs.h b/include/asm-mips/mipsregs.h index 23ed82cfd..f7a29a81f 100644 --- a/include/asm-mips/mipsregs.h +++ b/include/asm-mips/mipsregs.h @@ -234,6 +234,8 @@ __BUILD_SET_CP0(config,CP0_CONFIG) #define ST0_UX 0x00000020 #define ST0_SX 0x00000040 #define ST0_KX 0x00000080 +#define ST0_DE 0x00010000 +#define ST0_CE 0x00020000 /* * Bitfields in the R[23]000 cp0 status register. @@ -245,6 +247,8 @@ __BUILD_SET_CP0(config,CP0_CONFIG) #define ST0_IEO 0x00000010 #define ST0_KUO 0x00000020 /* bits 6 & 7 are reserved on R[23]000 */ +#define ST0_ISC 0x00010000 +#define ST0_SWC 0x00020000 /* * Bits specific to the R4640/R4650 @@ -273,8 +277,6 @@ __BUILD_SET_CP0(config,CP0_CONFIG) #define STATUSF_IP6 (1 << 14) #define STATUSB_IP7 15 #define STATUSF_IP7 (1 << 15) -#define ST0_DE 0x00010000 -#define ST0_CE 0x00020000 #define ST0_CH 0x00040000 #define ST0_SR 0x00100000 #define ST0_BEV 0x00400000 diff --git a/include/asm-mips/pgtable.h b/include/asm-mips/pgtable.h index a21e78b04..b2d3ed058 100644 --- a/include/asm-mips/pgtable.h +++ b/include/asm-mips/pgtable.h @@ -1,5 +1,4 @@ -/* $Id: pgtable.h,v 1.31 2000/03/02 02:37:13 ralf Exp $ - * +/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. @@ -43,7 +42,7 @@ extern void (*_flush_page_to_ram)(struct page * page); #define flush_page_to_ram(page) _flush_page_to_ram(page) #define flush_icache_range(start, end) flush_cache_all() -#define flush_icache_page(start,page) do { } while(0) +#define flush_icache_page(start,page) flush_cache_page(vma, page) /* diff --git a/include/asm-mips64/mipsregs.h b/include/asm-mips64/mipsregs.h index cddc66d39..08ef50e35 100644 --- a/include/asm-mips64/mipsregs.h +++ b/include/asm-mips64/mipsregs.h @@ -213,6 +213,8 @@ __BUILD_SET_CP0(config,CP0_CONFIG) #define ST0_UX 0x00000020 #define ST0_SX 0x00000040 #define ST0_KX 0x00000080 +#define ST0_DE 0x00010000 +#define ST0_CE 0x00020000 /* * Status register bits available in all MIPS CPUs. @@ -234,8 +236,6 @@ __BUILD_SET_CP0(config,CP0_CONFIG) #define STATUSF_IP6 (1 << 14) #define STATUSB_IP7 15 #define STATUSF_IP7 (1 << 15) -#define ST0_DE 0x00010000 -#define ST0_CE 0x00020000 #define ST0_CH 0x00040000 #define ST0_SR 0x00100000 #define ST0_TS 0x00200000 diff --git a/include/asm-mips64/pgtable.h b/include/asm-mips64/pgtable.h index af4251f38..af8a65d0f 100644 --- a/include/asm-mips64/pgtable.h +++ b/include/asm-mips64/pgtable.h @@ -1,11 +1,10 @@ -/* $Id: pgtable.h,v 1.14 2000/03/02 02:37:13 ralf Exp $ - * +/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 1994 - 1999 by Ralf Baechle at alii - * Copyright (C) 1999 Silicon Graphics, Inc. + * Copyright (C) 1994 - 2000 by Ralf Baechle at alii + * Copyright (C) 1999, 2000 Silicon Graphics, Inc. */ #ifndef _ASM_PGTABLE_H #define _ASM_PGTABLE_H @@ -44,7 +43,7 @@ extern void (*_flush_page_to_ram)(struct page * page); #define flush_page_to_ram(page) _flush_page_to_ram(page) #define flush_icache_range(start, end) flush_cache_all() -#define flush_icache_page(start, page) do { } while(0) +#define flush_icache_page(vma, page) flush_cache_page(vma, page) /* Basically we have the same two-level (which is the logical three level |