summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-11-08 21:56:59 +0000
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-11-08 21:56:59 +0000
commitc8e4b6534aac076a168135d2d4f78880f8bc836d (patch)
tree6c0d0fd85563130b9c0fd489d170e2571c47530c
parentda02086104984438513c27ab0ff21fff81b5ea07 (diff)
[amazon] Add some build fixes for kernel 2.6.21 and the infineon amazon target.
Now it compiles with the new toolchain. These are mostly backports from mainline linux and newer linux kernels from openwrt. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18345 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--target/linux/amazon/config-2.6.211
-rw-r--r--target/linux/generic-2.6/patches-2.6.21/024-mips_disable_fpu.patch150
-rw-r--r--target/linux/generic-2.6/patches-2.6.21/150-netfilter_imq.patch2
-rw-r--r--target/linux/generic-2.6/patches-2.6.21/160-netfilter_route.patch8
-rw-r--r--target/linux/generic-2.6/patches-2.6.21/30-fix_conflicting_getline.patch29
-rw-r--r--target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch21
-rw-r--r--target/linux/generic-2.6/patches-2.6.21/32-time_fix_timespec_add_ns.patch17
-rw-r--r--target/linux/generic-2.6/patches-2.6.21/900-headers_type_and_time.patch2
8 files changed, 224 insertions, 6 deletions
diff --git a/target/linux/amazon/config-2.6.21 b/target/linux/amazon/config-2.6.21
index c406070b15..6d830e1d76 100644
--- a/target/linux/amazon/config-2.6.21
+++ b/target/linux/amazon/config-2.6.21
@@ -74,6 +74,7 @@ CONFIG_MIPS=y
# CONFIG_MIPS_DB1500 is not set
# CONFIG_MIPS_DB1550 is not set
# CONFIG_MIPS_EV64120 is not set
+# CONFIG_MIPS_FPU_EMU is not set
CONFIG_MIPS_L1_CACHE_SHIFT=5
# CONFIG_MIPS_MALTA is not set
# CONFIG_MIPS_MIRAGE is not set
diff --git a/target/linux/generic-2.6/patches-2.6.21/024-mips_disable_fpu.patch b/target/linux/generic-2.6/patches-2.6.21/024-mips_disable_fpu.patch
new file mode 100644
index 0000000000..4775069621
--- /dev/null
+++ b/target/linux/generic-2.6/patches-2.6.21/024-mips_disable_fpu.patch
@@ -0,0 +1,150 @@
+MIPS: allow disabling the kernel FPU emulator
+
+This patch allows turning off the in-kernel Algorithmics
+FPU emulator support, which allows one to save a couple of
+precious blocks on an embedded system.
+
+Signed-off-by: Florian Fainelli <florian@openwrt.org>
+
+--- a/arch/mips/Kconfig
++++ b/arch/mips/Kconfig
+@@ -938,6 +938,17 @@ config LIMITED_DMA
+ config MIPS_BONITO64
+ bool
+
++config MIPS_FPU_EMU
++ bool
++ default n
++ help
++ This option allows building a kernel with or without the Algorithmics
++ FPU emulator enabled. Turning off this option results in a kernel which
++ does not catch floating operations exceptions. Make sure that your toolchain
++ is configured to enable software floating point emulation in that case.
++
++ If unsure say Y here.
++
+ config MIPS_MSC
+ bool
+
+--- a/arch/mips/math-emu/Makefile
++++ b/arch/mips/math-emu/Makefile
+@@ -1,11 +1,12 @@
+ #
+ # Makefile for the Linux/MIPS kernel FPU emulation.
+ #
++obj-y := kernel_linkage.o dsemul.o cp1emu.o
+
+-obj-y := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
++obj-$(CONFIG_MIPS_FPU_EMU) += ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
+ ieee754xcpt.o dp_frexp.o dp_modf.o dp_div.o dp_mul.o dp_sub.o \
+ dp_add.o dp_fsp.o dp_cmp.o dp_logb.o dp_scalb.o dp_simple.o \
+ dp_tint.o dp_fint.o dp_tlong.o dp_flong.o sp_frexp.o sp_modf.o \
+ sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_logb.o \
+ sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \
+- dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o
++ dp_sqrt.o sp_sqrt.o
+--- a/arch/mips/math-emu/cp1emu.c
++++ b/arch/mips/math-emu/cp1emu.c
+@@ -56,6 +56,12 @@
+ #endif
+ #define __mips 4
+
++/* Further private data for which no space exists in mips_fpu_struct */
++
++struct mips_fpu_emulator_stats fpuemustats;
++
++#ifdef CONFIG_MIPS_FPU_EMU
++
+ /* Function which emulates a floating point instruction. */
+
+ static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *,
+@@ -66,10 +72,6 @@ static int fpux_emu(struct pt_regs *,
+ struct mips_fpu_struct *, mips_instruction);
+ #endif
+
+-/* Further private data for which no space exists in mips_fpu_struct */
+-
+-struct mips_fpu_emulator_stats fpuemustats;
+-
+ /* Control registers */
+
+ #define FPCREG_RID 0 /* $0 = revision id */
+@@ -1277,3 +1279,10 @@ int fpu_emulator_cop1Handler(struct pt_r
+
+ return sig;
+ }
++#else
++int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
++ int has_fpu)
++{
++ return 0;
++}
++#endif /* CONFIG_MIPS_FPU_EMU */
+--- a/arch/mips/math-emu/dsemul.c
++++ b/arch/mips/math-emu/dsemul.c
+@@ -112,6 +112,7 @@ int mips_dsemul(struct pt_regs *regs, mi
+ return SIGILL; /* force out of emulation loop */
+ }
+
++#ifdef CONFIG_MIPS_FPU_EMU
+ int do_dsemulret(struct pt_regs *xcp)
+ {
+ struct emuframe *fr;
+@@ -167,3 +168,9 @@ int do_dsemulret(struct pt_regs *xcp)
+
+ return 1;
+ }
++#else
++int do_dsemulret(struct pt_regs *xcp)
++{
++ return 0;
++}
++#endif /* CONFIG_MIPS_FPU_EMU */
+--- a/arch/mips/math-emu/kernel_linkage.c
++++ b/arch/mips/math-emu/kernel_linkage.c
+@@ -28,6 +28,7 @@
+
+ #define SIGNALLING_NAN 0x7ff800007ff80000LL
+
++#ifdef CONFIG_MIPS_FPU_EMU
+ void fpu_emulator_init_fpu(void)
+ {
+ static int first = 1;
+@@ -111,4 +112,36 @@ int fpu_emulator_restore_context32(struc
+
+ return err;
+ }
+-#endif
++#endif /* CONFIG_64BIT */
++#else
++
++void fpu_emulator_init_fpu(void)
++{
++ printk(KERN_INFO "FPU emulator disabled, make sure your toolchain"
++ "was compiled with software floating point support (soft-float)\n");
++ return;
++}
++
++int fpu_emulator_save_context(struct sigcontext __user *sc)
++{
++ return 0;
++}
++
++int fpu_emulator_restore_context(struct sigcontext __user *sc)
++{
++ return 0;
++}
++
++int fpu_emulator_save_context32(struct sigcontext32 __user *sc)
++{
++ return 0;
++}
++
++int fpu_emulator_restore_context32(struct sigcontext32 __user *sc)
++{
++ return 0;
++}
++
++#ifdef CONFIG_64BIT
++#endif /* CONFIG_64BIT */
++#endif /* CONFIG_MIPS_FPU_EMU */
diff --git a/target/linux/generic-2.6/patches-2.6.21/150-netfilter_imq.patch b/target/linux/generic-2.6/patches-2.6.21/150-netfilter_imq.patch
index b3ba77b0a4..f57dd5b8f7 100644
--- a/target/linux/generic-2.6/patches-2.6.21/150-netfilter_imq.patch
+++ b/target/linux/generic-2.6/patches-2.6.21/150-netfilter_imq.patch
@@ -735,7 +735,7 @@
depends on IP_NF_MANGLE
--- a/net/ipv4/netfilter/Makefile
+++ b/net/ipv4/netfilter/Makefile
-@@ -98,6 +98,7 @@ obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ip
+@@ -97,6 +97,7 @@ obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ip
obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
obj-$(CONFIG_IP_NF_TARGET_TOS) += ipt_TOS.o
obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o
diff --git a/target/linux/generic-2.6/patches-2.6.21/160-netfilter_route.patch b/target/linux/generic-2.6/patches-2.6.21/160-netfilter_route.patch
index 0d305e3ddb..8fcec08fcf 100644
--- a/target/linux/generic-2.6/patches-2.6.21/160-netfilter_route.patch
+++ b/target/linux/generic-2.6/patches-2.6.21/160-netfilter_route.patch
@@ -538,9 +538,9 @@
+module_exit(fini);
--- a/net/ipv4/netfilter/Kconfig
+++ b/net/ipv4/netfilter/Kconfig
-@@ -825,5 +825,22 @@ config IP_NF_TARGET_SET
- To compile it as a module, choose M here. If unsure, say N.
-
+@@ -684,5 +684,22 @@ config IP_NF_ARP_MANGLE
+ Allows altering the ARP packet payload: source and destination
+ hardware and network addresses.
+config IP_NF_TARGET_ROUTE
+ tristate 'ROUTE target support'
@@ -563,7 +563,7 @@
--- a/net/ipv4/netfilter/Makefile
+++ b/net/ipv4/netfilter/Makefile
-@@ -101,6 +101,7 @@ obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_EC
+@@ -100,6 +100,7 @@ obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_EC
obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o
obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
diff --git a/target/linux/generic-2.6/patches-2.6.21/30-fix_conflicting_getline.patch b/target/linux/generic-2.6/patches-2.6.21/30-fix_conflicting_getline.patch
new file mode 100644
index 0000000000..0a68134f7a
--- /dev/null
+++ b/target/linux/generic-2.6/patches-2.6.21/30-fix_conflicting_getline.patch
@@ -0,0 +1,29 @@
+--- a/scripts/unifdef.c
++++ b/scripts/unifdef.c
+@@ -206,7 +206,7 @@ static void done(void);
+ static void error(const char *);
+ static int findsym(const char *);
+ static void flushline(bool);
+-static Linetype getline(void);
++static Linetype get_line(void);
+ static Linetype ifeval(const char **);
+ static void ignoreoff(void);
+ static void ignoreon(void);
+@@ -512,7 +512,7 @@ process(void)
+
+ for (;;) {
+ linenum++;
+- lineval = getline();
++ lineval = get_line();
+ trans_table[ifstate[depth]][lineval]();
+ debug("process %s -> %s depth %d",
+ linetype_name[lineval],
+@@ -526,7 +526,7 @@ process(void)
+ * help from skipcomment().
+ */
+ static Linetype
+-getline(void)
++get_line(void)
+ {
+ const char *cp;
+ int cursym;
diff --git a/target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch b/target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch
new file mode 100644
index 0000000000..45c753b55b
--- /dev/null
+++ b/target/linux/generic-2.6/patches-2.6.21/31-use_kbuild.h.patch
@@ -0,0 +1,21 @@
+[MIPS] Fix computation of {PGD,PMD,PTE}_T_LOG2.
+
+For the generation of asm-offset.h to work these need to be evaulatable
+by gcc as a constant expression. This issue did exist for a while but
+didn't bite because they're only in asm-offset.h for debugging purposes.
+
+--- a/include/asm-mips/pgtable.h
++++ b/include/asm-mips/pgtable.h
+@@ -168,9 +168,9 @@ static inline void pte_clear(struct mm_s
+ #define set_pud(pudptr, pudval) do { *(pudptr) = (pudval); } while(0)
+ #endif
+
+-#define PGD_T_LOG2 ffz(~sizeof(pgd_t))
+-#define PMD_T_LOG2 ffz(~sizeof(pmd_t))
+-#define PTE_T_LOG2 ffz(~sizeof(pte_t))
++#define PGD_T_LOG2 (__builtin_ffs(sizeof(pgd_t)) - 1)
++#define PMD_T_LOG2 (__builtin_ffs(sizeof(pmd_t)) - 1)
++#define PTE_T_LOG2 (__builtin_ffs(sizeof(pte_t)) - 1)
+
+ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
+
diff --git a/target/linux/generic-2.6/patches-2.6.21/32-time_fix_timespec_add_ns.patch b/target/linux/generic-2.6/patches-2.6.21/32-time_fix_timespec_add_ns.patch
new file mode 100644
index 0000000000..378ee28ed9
--- /dev/null
+++ b/target/linux/generic-2.6/patches-2.6.21/32-time_fix_timespec_add_ns.patch
@@ -0,0 +1,17 @@
+time: prevent the loop in timespec_add_ns() from being optimised away
+
+Since some architectures don't support __udivdi3().
+
+--- a/include/linux/time.h
++++ b/include/linux/time.h
+@@ -170,6 +170,10 @@ static inline void timespec_add_ns(struc
+ {
+ ns += a->tv_nsec;
+ while(unlikely(ns >= NSEC_PER_SEC)) {
++ /* The following asm() prevents the compiler from
++ * optimising this loop into a modulo operation. */
++ asm("" : "+r"(ns));
++
+ ns -= NSEC_PER_SEC;
+ a->tv_sec++;
+ }
diff --git a/target/linux/generic-2.6/patches-2.6.21/900-headers_type_and_time.patch b/target/linux/generic-2.6/patches-2.6.21/900-headers_type_and_time.patch
index ed812eef34..8d748598e1 100644
--- a/target/linux/generic-2.6/patches-2.6.21/900-headers_type_and_time.patch
+++ b/target/linux/generic-2.6/patches-2.6.21/900-headers_type_and_time.patch
@@ -11,7 +11,7 @@
#include <linux/types.h>
#ifdef __KERNEL__
-@@ -224,4 +228,6 @@ struct itimerval {
+@@ -228,4 +232,6 @@ struct itimerval {
*/
#define TIMER_ABSTIME 0x01