summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2014-12-28 22:25:29 -0600
committerWaldemar Brodkorb <wbx@openadk.org>2014-12-28 22:27:34 -0600
commit0e3585dae500fb0a976888f5dbdf3a37769680ec (patch)
tree89f0f3768794a9daf3253c8a2e832c3ebb3a582a
parent6488ae4a7b82ac7c95adc34281459c373fba6be3 (diff)
bring coldfire support in shape
Binutils 2.24 is required to get a working kernel. Ethernet in Qemu is still broken. Qemu Patch is still rquired in 2.2.0. Only kernel+initramfs is working. It seems the signal handler problem is gone with sash and simpleinit.
-rw-r--r--Config.in1
-rw-r--r--mk/package.mk2
-rw-r--r--package/busybox/config/init/Config.in2
-rw-r--r--package/simpleinit/Makefile25
-rwxr-xr-xpackage/simpleinit/files/rc1
-rw-r--r--package/uclibc-ng/Makefile2
-rw-r--r--target/config/Config.in1
-rw-r--r--target/config/Config.in.binfmt18
-rw-r--r--target/config/Config.in.toolchain5
-rw-r--r--target/linux/config/Config.in.kernel102
-rw-r--r--target/linux/kernel.config1
-rw-r--r--target/m68k/kernel/qemu-m68k4
-rw-r--r--target/m68k/qemu-m68k/patches/3.14.26/m68k-coldfire-fec.patch127
-rw-r--r--target/m68k/qemu-m68k/patches/3.14.26/qemu-coldfire.patch24
-rw-r--r--target/m68k/qemu-m68k/patches/3.17.7/m68k-coldfire-fec.patch118
-rw-r--r--target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch6
-rw-r--r--toolchain/elf2flt/Makefile2
17 files changed, 362 insertions, 79 deletions
diff --git a/Config.in b/Config.in
index aa41c14f7..3b6f26955 100644
--- a/Config.in
+++ b/Config.in
@@ -32,6 +32,7 @@ source "target/config/Config.in.qemuopts"
source "target/config/Config.in.kernelversion"
source "target/config/Config.in.libc"
source "target/config/Config.in.abi"
+source "target/config/Config.in.binfmt"
source "target/config/Config.in.target"
endmenu
diff --git a/mk/package.mk b/mk/package.mk
index be50aaa5e..84909193e 100644
--- a/mk/package.mk
+++ b/mk/package.mk
@@ -109,11 +109,13 @@ IDIR_$(1)_DBG= $(WRKDIR)/fake-${ADK_TARGET_CPU_ARCH}/pkg-$(2)-dbg
ifneq (${ADK_PACKAGE_$(1)}${DEVELOPER},)
ifneq (,$(filter dev,$(7)))
ifneq ($(ADK_TARGET_USE_STATIC_LIBS),y)
+ifneq ($(ADK_TARGET_BINFMT_FLAT),y)
ALL_IPKGS+= $$(IPKG_$(1))
ALL_IDIRS+= $${IDIR_$(1)}
ALL_POSTINST+= $(2)-install
$(2)-install:
endif
+endif
else
ALL_IPKGS+= $$(IPKG_$(1))
ALL_IDIRS+= $${IDIR_$(1)}
diff --git a/package/busybox/config/init/Config.in b/package/busybox/config/init/Config.in
index 58ab4bca4..2cd18269c 100644
--- a/package/busybox/config/init/Config.in
+++ b/package/busybox/config/init/Config.in
@@ -74,7 +74,7 @@ config BUSYBOX_TELINIT_PATH
config BUSYBOX_INIT
bool "init"
default y
- depends on !ADK_TARGET_UCLINUX
+ depends on !ADK_PACKAGE_SIMPLEINIT
select BUSYBOX_FEATURE_SYSLOG
help
init is the first program run when the system boots.
diff --git a/package/simpleinit/Makefile b/package/simpleinit/Makefile
index b06bd736a..ab1d15928 100644
--- a/package/simpleinit/Makefile
+++ b/package/simpleinit/Makefile
@@ -1,19 +1,20 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
-include ${ADK_TOPDIR}/rules.mk
+include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= simpleinit
PKG_VERSION:= 1.0
PKG_RELEASE:= 1
PKG_DESCR:= simple init for systems without mmu
PKG_SECTION:= base/apps
+PKG_CFLINE_SIMPLEINIT:= select BUSYBOX_INIT n
NO_DISTFILES:= 1
-include ${ADK_TOPDIR}/mk/package.mk
+include $(ADK_TOPDIR)/mk/package.mk
-$(eval $(call PKG_template,SIMPLEINIT,simpleinit,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+$(eval $(call PKG_template,SIMPLEINIT,simpleinit,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
CONFIG_STYLE:= manual
BUILD_STYLE:= manual
@@ -22,15 +23,15 @@ INSTALL_STYLE:= manual
TARGET_CPPFLAGS+= -DCONFIG_USER_INIT_CONSOLE_SH
do-build:
- PATH="${TOOLCHAIN_DIR}/usr/bin:$$PATH" \
- ${TARGET_CC} ${TARGET_CPPFLAGS} ${TARGET_CFLAGS} ${TARGET_LDFLAGS} \
- -o ${WRKBUILD}/simpleinit ${WRKBUILD}/simpleinit.c
+ PATH='$(HOST_PATH)' \
+ $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \
+ -o $(WRKBUILD)/simpleinit $(WRKBUILD)/simpleinit.c
do-install:
- ${INSTALL_DIR} ${IDIR_SIMPLEINIT}/etc
- ${CP} ./files/rc ${IDIR_SIMPLEINIT}/etc
- ${CP} ./files/inittab ${IDIR_SIMPLEINIT}/etc
- ${INSTALL_DIR} ${IDIR_SIMPLEINIT}/sbin
- ${INSTALL_BIN} ${WRKBUILD}/simpleinit ${IDIR_SIMPLEINIT}/sbin/init
+ $(INSTALL_DIR) $(IDIR_SIMPLEINIT)/etc
+ $(CP) ./files/rc $(IDIR_SIMPLEINIT)/etc
+ $(CP) ./files/inittab $(IDIR_SIMPLEINIT)/etc
+ $(INSTALL_DIR) $(IDIR_SIMPLEINIT)/sbin
+ $(INSTALL_BIN) $(WRKBUILD)/simpleinit $(IDIR_SIMPLEINIT)/sbin/init
-include ${ADK_TOPDIR}/mk/pkg-bottom.mk
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/simpleinit/files/rc b/package/simpleinit/files/rc
index ec8ace337..8d7189793 100755
--- a/package/simpleinit/files/rc
+++ b/package/simpleinit/files/rc
@@ -11,5 +11,4 @@ mkdir -p /var/log
mkdir -p /var/run
mkdir -p /var/tmp
mdev -s
-mount
ifconfig lo 127.0.0.1 up
diff --git a/package/uclibc-ng/Makefile b/package/uclibc-ng/Makefile
index 6ba7c0893..68a37c866 100644
--- a/package/uclibc-ng/Makefile
+++ b/package/uclibc-ng/Makefile
@@ -36,7 +36,7 @@ do-install:
test -z $(ADK_RUNTIME_TIMEZONE) || \
grep $(ADK_RUNTIME_TIMEZONE) ./files/tz.lst | \
cut -f 2 > $(IDIR_UCLIBC_NG)/etc/TZ
-ifneq ($(ADK_TARGET_USE_STATIC_LIBS)$(ADK_TARGET_UCLINUX),y)
+ifneq ($(ADK_TARGET_USE_STATIC_LIBS)$(ADK_TARGET_BINFMT_FLAT),y)
$(CP) $(STAGING_TARGET_DIR)/lib/libc.so.* $(IDIR_UCLIBC_NG)/$(ADK_TARGET_LIBC_PATH)
$(CP) $(STAGING_TARGET_DIR)/lib/libuClibc-$(PKG_VERSION).so \
$(IDIR_UCLIBC_NG)/$(ADK_TARGET_LIBC_PATH)
diff --git a/target/config/Config.in b/target/config/Config.in
index 102830f6e..16d834e0a 100644
--- a/target/config/Config.in
+++ b/target/config/Config.in
@@ -16,7 +16,6 @@ config ADK_TARGET_TOOLCHAIN
config ADK_TARGET_UCLINUX
bool
- select ADK_TARGET_USE_STATIC_LIBS
select ADK_PACKAGE_SASH
select ADK_PACKAGE_SIMPLEINIT
diff --git a/target/config/Config.in.binfmt b/target/config/Config.in.binfmt
new file mode 100644
index 000000000..6cd2c4b6b
--- /dev/null
+++ b/target/config/Config.in.binfmt
@@ -0,0 +1,18 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+choice
+prompt "Binary Format"
+depends on ADK_TARGET_ARCH_M68K || ADK_TARGET_ARCH_BFIN
+
+config ADK_TARGET_BINFMT_ELF
+ bool "ELF"
+
+config ADK_TARGET_BINFMT_FDPIC
+ bool "FDPIC"
+ depends on ADK_TARGET_ARCH_BFIN
+
+config ADK_TARGET_BINFMT_FLAT
+ bool "FLAT"
+
+endchoice
diff --git a/target/config/Config.in.toolchain b/target/config/Config.in.toolchain
index 5d26f8980..bff7e3d9e 100644
--- a/target/config/Config.in.toolchain
+++ b/target/config/Config.in.toolchain
@@ -66,8 +66,7 @@ config ADK_TOOLCHAIN_BINUTILS_2_20_1
config ADK_TOOLCHAIN_BINUTILS_2_22
bool "2.22"
depends on ADK_TARGET_ARCH_BFIN \
- || ADK_TARGET_ARCH_CRIS \
- || ADK_TARGET_ARCH_M68K
+ || ADK_TARGET_ARCH_CRIS
config ADK_TOOLCHAIN_BINUTILS_2_23_ARC
bool "2.23-arc"
@@ -79,7 +78,6 @@ config ADK_TOOLCHAIN_BINUTILS_2_24
depends on !ADK_TARGET_ARCH_ARC
depends on !ADK_TARGET_ARCH_AVR32
depends on !ADK_TARGET_ARCH_CRIS
- depends on !ADK_TARGET_ARCH_M68K
config ADK_TOOLCHAIN_BINUTILS_GIT
bool "git"
@@ -87,7 +85,6 @@ config ADK_TOOLCHAIN_BINUTILS_GIT
depends on !ADK_TARGET_ARCH_ARC
depends on !ADK_TARGET_ARCH_AVR32
depends on !ADK_TARGET_ARCH_CRIS
- depends on !ADK_TARGET_ARCH_M68K
endchoice
diff --git a/target/linux/config/Config.in.kernel b/target/linux/config/Config.in.kernel
index dcc7b5ed1..816982b12 100644
--- a/target/linux/config/Config.in.kernel
+++ b/target/linux/config/Config.in.kernel
@@ -1,128 +1,128 @@
config ADK_KERNEL_STAGING
- boolean
+ bool
config ADK_KERNEL_EXPERIMENTAL
- boolean
+ bool
config ADK_KERNEL_RESET_CONTROLLER
- boolean
+ bool
config ADK_KERNEL_BLK_DEV_INITRD
- boolean
+ bool
config ADK_KERNEL_BLK_DEV_RAM
- boolean
+ bool
config ADK_KERNEL_INITRAMFS_COMPRESSION_NONE
- boolean
+ bool
config ADK_KERNEL_INITRAMFS_COMPRESSION_XZ
+ bool
select ADK_HOST_NEED_XZ
- boolean
config ADK_KERNEL_INITRAMFS_COMPRESSION_LZ4
+ bool
select ADK_HOST_NEED_LZ4
- boolean
config ADK_KERNEL_INITRAMFS_COMPRESSION_LZMA
+ bool
select ADK_HOST_NEED_LZMA
- boolean
config ADK_KERNEL_INITRAMFS_COMPRESSION_LZO
+ bool
select ADK_HOST_NEED_LZOP
- boolean
config ADK_KERNEL_INITRAMFS_COMPRESSION_BZIP2
+ bool
select ADK_HOST_NEED_BZIP2
- boolean
config ADK_KERNEL_INITRAMFS_COMPRESSION_GZIP
- boolean
+ bool
config ADK_KERNEL_RD_GZIP
- boolean
+ bool
config ADK_KERNEL_KERNEL_GZIP
- boolean
+ bool
config ADK_KERNEL_RD_BZIP2
- boolean
+ bool
config ADK_KERNEL_KERNEL_BZIP2
- boolean
+ bool
config ADK_KERNEL_RD_LZ4
- boolean
+ bool
config ADK_KERNEL_KERNEL_LZ4
- boolean
+ bool
config ADK_KERNEL_RD_LZMA
- boolean
+ bool
config ADK_KERNEL_KERNEL_LZMA
- boolean
+ bool
config ADK_KERNEL_RD_LZO
- boolean
+ bool
config ADK_KERNEL_KERNEL_LZO
- boolean
+ bool
config ADK_KERNEL_RD_XZ
- boolean
+ bool
config ADK_KERNEL_KERNEL_XZ
- boolean
+ bool
config ADK_KERNEL_INITRAMFS_SOURCE
string
default ""
config ADK_KERNEL_NETWORK_FILESYSTEMS
- boolean
+ bool
config ADK_KERNEL_IP_PNP
- boolean
+ bool
config ADK_KERNEL_IP_PNP_DHCP
- boolean
+ bool
config ADK_KERNEL_ROOT_NFS
- boolean
+ bool
config ADK_KERNEL_NFS_COMMON
- boolean
+ bool
config ADK_KERNEL_64BIT
- boolean
+ bool
default y if ADK_LINUX_64
config ADK_KERNEL_CPU_MIPS64
- boolean
+ bool
config ADK_KERNEL_CPU_MIPS64_R1
- boolean
+ bool
config ADK_KERNEL_CPU_MIPS64_R2
- boolean
+ bool
# ARM specific
config ADK_KERNEL_AEABI
- boolean
+ bool
default y if ADK_TARGET_ARCH_ARM
config ADK_KERNEL_THUMB2_KERNEL
- boolean
+ bool
# endianess
config ADK_KERNEL_CPU_BIG_ENDIAN
+ bool
default y if ADK_big
- boolean
config ADK_KERNEL_CPU_LITTLE_ENDIAN
+ bool
default y if ADK_little
- boolean
choice
prompt "Kernel Compression"
@@ -180,16 +180,19 @@ endchoice
menu "Kernel options"
+config ADK_KERNEL_MMU
+ bool
+ default n if ADK_TARGET_UCLINUX
+ default y
+
config ADK_KERNEL_SMP
- prompt "Enable symmetric multi processing"
- boolean
- default y if ADK_TARGET_WITH_SMP
+ bool "Enable symmetric multi processing"
depends on ADK_TARGET_WITH_SMP
+ default y if ADK_TARGET_WITH_SMP
default n
config ADK_KERNEL_HIGHMEM
- prompt "Enable high memory"
- boolean
+ bool "Enable high memory"
default y if ADK_TARGET_CUBOX_I4PRO
default y if ADK_TARGET_CUBOX_I2ULTRA
default y if ADK_TARGET_CUBOX_I2EX
@@ -197,13 +200,11 @@ config ADK_KERNEL_HIGHMEM
default n
config ADK_KERNEL_PREEMPT
- prompt "Enable preemptive kernel"
- boolean
+ bool "Enable preemptive kernel"
default n
config ADK_KERNEL_CC_OPTIMIZE_FOR_SIZE
- prompt "Optimize for size"
- boolean
+ bool "Optimize for size"
# does not boot in qemu
depends on !ADK_TARGET_ARCH_MICROBLAZE
default y
@@ -215,16 +216,13 @@ default ADK_KERNEL_PAGE_SIZE_16KB if ADK_TARGET_SYSTEM_LEMOTE_YEELONG
default ADK_KERNEL_PAGE_SIZE_4KB
config ADK_KERNEL_PAGE_SIZE_4KB
- prompt "4kB"
- boolean
+ bool "4kB"
config ADK_KERNEL_PAGE_SIZE_16KB
- prompt "16kB"
- boolean
+ bool "16kB"
config ADK_KERNEL_PAGE_SIZE_64KB
- prompt "64kB"
- boolean
+ bool "64kB"
endchoice
endmenu
diff --git a/target/linux/kernel.config b/target/linux/kernel.config
index 696820c61..6ca00150f 100644
--- a/target/linux/kernel.config
+++ b/target/linux/kernel.config
@@ -1,7 +1,6 @@
CONFIG_DEFAULT_HOSTNAME="openadk"
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE=""
-CONFIG_MMU=y
CONFIG_NO_HZ=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
diff --git a/target/m68k/kernel/qemu-m68k b/target/m68k/kernel/qemu-m68k
index 681785452..3caa5323b 100644
--- a/target/m68k/kernel/qemu-m68k
+++ b/target/m68k/kernel/qemu-m68k
@@ -1,16 +1,16 @@
CONFIG_M68K=y
CONFIG_COLDFIRE=y
CONFIG_M520x=y
-# CONFIG_MMU is not set
CONFIG_CLOCK_SET=y
CONFIG_CLOCK_FREQ=66666666
CONFIG_CLOCK_DIV=1
CONFIG_M5208EVB=y
CONFIG_FREESCALE=y
CONFIG_RAMBASE=0x40000000
-CONFIG_RAMSIZE=0x2000000
+CONFIG_RAMSIZE=0x0
CONFIG_VECTORBASE=0x40000000
CONFIG_KERNELBASE=0x40020000
+CONFIG_4KSTACKS=y
CONFIG_RAMKERNEL=y
CONFIG_BINFMT_FLAT=y
CONFIG_SERIAL_MCF=y
diff --git a/target/m68k/qemu-m68k/patches/3.14.26/m68k-coldfire-fec.patch b/target/m68k/qemu-m68k/patches/3.14.26/m68k-coldfire-fec.patch
new file mode 100644
index 000000000..be0b18ad7
--- /dev/null
+++ b/target/m68k/qemu-m68k/patches/3.14.26/m68k-coldfire-fec.patch
@@ -0,0 +1,127 @@
+diff -Nur linux-3.14.26.orig/drivers/net/ethernet/freescale/fec_main.c linux-3.14.26/drivers/net/ethernet/freescale/fec_main.c
+--- linux-3.14.26.orig/drivers/net/ethernet/freescale/fec_main.c 2014-12-06 17:56:06.000000000 -0600
++++ linux-3.14.26/drivers/net/ethernet/freescale/fec_main.c 2014-12-28 22:15:41.533921249 -0600
+@@ -152,7 +152,7 @@
+ module_param_array(macaddr, byte, NULL, 0);
+ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address");
+
+-#if defined(CONFIG_M5272)
++#if defined(CONFIG_COLDFIRE)
+ /*
+ * Some hardware gets it MAC address out of local flash memory.
+ * if this is non-zero then assume it is the address to get MAC from.
+@@ -170,7 +170,7 @@
+ #else
+ #define FEC_FLASHMAC 0
+ #endif
+-#endif /* CONFIG_M5272 */
++#endif /* CONFIG_COLDFIRE */
+
+ #if (((RX_RING_SIZE + TX_RING_SIZE) * 32) > PAGE_SIZE)
+ #error "FEC: descriptor ring size constants too large"
+@@ -565,7 +565,7 @@
+ /* Set MII speed */
+ writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED);
+
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ /* set RX checksum */
+ val = readl(fep->hwp + FEC_RACC);
+ if (fep->csum_flags & FLAG_RX_CSUM_ENABLED)
+@@ -626,7 +626,7 @@
+ #endif
+ }
+
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ /* enable pause frame*/
+ if ((fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) ||
+ ((fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) &&
+@@ -644,13 +644,13 @@
+ } else {
+ rcntl &= ~FEC_ENET_FCE;
+ }
+-#endif /* !defined(CONFIG_M5272) */
++#endif /* !defined(CONFIG_COLDFIRE) */
+
+ writel(rcntl, fep->hwp + FEC_R_CNTRL);
+
+ /* Setup multicast filter. */
+ set_multicast_list(ndev);
+-#ifndef CONFIG_M5272
++#ifndef CONFIG_COLDFIRE
+ writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
+ writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
+ #endif
+@@ -665,7 +665,7 @@
+ if (fep->bufdesc_ex)
+ ecntl |= (1 << 4);
+
+-#ifndef CONFIG_M5272
++#ifndef CONFIG_COLDFIRE
+ /* Enable the MIB statistic event counters */
+ writel(0 << 31, fep->hwp + FEC_MIB_CTRLSTAT);
+ #endif
+@@ -1117,7 +1117,7 @@
+ * 3) from flash or fuse (via platform data)
+ */
+ if (!is_valid_ether_addr(iap)) {
+-#ifdef CONFIG_M5272
++#ifdef CONFIG_COLDFIRE
+ if (FEC_FLASHMAC)
+ iap = (unsigned char *)FEC_FLASHMAC;
+ #else
+@@ -1304,7 +1304,7 @@
+ /* mask with MAC supported features */
+ if (id_entry->driver_data & FEC_QUIRK_HAS_GBIT) {
+ phy_dev->supported &= PHY_GBIT_FEATURES;
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ phy_dev->supported |= SUPPORTED_Pause;
+ #endif
+ }
+@@ -1491,7 +1491,7 @@
+ }
+ }
+
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+
+ static void fec_enet_get_pauseparam(struct net_device *ndev,
+ struct ethtool_pauseparam *pause)
+@@ -1637,7 +1637,7 @@
+ return -EOPNOTSUPP;
+ }
+ }
+-#endif /* !defined(CONFIG_M5272) */
++#endif /* !defined(CONFIG_COLDFIRE) */
+
+ static int fec_enet_nway_reset(struct net_device *dev)
+ {
+@@ -1651,7 +1651,7 @@
+ }
+
+ static const struct ethtool_ops fec_enet_ethtool_ops = {
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ .get_pauseparam = fec_enet_get_pauseparam,
+ .set_pauseparam = fec_enet_set_pauseparam,
+ #endif
+@@ -1661,7 +1661,7 @@
+ .get_link = ethtool_op_get_link,
+ .get_ts_info = fec_enet_get_ts_info,
+ .nway_reset = fec_enet_nway_reset,
+-#ifndef CONFIG_M5272
++#ifndef CONFIG_COLDFIRE
+ .get_ethtool_stats = fec_enet_get_ethtool_stats,
+ .get_strings = fec_enet_get_strings,
+ .get_sset_count = fec_enet_get_sset_count,
+@@ -2110,7 +2110,7 @@
+ /* setup board info structure */
+ fep = netdev_priv(ndev);
+
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ /* default enable pause frame auto negotiation */
+ if (pdev->id_entry &&
+ (pdev->id_entry->driver_data & FEC_QUIRK_HAS_GBIT))
diff --git a/target/m68k/qemu-m68k/patches/3.14.26/qemu-coldfire.patch b/target/m68k/qemu-m68k/patches/3.14.26/qemu-coldfire.patch
new file mode 100644
index 000000000..5bbda8c4d
--- /dev/null
+++ b/target/m68k/qemu-m68k/patches/3.14.26/qemu-coldfire.patch
@@ -0,0 +1,24 @@
+m68k: enabled software emulation of separate supervisor/user stack
+
+Recent Coldfires have separate supervisor and user stack pointers, but
+since older Coldfires didn't have that, the Linux kernel has a kind of
+emulation mechanism for those pointers.
+
+Apparently, according to the Kconfig.cpu file, the 5208 is supposed to
+support such separate pointers, but Qemu doesn't implement it. So we
+cheat a bit here and force the usage of emulated separate stack
+pointers.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
+
+diff -Nur linux-3.14.26.orig/arch/m68k/Kconfig.cpu linux-3.14.26/arch/m68k/Kconfig.cpu
+--- linux-3.14.26.orig/arch/m68k/Kconfig.cpu 2014-12-06 17:56:06.000000000 -0600
++++ linux-3.14.26/arch/m68k/Kconfig.cpu 2014-12-28 03:00:39.279037664 -0600
+@@ -146,6 +146,7 @@
+ depends on !MMU
+ select GENERIC_CLOCKEVENTS
+ select HAVE_CACHE_SPLIT
++ select COLDFIRE_SW_A7
+ help
+ Freescale Coldfire 5207/5208 processor support.
+
diff --git a/target/m68k/qemu-m68k/patches/3.17.7/m68k-coldfire-fec.patch b/target/m68k/qemu-m68k/patches/3.17.7/m68k-coldfire-fec.patch
new file mode 100644
index 000000000..63c99e3bd
--- /dev/null
+++ b/target/m68k/qemu-m68k/patches/3.17.7/m68k-coldfire-fec.patch
@@ -0,0 +1,118 @@
+diff -Nur linux-3.17.7.orig/drivers/net/ethernet/freescale/fec_main.c linux-3.17.7/drivers/net/ethernet/freescale/fec_main.c
+--- linux-3.17.7.orig/drivers/net/ethernet/freescale/fec_main.c 2014-12-16 11:37:26.000000000 -0600
++++ linux-3.17.7/drivers/net/ethernet/freescale/fec_main.c 2014-12-28 21:27:24.773847877 -0600
+@@ -155,7 +155,7 @@
+ module_param_array(macaddr, byte, NULL, 0);
+ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address");
+
+-#if defined(CONFIG_M5272)
++#if defined(CONFIG_COLDFIRE)
+ /*
+ * Some hardware gets it MAC address out of local flash memory.
+ * if this is non-zero then assume it is the address to get MAC from.
+@@ -173,7 +173,7 @@
+ #else
+ #define FEC_FLASHMAC 0
+ #endif
+-#endif /* CONFIG_M5272 */
++#endif /* CONFIG_COLDFIRE */
+
+ /* Interrupt events/masks. */
+ #define FEC_ENET_HBERR ((uint)0x80000000) /* Heartbeat error */
+@@ -889,7 +889,7 @@
+ /* Set MII speed */
+ writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED);
+
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ /* set RX checksum */
+ val = readl(fep->hwp + FEC_RACC);
+ if (fep->csum_flags & FLAG_RX_CSUM_ENABLED)
+@@ -950,7 +950,7 @@
+ #endif
+ }
+
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ /* enable pause frame*/
+ if ((fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) ||
+ ((fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) &&
+@@ -968,13 +968,13 @@
+ } else {
+ rcntl &= ~FEC_ENET_FCE;
+ }
+-#endif /* !defined(CONFIG_M5272) */
++#endif /* !defined(CONFIG_COLDFIRE) */
+
+ writel(rcntl, fep->hwp + FEC_R_CNTRL);
+
+ /* Setup multicast filter. */
+ set_multicast_list(ndev);
+-#ifndef CONFIG_M5272
++#ifndef CONFIG_COLDFIRE
+ writel(0, fep->hwp + FEC_HASH_TABLE_HIGH);
+ writel(0, fep->hwp + FEC_HASH_TABLE_LOW);
+ #endif
+@@ -989,7 +989,7 @@
+ if (fep->bufdesc_ex)
+ ecntl |= (1 << 4);
+
+-#ifndef CONFIG_M5272
++#ifndef CONFIG_COLDFIRE
+ /* Enable the MIB statistic event counters */
+ writel(0 << 31, fep->hwp + FEC_MIB_CTRLSTAT);
+ #endif
+@@ -1436,7 +1436,7 @@
+ * 3) from flash or fuse (via platform data)
+ */
+ if (!is_valid_ether_addr(iap)) {
+-#ifdef CONFIG_M5272
++#ifdef CONFIG_COLDFIRE
+ if (FEC_FLASHMAC)
+ iap = (unsigned char *)FEC_FLASHMAC;
+ #else
+@@ -1699,7 +1699,7 @@
+ if (id_entry->driver_data & FEC_QUIRK_HAS_GBIT) {
+ phy_dev->supported &= PHY_GBIT_FEATURES;
+ phy_dev->supported &= ~SUPPORTED_1000baseT_Half;
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ phy_dev->supported |= SUPPORTED_Pause;
+ #endif
+ }
+@@ -1894,7 +1894,7 @@
+ }
+ }
+
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+
+ static void fec_enet_get_pauseparam(struct net_device *ndev,
+ struct ethtool_pauseparam *pause)
+@@ -2049,7 +2049,7 @@
+ return -EOPNOTSUPP;
+ }
+ }
+-#endif /* !defined(CONFIG_M5272) */
++#endif /* !defined(CONFIG_COLDFIRE) */
+
+ static int fec_enet_nway_reset(struct net_device *dev)
+ {
+@@ -2068,7 +2068,7 @@
+ .get_drvinfo = fec_enet_get_drvinfo,
+ .nway_reset = fec_enet_nway_reset,
+ .get_link = ethtool_op_get_link,
+-#ifndef CONFIG_M5272
++#ifndef CONFIG_COLDFIRE
+ .get_pauseparam = fec_enet_get_pauseparam,
+ .set_pauseparam = fec_enet_set_pauseparam,
+ .get_strings = fec_enet_get_strings,
+@@ -2571,7 +2571,7 @@
+ /* setup board info structure */
+ fep = netdev_priv(ndev);
+
+-#if !defined(CONFIG_M5272)
++#if !defined(CONFIG_COLDFIRE)
+ /* default enable pause frame auto negotiation */
+ if (pdev->id_entry &&
+ (pdev->id_entry->driver_data & FEC_QUIRK_HAS_GBIT))
diff --git a/target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch b/target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch
index 503fe8ef3..14d2f610b 100644
--- a/target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch
+++ b/target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch
@@ -11,9 +11,9 @@ pointers.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
-diff -Nur linux-3.16.orig/arch/m68k/Kconfig.cpu linux-3.16/arch/m68k/Kconfig.cpu
---- linux-3.16.orig/arch/m68k/Kconfig.cpu 2014-08-04 00:25:02.000000000 +0200
-+++ linux-3.16/arch/m68k/Kconfig.cpu 2014-08-13 16:58:59.568332805 +0200
+diff -Nur linux-3.17.7.orig/arch/m68k/Kconfig.cpu linux-3.17.7/arch/m68k/Kconfig.cpu
+--- linux-3.17.7.orig/arch/m68k/Kconfig.cpu 2014-12-16 11:37:26.000000000 -0600
++++ linux-3.17.7/arch/m68k/Kconfig.cpu 2014-12-27 14:12:19.291459730 -0600
@@ -146,6 +146,7 @@
depends on !MMU
select GENERIC_CLOCKEVENTS
diff --git a/toolchain/elf2flt/Makefile b/toolchain/elf2flt/Makefile
index 4017c2ad3..a42398a3e 100644
--- a/toolchain/elf2flt/Makefile
+++ b/toolchain/elf2flt/Makefile
@@ -6,7 +6,7 @@ include Makefile.inc
include ../rules.mk
include ${ADK_TOPDIR}/mk/buildhlp.mk
-BINUTILS_VERSION:= 2.22
+BINUTILS_VERSION:= 2.24
$(WRKBUILD)/.headers:
$(WRKBUILD)/.configured: