From: Ralf Baechle <ralf@linux-mips.org>
To: Hartvig Ekner <hartvig@ekner.info>
Cc: Linux MIPS mailing list <linux-mips@linux-mips.org>
Subject: Re: MIPS32 cache functions now using c-r4k?
Date: Wed, 16 Apr 2003 16:59:19 +0200 [thread overview]
Message-ID: <20030416165919.A15111@linux-mips.org> (raw)
In-Reply-To: <3E9D0C34.38FE2749@ekner.info>; from hartvig@ekner.info on Wed, Apr 16, 2003 at 09:54:28AM +0200
On Wed, Apr 16, 2003 at 09:54:28AM +0200, Hartvig Ekner wrote:
> It seems much of the r4k cache code assumes the presence of SD - which
> breaks on all MIPS32 CPU's?
Nothing a soldering iron and some patience couldn't fix ;)
Try below patch,
Ralf
Index: arch/mips/mm/c-r4k.c
===================================================================
RCS file: /home/cvs/linux/arch/mips/mm/c-r4k.c,v
retrieving revision 1.3.2.43
diff -u -r1.3.2.43 c-r4k.c
--- arch/mips/mm/c-r4k.c 16 Apr 2003 12:41:18 -0000 1.3.2.43
+++ arch/mips/mm/c-r4k.c 16 Apr 2003 14:56:03 -0000
@@ -34,6 +34,8 @@
#include <asm/cacheops.h>
#include <asm/r4kcache.h>
+extern void r4k_clear_page32_d16(void * page);
+extern void r4k_clear_page32_d32(void * page);
extern void r4k_clear_page_d16(void * page);
extern void r4k_clear_page_d32(void * page);
extern void r4k_clear_page_r4600_v1(void * page);
@@ -877,7 +879,10 @@
switch (current_cpu_data.dcache.linesz) {
case 16:
- _clear_page = r4k_clear_page_d16;
+ if (cpu_has_64bits)
+ _clear_page = r4k_clear_page_d16;
+ else
+ _clear_page = r4k_clear_page32_d16;
_copy_page = r4k_copy_page_d16;
break;
@@ -890,7 +895,10 @@
_clear_page = r4k_clear_page_r4600_v2;
_copy_page = r4k_copy_page_r4600_v2;
} else {
- _clear_page = r4k_clear_page_d32;
+ if (cpu_has_64bits)
+ _clear_page = r4k_clear_page_d32;
+ else
+ _clear_page = r4k_clear_page32_d32;
_copy_page = r4k_copy_page_d32;
}
break;
Index: arch/mips/mm/pg-r4k.S
===================================================================
RCS file: /home/cvs/linux/arch/mips/mm/pg-r4k.S,v
retrieving revision 1.2.2.3
diff -u -r1.2.2.3 pg-r4k.S
--- arch/mips/mm/pg-r4k.S 5 Aug 2002 23:53:35 -0000 1.2.2.3
+++ arch/mips/mm/pg-r4k.S 16 Apr 2003 14:56:07 -0000
@@ -39,6 +39,39 @@
* versions of R4000 and R4400.
*/
+LEAF(r4k_clear_page32_d16)
+ addiu AT, a0, _PAGE_SIZE
+1: cache Create_Dirty_Excl_D, (a0)
+ sw zero, (a0)
+ sw zero, 4(a0)
+ sw zero, 8(a0)
+ sw zero, 12(a0)
+ addiu a0, 32
+ cache Create_Dirty_Excl_D, -16(a0)
+ sw zero, -16(a0)
+ sw zero, -12(a0)
+ sw zero, -8(a0)
+ sw zero, -4(a0)
+ bne AT, a0, 1b
+ jr ra
+ END(r4k_clear_page32_d16)
+
+LEAF(r4k_clear_page32_d32)
+ addiu AT, a0, _PAGE_SIZE
+1: cache Create_Dirty_Excl_D, (a0)
+ sw zero, (a0)
+ sw zero, 4(a0)
+ sw zero, 8(a0)
+ sw zero, 12(a0)
+ addiu a0, 64
+ sw zero, -16(a0)
+ sw zero, -12(a0)
+ sw zero, -8(a0)
+ sw zero, -4(a0)
+ bne AT, a0, 1b
+ jr ra
+ END(r4k_clear_page32_d32)
+
LEAF(r4k_clear_page_d16)
addiu AT, a0, _PAGE_SIZE
1: cache Create_Dirty_Excl_D, (a0)
Index: include/asm-mips/cpu.h
===================================================================
RCS file: /home/cvs/linux/include/asm-mips/cpu.h,v
retrieving revision 1.24.2.18
diff -u -r1.24.2.18 cpu.h
--- include/asm-mips/cpu.h 15 Apr 2003 14:19:14 -0000 1.24.2.18
+++ include/asm-mips/cpu.h 16 Apr 2003 14:56:33 -0000
@@ -162,14 +162,20 @@
/*
* ISA Level encodings
+ *
*/
#define MIPS_CPU_ISA_I 0x00000001
#define MIPS_CPU_ISA_II 0x00000002
-#define MIPS_CPU_ISA_III 0x00000003
-#define MIPS_CPU_ISA_IV 0x00000004
-#define MIPS_CPU_ISA_V 0x00000005
+#define MIPS_CPU_ISA_III 0x00008003
+#define MIPS_CPU_ISA_IV 0x00008004
+#define MIPS_CPU_ISA_V 0x00008005
#define MIPS_CPU_ISA_M32 0x00000020
-#define MIPS_CPU_ISA_M64 0x00000040
+#define MIPS_CPU_ISA_M64 0x00008040
+
+/*
+ * Bit 15 encodes if an ISA level supports 64-bit operations.
+ */
+#define MIPS_CPU_ISA_64BIT 0x00008000
/*
* CPU Option encodings
Index: include/asm-mips/processor.h
===================================================================
RCS file: /home/cvs/linux/include/asm-mips/processor.h,v
retrieving revision 1.43.2.18
diff -u -r1.43.2.18 processor.h
--- include/asm-mips/processor.h 15 Apr 2003 14:19:14 -0000 1.43.2.18
+++ include/asm-mips/processor.h 16 Apr 2003 14:56:46 -0000
@@ -93,6 +93,7 @@
#define cpu_has_vtag_icache (cpu_data[0].icache.flags & MIPS_CACHE_VTAG)
#define cpu_has_dc_aliases (cpu_data[0].dcache.flags & MIPS_CACHE_ALIASES)
#define cpu_has_ic_fills_f_dc (cpu_data[0].dcache.flags & MIPS_CACHE_IC_F_DC)
+#define cpu_has_64bits (cpu_data[0].isa_level & MIPS_CPU_ISA_64BIT)
extern struct cpuinfo_mips cpu_data[];
#define current_cpu_data cpu_data[smp_processor_id()]
next prev parent reply other threads:[~2003-04-16 14:59 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-04-16 7:54 MIPS32 cache functions now using c-r4k? Hartvig Ekner
2003-04-16 12:59 ` Kevin D. Kissell
2003-04-16 13:19 ` Maciej W. Rozycki
2003-04-16 14:08 ` Ralf Baechle
2003-04-16 16:51 ` Jun Sun
2003-04-16 13:17 ` Maciej W. Rozycki
2003-04-16 14:59 ` Ralf Baechle [this message]
2003-04-16 17:51 ` Hartvig Ekner
2003-04-16 19:19 ` Ralf Baechle
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030416165919.A15111@linux-mips.org \
--to=ralf@linux-mips.org \
--cc=hartvig@ekner.info \
--cc=linux-mips@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.