summaryrefslogtreecommitdiffstats
path: root/arch/mips/mm/r2300.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>2000-06-20 01:06:27 +0000
committerRalf Baechle <ralf@linux-mips.org>2000-06-20 01:06:27 +0000
commit68a1cd72aca3ddd79de33703a1760887e3dbe164 (patch)
tree128a3c32d6b8883de3fff9a70fd7a68dc643aa55 /arch/mips/mm/r2300.c
parent6d403070f28cd44860fdb3a53be5da0275c65cf4 (diff)
R3000 cache handling. flush_icache_page now actually flushes
something.
Diffstat (limited to 'arch/mips/mm/r2300.c')
-rw-r--r--arch/mips/mm/r2300.c58
1 files changed, 29 insertions, 29 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"