From 662ae2169a16004700cc18c1898aead2e5e944d5 Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Sat, 4 Aug 2007 13:39:21 +0900 Subject: sh: Fix PTRACE_PEEKTEXT/PEEKDATA fallout from generic_ptrace_peekdata(). When generic_ptrace_peekdata() was merged, the break for these cases ended up getting dropped, which lead to each PEEKTEXT/PEEKDATA op leaking in to PEEKUSR and get_user_pages() always -EFAULTing. Add the break back in. Signed-off-by: Paul Mundt --- arch/sh/kernel/ptrace.c | 1 + 1 file changed, 1 insertion(+) (limited to 'arch/sh') diff --git a/arch/sh/kernel/ptrace.c b/arch/sh/kernel/ptrace.c index 891d1d46c902..f64a2d2416d4 100644 --- a/arch/sh/kernel/ptrace.c +++ b/arch/sh/kernel/ptrace.c @@ -93,6 +93,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) case PTRACE_PEEKTEXT: /* read word at location addr. */ case PTRACE_PEEKDATA: ret = generic_ptrace_peekdata(child, addr, data); + break; /* read the word at location addr in the USER area. */ case PTRACE_PEEKUSR: { -- cgit v1.2.1 From 5556410e2203877e7606bb1008f2e024fe87953a Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Tue, 7 Aug 2007 19:13:23 +0900 Subject: sh: panic on machvec section misalignment. Now that __initmv references the machvec section unconditionally there have been cases where folks have been mistakenly flagging non-machvec structures with the machvec section attribute (presumably to shut up modpost). This leads to obscure breakage in earlyprintk amongst other places and is rather non-obvious. Add a simple sanity check to try and catch __initmv misuse and panic early. Reported-by: Markus Brunner Signed-off-by: Paul Mundt --- arch/sh/kernel/machvec.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'arch/sh') diff --git a/arch/sh/kernel/machvec.c b/arch/sh/kernel/machvec.c index 23c5948f0124..129b2cfd18a8 100644 --- a/arch/sh/kernel/machvec.c +++ b/arch/sh/kernel/machvec.c @@ -90,6 +90,13 @@ void __init sh_mv_setup(void) machvec_size = ((unsigned long)&__machvec_end - (unsigned long)&__machvec_start); + /* + * Sanity check for machvec section alignment. Ensure + * __initmv hasn't been misused. + */ + if (machvec_size % sizeof(struct sh_machine_vector)) + panic("machvec misaligned, invalid __initmv use?"); + /* * If the machvec hasn't been preselected, use the first * vector (usually the only one) from .machvec.init. -- cgit v1.2.1 From 96989d9d754ef1fa55e71beff6a076f79cc1717e Mon Sep 17 00:00:00 2001 From: Andy Whitcroft Date: Fri, 17 Aug 2007 01:25:34 +0900 Subject: sh: remove extraneous ; on scif_sercon_putc wait loop It seems we have gained an extraneous trailing ';' on one of the wait loops in scif_sercon_putc(). Although this is completely benign as the apparent payload is also the empty statement, it invites error in the future. Clean it up now. Signed-off-by: Andy Whitcroft Signed-off-by: Paul Mundt --- arch/sh/kernel/early_printk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'arch/sh') diff --git a/arch/sh/kernel/early_printk.c b/arch/sh/kernel/early_printk.c index 9833493d8867..80b637c30203 100644 --- a/arch/sh/kernel/early_printk.c +++ b/arch/sh/kernel/early_printk.c @@ -76,7 +76,7 @@ static void scif_sercon_putc(int c) sci_in(&scif_port, SCxSR); sci_out(&scif_port, SCxSR, 0xf3 & ~(0x20 | 0x40)); - while ((sci_in(&scif_port, SCxSR) & 0x40) == 0); + while ((sci_in(&scif_port, SCxSR) & 0x40) == 0) ; if (c == '\n') -- cgit v1.2.1 From da2f5f7bf4a39f9613fc04d7030cffb63e435e1d Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Tue, 21 Aug 2007 16:56:56 +0900 Subject: sh: Fix DSP opcode regression for SH3-DSP parts. Older versions of binutils do not support -Wa,-isa= tuning, which is something we rely on for enabling DSP opcode support on the newer parts. SH3-DSP parts can still be handled with -Wa,-dsp even if the newer parts require the newer versions of binutils for supporting the new opcodes. This was broken in -rc1 when the SH4AL-DSP support was being reworked, and is needed to get SH3-DSP working with older toolchains again. Reported-by: Markus Brunner Signed-off-by: Paul Mundt --- arch/sh/Makefile | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'arch/sh') diff --git a/arch/sh/Makefile b/arch/sh/Makefile index 3d211aa33cd8..97ac58682d0f 100644 --- a/arch/sh/Makefile +++ b/arch/sh/Makefile @@ -34,6 +34,8 @@ isa-y := $(isa-y)-nofpu endif endif +isa-y := $(isa-y)-up + cflags-$(CONFIG_CPU_SH2) := $(call cc-option,-m2,) cflags-$(CONFIG_CPU_SH2A) += $(call cc-option,-m2a,) \ $(call cc-option,-m2a-nofpu,) @@ -46,7 +48,20 @@ cflags-$(CONFIG_CPU_SH4A) += $(call cc-option,-m4a,) \ cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mb cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -ml -cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),) -ffreestanding +# +# -Wa,-isa= tuning implies -Wa,-dsp for the versions of binutils that +# support it, while -Wa,-dsp by itself limits the range of usable opcodes +# on certain CPU subtypes. Try the ISA variant first, and if that fails, +# fall back on -Wa,-dsp for the old binutils versions. Even without DSP +# opcodes, we always want the best ISA tuning the version of binutils +# will provide. +# +isaflags-y := $(call as-option,-Wa$(comma)-isa=$(isa-y),) + +isaflags-$(CONFIG_SH_DSP) := \ + $(call as-option,-Wa$(comma)-isa=$(isa-y),-Wa$(comma)-dsp) + +cflags-y += $(isaflags-y) -ffreestanding cflags-$(CONFIG_MORE_COMPILE_OPTIONS) += \ $(shell echo $(CONFIG_COMPILE_OPTIONS) | sed -e 's/"//g') -- cgit v1.2.1 From b58d134c7f9566c32a60b7163fe75d5ec247446d Mon Sep 17 00:00:00 2001 From: Magnus Damm Date: Wed, 22 Aug 2007 13:32:07 +0900 Subject: sh: missing symbol fix for sh4-202 This patch adds a plat_irq_setup() symbol for sh4-202. Without this fix it is impossible to build a working kernel using the microdev_defconfig. Signed-off-by: Magnus Damm Signed-off-by: Paul Mundt --- arch/sh/kernel/cpu/sh4/setup-sh4-202.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'arch/sh') diff --git a/arch/sh/kernel/cpu/sh4/setup-sh4-202.c b/arch/sh/kernel/cpu/sh4/setup-sh4-202.c index 6e4e96541358..dab193293f20 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh4-202.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh4-202.c @@ -41,3 +41,8 @@ static int __init sh4202_devices_setup(void) ARRAY_SIZE(sh4202_devices)); } __initcall(sh4202_devices_setup); + +void __init plat_irq_setup(void) +{ + /* do nothing - all IRL interrupts are handled by the board code */ +} -- cgit v1.2.1