[RFC] Add 4KSx support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I'm sending a new patch that adds support for both 4ksc, 4ksd cpus and
smartmips extension. It doesn't add support for SmartMIPS MMU (another
patch may be sent in future) though. I tried to take into account
Maciej Rozycki and Kevin Kissel first feedbacks.

Thanks
--
               Franck

diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/Kconfig
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/Kconfig
--- linux-2.6.14-rc2-mipscvs/arch/mips/Kconfig	2005-09-23
22:02:44.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/Kconfig	2005-10-24
16:42:11.000000000 +0200
@@ -1123,6 +1123,20 @@ config CPU_SB1
 	select CPU_SUPPORTS_64BIT_KERNEL
 	select CPU_SUPPORTS_HIGHMEM

+config CPU_4KSC
+	bool "4KSC"
+	select CPU_SUPPORTS_32BIT_KERNEL
+	select CPU_HAS_PREFETCH
+	help
+	  MIPS Technologies 4KSc-series processors.
+
+config CPU_4KSD
+	bool "4KSD"
+	select CPU_SUPPORTS_32BIT_KERNEL
+	select CPU_HAS_PREFETCH
+	help
+	  MIPS Technologies 4KSd-series processors.
+
 endchoice

 endmenu
@@ -1337,6 +1351,14 @@ config CPU_HAS_WB
 	  machines which require flushing of write buffers in software.  Saying
 	  Y is the safe option; N may result in kernel malfunction and crashes.

+config CPU_HAS_SMARTMIPS
+	bool "SmartMIPS extension available" if CPU_ADVANCED
+	default y if !CPU_ADVANCED && (CPU_4KSC || CPU_4KSD)
+	help
+	  Say Y here if your CPU supports Smartmips ASE. The SmartMIPS ASE
+	  includes a set of features that form a cryptographic extension to
+	  the MIPS32 architecture.
+
 menu "MIPSR2 Interrupt handling"
 	depends on CPU_MIPSR2 && CPU_ADVANCED

diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/kernel/asm-offsets.c
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/asm-offsets.c
--- linux-2.6.14-rc2-mipscvs/arch/mips/kernel/asm-offsets.c	2005-09-15
10:53:13.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/asm-offsets.c	2005-10-25
13:02:30.000000000 +0200
@@ -65,6 +65,7 @@ void output_ptreg_defines(void)
 	offset("#define PT_R31    ", struct pt_regs, regs[31]);
 	offset("#define PT_LO     ", struct pt_regs, lo);
 	offset("#define PT_HI     ", struct pt_regs, hi);
+	offset("#define PT_ACX    ", struct pt_regs, acx);
 	offset("#define PT_EPC    ", struct pt_regs, cp0_epc);
 	offset("#define PT_BVADDR ", struct pt_regs, cp0_badvaddr);
 	offset("#define PT_STATUS ", struct pt_regs, cp0_status);
diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/kernel/cpu-probe.c
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/cpu-probe.c
--- linux-2.6.14-rc2-mipscvs/arch/mips/kernel/cpu-probe.c	2005-08-16
19:50:43.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/cpu-probe.c	2005-10-04
09:41:42.000000000 +0200
@@ -552,6 +552,7 @@ static inline void cpu_probe_mips(struct
 		c->cputype = CPU_4KEC;
 		break;
 	case PRID_IMP_4KSC:
+	case PRID_IMP_4KSD:
 		c->cputype = CPU_4KSC;
 		break;
 	case PRID_IMP_5KC:
diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/kernel/Makefile
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/Makefile
--- linux-2.6.14-rc2-mipscvs/arch/mips/kernel/Makefile	2005-09-01
22:42:46.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/Makefile	2005-10-04
09:30:29.000000000 +0200
@@ -31,6 +31,8 @@ obj-$(CONFIG_CPU_SB1)		+= r4k_fpu.o r4k_
 obj-$(CONFIG_CPU_MIPS32_R1)	+= r4k_fpu.o r4k_switch.o
 obj-$(CONFIG_CPU_MIPS64_R1)	+= r4k_fpu.o r4k_switch.o
 obj-$(CONFIG_CPU_R6000)		+= r6000_fpu.o r4k_switch.o
+obj-$(CONFIG_CPU_4KSC)		+= r4k_switch.o
+obj-$(CONFIG_CPU_4KSD)		+= r4k_switch.o

 obj-$(CONFIG_SMP)		+= smp.o

diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/kernel/ptrace32.c
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/ptrace32.c
--- linux-2.6.14-rc2-mipscvs/arch/mips/kernel/ptrace32.c	2005-05-31
13:49:19.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/ptrace32.c	2005-10-25
13:08:41.000000000 +0200
@@ -144,6 +144,11 @@ asmlinkage int sys32_ptrace(int request,
 		case MMLO:
 			tmp = regs->lo;
 			break;
+#ifdef CONFIG_CPU_HAS_SMARTMIPS
+		case ACX:
+			tmp = regs->acx;
+			break;
+#endif
 		case FPC_CSR:
 			if (cpu_has_fpu)
 				tmp = child->thread.fpu.hard.fcr31;
@@ -246,6 +251,11 @@ asmlinkage int sys32_ptrace(int request,
 		case MMLO:
 			regs->lo = data;
 			break;
+#ifdef CONFIG_CPU_HAS_SMARTMIPS
+		case ACX:
+			regs->acx = data;
+			break;
+#endif
 		case FPC_CSR:
 			if (cpu_has_fpu)
 				child->thread.fpu.hard.fcr31 = data;
diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/kernel/ptrace.c
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/ptrace.c
--- linux-2.6.14-rc2-mipscvs/arch/mips/kernel/ptrace.c	2005-07-14
14:05:05.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/kernel/ptrace.c	2005-10-25
13:09:52.000000000 +0200
@@ -159,6 +159,11 @@ asmlinkage int sys_ptrace(long request,
 		case MMLO:
 			tmp = regs->lo;
 			break;
+#ifdef CONFIG_CPU_HAS_SMARTMIPS
+		case ACX:
+			tmp = regs->acx;
+			break;
+#endif
 		case FPC_CSR:
 			if (cpu_has_fpu)
 				tmp = child->thread.fpu.hard.fcr31;
@@ -267,6 +272,11 @@ asmlinkage int sys_ptrace(long request,
 		case MMLO:
 			regs->lo = data;
 			break;
+#ifdef CONFIG_CPU_HAS_SMARTMIPS
+		case ACX:
+			regs->acx = data;
+			break;
+#endif
 		case FPC_CSR:
 			if (cpu_has_fpu)
 				child->thread.fpu.hard.fcr31 = data;
diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/lib-32/Makefile
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/lib-32/Makefile
--- linux-2.6.14-rc2-mipscvs/arch/mips/lib-32/Makefile	2005-07-11
12:03:27.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/lib-32/Makefile	2005-10-04
09:44:09.000000000 +0200
@@ -21,5 +21,7 @@ obj-$(CONFIG_CPU_SB1)		+= dump_tlb.o
 obj-$(CONFIG_CPU_TX39XX)	+= r3k_dump_tlb.o
 obj-$(CONFIG_CPU_TX49XX)	+= dump_tlb.o
 obj-$(CONFIG_CPU_VR41XX)	+= dump_tlb.o
+obj-$(CONFIG_CPU_4KSC)		+= dump_tlb.o
+obj-$(CONFIG_CPU_4KSD)		+= dump_tlb.o

 EXTRA_AFLAGS := $(CFLAGS)
diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/Makefile
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/Makefile
--- linux-2.6.14-rc2-mipscvs/arch/mips/Makefile	2005-09-15
10:53:10.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/Makefile	2005-10-24
16:19:15.000000000 +0200
@@ -237,6 +237,14 @@ cflags-$(CONFIG_CPU_R10000)	+= \
 			$(call set_gccflags,r10000,mips4,r8000,mips4,mips2) \
 			-Wa,--trap

+cflags-$(CONFIG_CPU_4KSC)	+= \
+			$(call set_gccflags,4ksc,mips32,4kc,mips32) \
+			-msmartmips -Wa,--trap
+
+cflags-$(CONFIG_CPU_4KSD)	+= \
+			$(call set_gccflags,4ksd,mips32r2,4kec,mips32r2) \
+			-msmartmips -Wa,--trap
+
 ifdef CONFIG_CPU_SB1
 ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
 MODFLAGS	+= -msb1-pass1-workarounds
diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/mm/cache.c
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/mm/cache.c
--- linux-2.6.14-rc2-mipscvs/arch/mips/mm/cache.c	2005-07-06
14:08:14.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/mm/cache.c	2005-10-04
09:46:56.000000000 +0200
@@ -120,7 +120,8 @@ void __init cpu_cache_init(void)
     defined(CONFIG_CPU_NEVADA) || defined(CONFIG_CPU_R5432)  || \
     defined(CONFIG_CPU_R5500)  || defined(CONFIG_CPU_MIPS32_R1) || \
     defined(CONFIG_CPU_MIPS64_R1) || defined(CONFIG_CPU_TX49XX) || \
-    defined(CONFIG_CPU_RM7000) || defined(CONFIG_CPU_RM9000)
+    defined(CONFIG_CPU_RM7000) || defined(CONFIG_CPU_RM9000) || \
+    defined(CONFIG_CPU_4KSC)   || defined(CONFIG_CPU_4KSD)
 		ld_mmu_r4xx0();
 #endif
 	} else switch (current_cpu_data.cputype) {
diff -Nurp linux-2.6.14-rc2-mipscvs/arch/mips/mm/Makefile
linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/mm/Makefile
--- linux-2.6.14-rc2-mipscvs/arch/mips/mm/Makefile	2005-07-14
14:05:06.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/arch/mips/mm/Makefile	2005-10-04
09:45:17.000000000 +0200
@@ -26,6 +26,8 @@ obj-$(CONFIG_CPU_SB1)		+= c-sb1.o cerr-s
 obj-$(CONFIG_CPU_TX39XX)	+= c-tx39.o pg-r4k.o tlb-r3k.o
 obj-$(CONFIG_CPU_TX49XX)	+= c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o
 obj-$(CONFIG_CPU_VR41XX)	+= c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o
+obj-$(CONFIG_CPU_4KSC)		+= c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o
+obj-$(CONFIG_CPU_4KSD)		+= c-r4k.o cex-gen.o pg-r4k.o tlb-r4k.o

 obj-$(CONFIG_IP22_CPU_SCACHE)	+= sc-ip22.o
 obj-$(CONFIG_R5000_CPU_SCACHE)  += sc-r5k.o
diff -Nurp linux-2.6.14-rc2-mipscvs/include/asm-mips/module.h
linux-2.6.14-rc2-mipscvs-4KSx/include/asm-mips/module.h
--- linux-2.6.14-rc2-mipscvs/include/asm-mips/module.h	2005-09-14
12:35:37.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/include/asm-mips/module.h	2005-10-04
09:55:34.000000000 +0200
@@ -113,7 +113,11 @@ search_module_dbetables(unsigned long ad
 #define MODULE_PROC_FAMILY "RM9000"
 #elif defined CONFIG_CPU_SB1
 #define MODULE_PROC_FAMILY "SB1"
-#elif
+#elif defined CONFIG_CPU_4KSC
+#define MODULE_PROC_FAMILY "4KSC"
+#elif defined CONFIG_CPU_4KSD
+#define MODULE_PROC_FAMILY "4KSD"
+#else
 #error MODULE_PROC_FAMILY undefined for your processor configuration
 #endif

diff -Nurp linux-2.6.14-rc2-mipscvs/include/asm-mips/ptrace.h
linux-2.6.14-rc2-mipscvs-4KSx/include/asm-mips/ptrace.h
--- linux-2.6.14-rc2-mipscvs/include/asm-mips/ptrace.h	2005-07-14
14:05:09.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/include/asm-mips/ptrace.h	2005-10-25
13:07:04.000000000 +0200
@@ -24,6 +24,7 @@
 #define FPC_EIR		70
 #define DSP_BASE	71		/* 3 more hi / lo register pairs */
 #define DSP_CONTROL	77
+#define ACX		78

 /*
  * This struct defines the way the registers are stored on the stack during a
@@ -42,6 +43,9 @@ struct pt_regs {
 	unsigned long cp0_status;
 	unsigned long hi;
 	unsigned long lo;
+#ifdef CONFIG_CPU_HAS_SMARTMIPS
+	unsigned long acx;
+#endif
 	unsigned long cp0_badvaddr;
 	unsigned long cp0_cause;
 	unsigned long cp0_epc;
diff -Nurp linux-2.6.14-rc2-mipscvs/include/asm-mips/stackframe.h
linux-2.6.14-rc2-mipscvs-4KSx/include/asm-mips/stackframe.h
--- linux-2.6.14-rc2-mipscvs/include/asm-mips/stackframe.h	2005-09-15
10:56:06.000000000 +0200
+++ linux-2.6.14-rc2-mipscvs-4KSx/include/asm-mips/stackframe.h	2005-10-25
14:35:56.000000000 +0200
@@ -25,16 +25,25 @@
 		.endm

 		.macro	SAVE_TEMP
+#ifdef CONFIG_CPU_HAS_SMARTMIPS
+		mflhxu	v1
+		LONG_S	v1, PT_LO(sp)
+		mflhxu	v1
+		LONG_S	v1, PT_HI(sp)
+		mflhxu	v1
+		LONG_S	v1, PT_ACX(sp)
+#else
 		mfhi	v1
+		LONG_S	v1, PT_HI(sp)
+		mflo	v1
+		LONG_S	v1, PT_LO(sp)
+#endif
 #ifdef CONFIG_32BIT
 		LONG_S	$8, PT_R8(sp)
 		LONG_S	$9, PT_R9(sp)
 #endif
-		LONG_S	v1, PT_HI(sp)
-		mflo	v1
 		LONG_S	$10, PT_R10(sp)
 		LONG_S	$11, PT_R11(sp)
-		LONG_S	v1,  PT_LO(sp)
 		LONG_S	$12, PT_R12(sp)
 		LONG_S	$13, PT_R13(sp)
 		LONG_S	$14, PT_R14(sp)
@@ -175,16 +184,25 @@
 		.endm

 		.macro	RESTORE_TEMP
+#ifdef CONFIG_CPU_HAS_SMARTMIPS
+		LONG_L	$24, PT_ACX(sp)
+		mtlhx	$24
+		LONG_L	$24, PT_HI(sp)
+		mtlhx	$24
 		LONG_L	$24, PT_LO(sp)
+		mtlhx	$24
+#else
+		LONG_L	$24, PT_LO(sp)
+		mtlo	$24
+		LONG_L	$24, PT_HI(sp)
+		mthi	$24
+#endif
 #ifdef CONFIG_32BIT
 		LONG_L	$8, PT_R8(sp)
 		LONG_L	$9, PT_R9(sp)
 #endif
-		mtlo	$24
-		LONG_L	$24, PT_HI(sp)
 		LONG_L	$10, PT_R10(sp)
 		LONG_L	$11, PT_R11(sp)
-		mthi	$24
 		LONG_L	$12, PT_R12(sp)
 		LONG_L	$13, PT_R13(sp)
 		LONG_L	$14, PT_R14(sp)


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux