From: Franck <vagabon.xyz@gmail.com>
To: linux-mips@linux-mips.org
Cc: Ralf Baechle <ralf@linux-mips.org>,
"Maciej W. Rozycki" <macro@linux-mips.org>,
"Kevin D. Kissell" <kevink@mips.com>
Subject: [RFC] Add 4KSx support (try 2)
Date: Mon, 31 Oct 2005 09:34:18 +0100 [thread overview]
Message-ID: <cda58cb80510310034k60b273dfm@mail.gmail.com> (raw)
This is the second try for submitting this patch. Hope it will get
more feedbacks...
Thanks
Franck
2005/10/25, Franck <vagabon.xyz@gmail.com>:
> 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)
>
next reply other threads:[~2005-10-31 8:34 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-31 8:34 Franck [this message]
2005-10-31 9:08 ` [RFC] Add 4KSx support (try 2) Kevin D. Kissell
2005-10-31 11:15 ` Ralf Baechle
2005-10-31 16:21 ` Franck
2005-10-31 16:01 ` Franck
2005-10-31 17:45 ` Kevin D. Kissell
2005-11-01 8:34 ` Franck
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=cda58cb80510310034k60b273dfm@mail.gmail.com \
--to=vagabon.xyz@gmail.com \
--cc=kevink@mips.com \
--cc=linux-mips@linux-mips.org \
--cc=macro@linux-mips.org \
--cc=ralf@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox