Browse Source

Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.23

* master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.23:
  sh: missing symbol fix for sh4-202
  sh: Fix DSP opcode regression for SH3-DSP parts.
Linus Torvalds 17 years ago
parent
commit
b1b8aca480
2 changed files with 21 additions and 1 deletions
  1. 16 1
      arch/sh/Makefile
  2. 5 0
      arch/sh/kernel/cpu/sh4/setup-sh4-202.c

+ 16 - 1
arch/sh/Makefile

@@ -34,6 +34,8 @@ isa-y			:= $(isa-y)-nofpu
 endif
 endif
 endif
 endif
 
 
+isa-y			:= $(isa-y)-up
+
 cflags-$(CONFIG_CPU_SH2)		:= $(call cc-option,-m2,)
 cflags-$(CONFIG_CPU_SH2)		:= $(call cc-option,-m2,)
 cflags-$(CONFIG_CPU_SH2A)		+= $(call cc-option,-m2a,) \
 cflags-$(CONFIG_CPU_SH2A)		+= $(call cc-option,-m2a,) \
 					   $(call cc-option,-m2a-nofpu,)
 					   $(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_BIG_ENDIAN)		+= -mb
 cflags-$(CONFIG_CPU_LITTLE_ENDIAN)	+= -ml
 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)	+= \
 cflags-$(CONFIG_MORE_COMPILE_OPTIONS)	+= \
 	$(shell echo $(CONFIG_COMPILE_OPTIONS) | sed -e 's/"//g')
 	$(shell echo $(CONFIG_COMPILE_OPTIONS) | sed -e 's/"//g')

+ 5 - 0
arch/sh/kernel/cpu/sh4/setup-sh4-202.c

@@ -41,3 +41,8 @@ static int __init sh4202_devices_setup(void)
 				    ARRAY_SIZE(sh4202_devices));
 				    ARRAY_SIZE(sh4202_devices));
 }
 }
 __initcall(sh4202_devices_setup);
 __initcall(sh4202_devices_setup);
+
+void __init plat_irq_setup(void)
+{
+	/* do nothing - all IRL interrupts are handled by the board code */
+}