From 38e356a749191c1832c9726b0b6cb913737af700 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Mon, 1 Aug 2011 13:26:08 +0200 Subject: different make bulkallmod fixes --- mk/vars.mk | 2 +- package/DirectFB/Makefile | 5 +- package/asterisk/Makefile | 1 + package/cluster-glue/Makefile | 2 + package/libhugetlbfs/Makefile | 1 + package/llvm/patches/patch-Makefile_rules | 11 + package/mplayer/Makefile | 11 +- package/mplayer/patches/patch-Makefile | 12 +- .../patches/patch-stream_asf_mmst_streaming_c | 23 + .../mplayer/patches/patch-stream_asf_streaming_c | 27 + package/openjdk/Makefile | 2 +- package/resource-agents/Makefile | 2 + package/xf86-video-geode/patches/patch-src_z4l_c | 10 + rules.mk | 1 + target/config/Config.in | 23 +- target/linux/config/Config.in.bluetooth | 2 + target/linux/config/Config.in.crypto | 2 + target/linux/patches/2.6.39/cris.patch | 13194 +++ target/linux/patches/2.6.39/ocf-20100325.patch | 90188 +++++++++++++++++++ 19 files changed, 103494 insertions(+), 25 deletions(-) create mode 100644 package/llvm/patches/patch-Makefile_rules create mode 100644 package/mplayer/patches/patch-stream_asf_mmst_streaming_c create mode 100644 package/mplayer/patches/patch-stream_asf_streaming_c create mode 100644 package/xf86-video-geode/patches/patch-src_z4l_c create mode 100644 target/linux/patches/2.6.39/cris.patch create mode 100644 target/linux/patches/2.6.39/ocf-20100325.patch diff --git a/mk/vars.mk b/mk/vars.mk index 3e8a26094..3776b57b4 100644 --- a/mk/vars.mk +++ b/mk/vars.mk @@ -120,7 +120,7 @@ LINUX_HEADER_DIR:= $(STAGING_DIR)/linux-header KERNEL_MODULE_FLAGS:= ARCH=${ARCH} KERNELVERSION="2.6" \ KERNEL_PATH=${LINUX_DIR} KERNELDIR=${LINUX_DIR} KERNEL_DIR=${LINUX_DIR} \ PREFIX=/usr CROSS_COMPILE="${TARGET_CROSS}" \ - LDFLAGS="" CFLAGS_MODULE="-fhonour-copts" V=1 + LDFLAGS="$(ADK_TARGET_KERNEL_LDFLAGS)" CFLAGS_MODULE="-fhonour-copts" V=1 TARGET_CONFIGURE_OPTS= PATH='${TARGET_PATH}' \ AR='$(TARGET_CROSS)ar' \ diff --git a/package/DirectFB/Makefile b/package/DirectFB/Makefile index c9b404fe2..db3a9f115 100644 --- a/package/DirectFB/Makefile +++ b/package/DirectFB/Makefile @@ -38,10 +38,9 @@ CONFIGURE_ARGS+= --with-inputdrivers=linuxinput,keyboard,ps2mouse \ # This is to overcome libtool fuckup - when building without, # libtool calls (the correct) ld directly without parameters, # which then chooses the wrong default emulation (which is -# probably the real problem here). LDEMULATION overrides ld's -# wrong choice. +# probably the real problem here). ifeq (${ADK_TARGET_SYSTEM_LEMOTE_YEELONG},y) -XAKE_FLAGS+= LDEMULATION=elf64ltsmip +XAKE_FLAGS+= LDFLAGS=$(ADK_TARGET_ABI_CFLAGS) endif post-install: diff --git a/package/asterisk/Makefile b/package/asterisk/Makefile index c948531b2..d3a55ad1f 100644 --- a/package/asterisk/Makefile +++ b/package/asterisk/Makefile @@ -60,6 +60,7 @@ CONFIGURE_ARGS= --with-z=${STAGING_TARGET_DIR}/usr \ --without-nbs \ --without-netsnmp \ --without-newt \ + --without-openais \ --without-osptk \ --without-oss \ --without-popt \ diff --git a/package/cluster-glue/Makefile b/package/cluster-glue/Makefile index f968db8d2..a2d8f365e 100644 --- a/package/cluster-glue/Makefile +++ b/package/cluster-glue/Makefile @@ -13,6 +13,8 @@ PKG_BUILDDEP:= glib bzip2 e2fsprogs PKG_URL:= http://www.linux-ha.org/wiki/Cluster_Glue PKG_SITES:= http://openadk.org/distfiles/ +PKG_CFLINE_CLUSTER_GLUE:= depends on ADK_TARGET_LIB_GLIBC || ADK_TARGET_LIB_EGLIBC + include $(TOPDIR)/mk/package.mk $(eval $(call PKG_template,CLUSTER_GLUE,cluster-glue,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) diff --git a/package/libhugetlbfs/Makefile b/package/libhugetlbfs/Makefile index b41283736..11d8cc9a4 100644 --- a/package/libhugetlbfs/Makefile +++ b/package/libhugetlbfs/Makefile @@ -13,6 +13,7 @@ PKG_URL:= http://libhugetlbfs.ozlabs.org/ PKG_SITES:= ${MASTER_SITE_SOURCEFORGE:=libhugetlbfs/} PKG_CFLINE_LIBHUGETLBFS:= depends on ADK_TARGET_LIB_GLIBC || ADK_TARGET_LIB_EGLIBC +PKG_ARCH_DEPENDS:= x86 x86_64 arm include $(TOPDIR)/mk/package.mk diff --git a/package/llvm/patches/patch-Makefile_rules b/package/llvm/patches/patch-Makefile_rules new file mode 100644 index 000000000..51ead24f5 --- /dev/null +++ b/package/llvm/patches/patch-Makefile_rules @@ -0,0 +1,11 @@ +--- llvm-2.9.orig/Makefile.rules 2011-03-25 07:26:58.000000000 +0100 ++++ llvm-2.9/Makefile.rules 2011-07-30 12:32:43.143700539 +0200 +@@ -550,7 +550,7 @@ endif + ifndef KEEP_SYMBOLS + Strip := $(PLATFORMSTRIPOPTS) + StripWarnMsg := "(without symbols)" +- Install.StripFlag += -s ++ Install.StripFlag += + endif + + ifdef TOOL_NO_EXPORTS diff --git a/package/mplayer/Makefile b/package/mplayer/Makefile index ee2e09a44..2529c1eec 100644 --- a/package/mplayer/Makefile +++ b/package/mplayer/Makefile @@ -5,7 +5,7 @@ include ${TOPDIR}/rules.mk PKG_NAME:= mplayer PKG_VERSION:= 1.0-32749 -PKG_RELEASE:= 2 +PKG_RELEASE:= 3 PKG_MD5SUM:= aadc5d8cca503c8b18b3ed00b3a52cf5 PKG_DESCR:= popular video player PKG_SECTION:= multimedia @@ -17,7 +17,7 @@ PKG_BUILDDEP+= libX11 libXv libpng libXext jpeg PKG_URL:= http://www.mplayerhq.hu/ PKG_SITES:= http://openadk.org/distfiles/ -PKG_ARCH_DEPENDS:= x86 x86_64 mips mipsel mips64 mips64el +PKG_ARCH_DEPENDS:= x86 x86_64 mips PKG_FLAVOURS_MPLAYER:= WITH_DIRECTFB PKGFD_WITH_DIRECTFB:= enable DirectFB video output support @@ -30,15 +30,12 @@ include ${TOPDIR}/mk/package.mk $(eval $(call PKG_template,MPLAYER,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) # gcc 4.5 produces internal compiler error with -Os -TCFLAGS:=$(subst Os,O2,$(TCFLAGS)) +TARGET_CFLAGS:=$(subst Os,O2,$(TARGET_CFLAGS)) CONFIG_STYLE:= minimal FAKE_FLAGS+= INSTALLSTRIP='' -ifeq (${ADK_LINUX_MIPS64EL},y) -EXTRA_CFLAGS:= -DARCH_MIPS64 -endif -ifeq (${ADK_LINUX_MIPS64},y) +ifeq (${ADK_TARGET_SYSTEM_LEMOTE_YEELONG},y) EXTRA_CFLAGS:= -DARCH_MIPS64 endif diff --git a/package/mplayer/patches/patch-Makefile b/package/mplayer/patches/patch-Makefile index 3f57255db..bb8529c8c 100644 --- a/package/mplayer/patches/patch-Makefile +++ b/package/mplayer/patches/patch-Makefile @@ -1,6 +1,14 @@ --- mplayer-1.0-32749.orig/Makefile 2011-01-03 11:27:11.000000000 +0100 -+++ mplayer-1.0-32749/Makefile 2011-02-05 18:20:49.000000000 +0100 -@@ -816,7 +816,7 @@ mencoder$(EXESUF) mplayer$(EXESUF): ++++ mplayer-1.0-32749/Makefile 2011-07-29 17:44:21.073424743 +0200 +@@ -185,7 +185,6 @@ SRCS_COMMON-$(NEED_STRSEP) += + SRCS_COMMON-$(NEED_SWAB) += osdep/swab.c + SRCS_COMMON-$(NEED_VSSCANF) += osdep/vsscanf.c + SRCS_COMMON-$(NETWORKING) += stream/stream_netstream.c \ +- stream/asf_mmst_streaming.c \ + stream/asf_streaming.c \ + stream/cookies.c \ + stream/http.c \ +@@ -816,7 +815,7 @@ mencoder$(EXESUF) mplayer$(EXESUF): $(CC) -o $@ $^ $(EXTRALIBS) codec-cfg$(EXESUF): codec-cfg.c codec-cfg.h help_mp.h diff --git a/package/mplayer/patches/patch-stream_asf_mmst_streaming_c b/package/mplayer/patches/patch-stream_asf_mmst_streaming_c new file mode 100644 index 000000000..b16cec430 --- /dev/null +++ b/package/mplayer/patches/patch-stream_asf_mmst_streaming_c @@ -0,0 +1,23 @@ +--- mplayer-1.0-32749.orig/stream/asf_mmst_streaming.c 2011-01-03 11:26:52.000000000 +0100 ++++ mplayer-1.0-32749/stream/asf_mmst_streaming.c 2011-07-29 17:29:01.494032168 +0200 +@@ -359,20 +359,7 @@ static int interp_header (uint8_t *heade + } + + } else { +-#if 0 +- int b = i; +- printf ("unknown object (guid: %016llx, %016llx, len: %lld)\n", guid_1, guid_2, length); +- for (; b < length; b++) +- { +- if (isascii(header[b]) || isalpha(header[b])) +- printf("%c ", header[b]); +- else +- printf("%x ", header[b]); +- } +- printf("\n"); +-#else + mp_msg(MSGT_NETWORK,MSGL_WARN,MSGTR_MPDEMUX_MMST_UnknownObject); +-#endif + } + + // mp_msg(MSGT_NETWORK,MSGL_INFO,"length : %lld\n", length); diff --git a/package/mplayer/patches/patch-stream_asf_streaming_c b/package/mplayer/patches/patch-stream_asf_streaming_c new file mode 100644 index 000000000..4fa3b696b --- /dev/null +++ b/package/mplayer/patches/patch-stream_asf_streaming_c @@ -0,0 +1,27 @@ +--- mplayer-1.0-32749.orig/stream/asf_streaming.c 2011-01-03 11:26:52.000000000 +0100 ++++ mplayer-1.0-32749/stream/asf_streaming.c 2011-07-29 17:54:35.013424616 +0200 +@@ -38,7 +38,6 @@ + + #include "stream.h" + #include "libmpdemux/demuxer.h" +-#include "asf_mmst_streaming.h" + #include "network.h" + #include "tcp.h" + +@@ -87,16 +86,6 @@ static int asf_streaming_start( stream_t + if( fd==-2 ) return -1; + } + +- //Is protocol mms or mmst? +- if (!strcasecmp(proto, "mmst") || !strcasecmp(proto, "mms")) +- { +- mp_msg(MSGT_NETWORK,MSGL_V,"Trying ASF/TCP...\n"); +- fd = asf_mmst_streaming_start( stream ); +- stream->streaming_ctrl->url->port = port; +- if( fd>-1 ) return fd; +- mp_msg(MSGT_NETWORK,MSGL_V," ===> ASF/TCP failed\n"); +- if( fd==-2 ) return -1; +- } + + //Is protocol http, http_proxy, or mms? + if (!strcasecmp(proto, "http_proxy") || !strcasecmp(proto, "http") || diff --git a/package/openjdk/Makefile b/package/openjdk/Makefile index 2233c476b..db8e28e6b 100644 --- a/package/openjdk/Makefile +++ b/package/openjdk/Makefile @@ -24,7 +24,7 @@ PKG_SITES:= http://download.java.net/openjdk/jdk6/promoted/b22/ \ http://icedtea.classpath.org/download/drops/ \ http://icedtea.classpath.org/download/source/ -PKG_CFLINE_OPENJDK:= depends on ADK_TARGET_LIB_GLIBC || ADK_TARGET_LIB_EGLIBC +PKG_CFLINE_OPENJDK:= depends on ADK_TARGET_LIB_GLIBC || ADK_TARGET_LIB_EGLIBC && !ADK_TARGET_SYSTEM_LEMOTE_YEELONG # autotools infrastructure for OpenJDK ICEDTEA_NAME:= icedtea6 diff --git a/package/resource-agents/Makefile b/package/resource-agents/Makefile index 50b5fafe7..b68da9226 100644 --- a/package/resource-agents/Makefile +++ b/package/resource-agents/Makefile @@ -12,6 +12,8 @@ PKG_SECTION:= ha PKG_URL:= https://github.com/ClusterLabs/resource-agents PKG_SITES:= http://openadk.org/distfiles/ +PKG_CFLINE_RESOURCE_AGENTS:= depends on ADK_TARGET_LIB_GLIBC || ADK_TARGET_LIB_EGLIBC + include $(TOPDIR)/mk/package.mk $(eval $(call PKG_template,RESOURCE_AGENTS,resource-agents,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) diff --git a/package/xf86-video-geode/patches/patch-src_z4l_c b/package/xf86-video-geode/patches/patch-src_z4l_c new file mode 100644 index 000000000..6875eb2f3 --- /dev/null +++ b/package/xf86-video-geode/patches/patch-src_z4l_c @@ -0,0 +1,10 @@ +--- xf86-video-geode-2.11.10.orig/src/z4l.c 2010-11-09 10:20:07.000000000 +0100 ++++ xf86-video-geode-2.11.10/src/z4l.c 2011-07-31 20:58:18.763424329 +0200 +@@ -55,7 +55,6 @@ typedef long long __s64; + #define __u64 __u_64 + typedef unsigned long long __u64; + +-#include "linux/videodev.h" + #define __user + #include "linux/videodev2.h" + diff --git a/rules.mk b/rules.mk index c0f81f438..44500f761 100644 --- a/rules.mk +++ b/rules.mk @@ -32,6 +32,7 @@ ADK_TARGET_ENDIAN:= $(strip $(subst ",, $(ADK_TARGET_ENDIAN))) ADK_TARGET_CPU_ARCH:= $(strip $(subst ",, $(ADK_TARGET_CPU_ARCH))) ADK_TARGET_CFLAGS:= $(strip $(subst ",, $(ADK_TARGET_CFLAGS))) ADK_TARGET_ABI_CFLAGS:= $(strip $(subst ",, $(ADK_TARGET_ABI_CFLAGS))) +ADK_TARGET_KERNEL_LDFLAGS:= $(strip $(subst ",, $(ADK_TARGET_KERNEL_LDFLAGS))) ADK_TARGET_ABI:= $(strip $(subst ",, $(ADK_TARGET_ABI))) ADK_TARGET_IP:= $(strip $(subst ",, $(ADK_TARGET_IP))) ADK_TARGET_SUFFIX:= $(strip $(subst ",, $(ADK_TARGET_SUFFIX))) diff --git a/target/config/Config.in b/target/config/Config.in index 5162a6c72..4ab0999be 100644 --- a/target/config/Config.in +++ b/target/config/Config.in @@ -32,15 +32,12 @@ endchoice choice prompt "Target Kernel" depends on ADK_TARGET_SYSTEM_LEMOTE_YEELONG -config ADK_TARGET_KERNEL - boolean "Choose target kernel" +config ADK_TARGET_KERNEL64 + boolean "64 Bit Kernel" config ADK_TARGET_KERNEL32 boolean "32 Bit Kernel" -config ADK_TARGET_KERNEL64 - boolean "64 Bit Kernel" - endchoice config ADK_o32 @@ -61,17 +58,15 @@ config ADK_TARGET_ABI choice prompt "Target ABI" depends on ADK_TARGET_KERNEL64 && ADK_LINUX_MIPS -config ADK_ABI - boolean "Choose target ABI" - -config ADK_TARGET_ABI_O32 - boolean "O32 ABI (old)" - select ADK_o32 config ADK_TARGET_ABI_N32 boolean "N32 ABI (new)" select ADK_n32 +config ADK_TARGET_ABI_O32 + boolean "O32 ABI (old)" + select ADK_o32 + config ADK_TARGET_ABI_N64 boolean "N64 ABI" select ADK_n64 @@ -269,6 +264,12 @@ config ADK_TARGET_ABI_CFLAGS default "-mabi=n32 -Wl,-m -Wl,elf32ltsmipn32" if ADK_TARGET_ABI_N32 default "-mabi=64 -Wl,-m -Wl,elf64ltsmip" if ADK_TARGET_ABI_N64 +config ADK_TARGET_KERNEL_LDFLAGS + string + default "-mabi=64 -m elf64ltsmip" if ADK_TARGET_ABI_N32 + default "-mabi=64 -m elf64ltsmip" if ADK_TARGET_ABI_O32 + default "-mabi=64 -m elf64ltsmip" if ADK_TARGET_ABI_N64 + config ADK_TARGET_CFLAGS string default "-march=geode" if ADK_CPU_GEODE diff --git a/target/linux/config/Config.in.bluetooth b/target/linux/config/Config.in.bluetooth index 26ac067b1..73760d14c 100644 --- a/target/linux/config/Config.in.bluetooth +++ b/target/linux/config/Config.in.bluetooth @@ -82,6 +82,7 @@ config ADK_KPACKAGE_KMOD_BT_HCIBTUSB tristate default n depends on ADK_KPACKAGE_KMOD_BT + depends on ADK_TARGET_WITH_USB help Bluetooth HCI USB driver. This driver is required if you want to use Bluetooth devices with @@ -106,6 +107,7 @@ config ADK_KPACKAGE_KMOD_BT_HCIBCM203X select ADK_KPACKAGE_KMOD_FW_LOADER select ADK_KPACKAGE_KMOD_BT_HCIBTUSB depends on ADK_KPACKAGE_KMOD_BT + depends on ADK_LINUX_X86 || ADK_LINUX_X86_64 help Bluetooth HCI BCM203x USB driver. This driver provides the firmware loading mechanism for the Broadcom diff --git a/target/linux/config/Config.in.crypto b/target/linux/config/Config.in.crypto index ff6fb6b00..694443350 100644 --- a/target/linux/config/Config.in.crypto +++ b/target/linux/config/Config.in.crypto @@ -65,6 +65,8 @@ config ADK_KPACKAGE_KMOD_OCF_HIFN default n select ADK_KERNEL_OCF_OCF depends on ADK_TARGET_WITH_PCI || ADK_TARGET_WITH_MINIPCI + depends on !ADK_HARDWARE_QEMU + depends on ADK_LINUX_X86 || ADK_LINUX_X86_64 select ADK_KPACKAGE_KMOD_CRYPTO_AES help Engine for cryptodev that uses Hifn based accelerators diff --git a/target/linux/patches/2.6.39/cris.patch b/target/linux/patches/2.6.39/cris.patch new file mode 100644 index 000000000..f58391a5d --- /dev/null +++ b/target/linux/patches/2.6.39/cris.patch @@ -0,0 +1,13194 @@ +diff -Nur linux-2.6.39.orig/arch/cris/arch-v10/drivers/axisflashmap.c linux-2.6.39/arch/cris/arch-v10/drivers/axisflashmap.c +--- linux-2.6.39.orig/arch/cris/arch-v10/drivers/axisflashmap.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/drivers/axisflashmap.c 2011-07-28 16:16:35.633425525 +0200 +@@ -113,7 +113,7 @@ + + /* If no partition-table was found, we use this default-set. */ + #define MAX_PARTITIONS 7 +-#define NUM_DEFAULT_PARTITIONS 3 ++#define NUM_DEFAULT_PARTITIONS 4 + + /* + * Default flash size is 2MB. CONFIG_ETRAX_PTABLE_SECTOR is most likely the +@@ -122,19 +122,24 @@ + */ + static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = { + { +- .name = "boot firmware", +- .size = CONFIG_ETRAX_PTABLE_SECTOR, ++ .name = "kernel", ++ .size = 0x00, + .offset = 0 + }, + { +- .name = "kernel", +- .size = 0x200000 - (6 * CONFIG_ETRAX_PTABLE_SECTOR), +- .offset = CONFIG_ETRAX_PTABLE_SECTOR ++ .name = "rootfs", ++ .size = 0x200000 , ++ .offset = 0x200000 ++ }, ++ { ++ .name = "cfgfs", ++ .size = 0x20000 , ++ .offset = CONFIG_ETRAX_MTD_SIZE - 0x20000 + }, + { +- .name = "filesystem", +- .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR, +- .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR) ++ .name = "linux", ++ .size = CONFIG_ETRAX_MTD_SIZE - 0x20000, ++ .offset = 0 + } + }; + +@@ -275,6 +280,11 @@ + struct partitiontable_entry *ptable; + int use_default_ptable = 1; /* Until proven otherwise. */ + const char pmsg[] = " /dev/flash%d at 0x%08x, size 0x%08x\n"; ++ unsigned int kernel_part_size = 0; ++ unsigned char *flash_mem = (unsigned char*)(FLASH_CACHED_ADDR); ++ unsigned int flash_scan_count = 0; ++ const char *part_magic = "ACME_PART_MAGIC"; ++ unsigned int magic_len = strlen(part_magic); + + if (!(mymtd = flash_probe())) { + /* There's no reason to use this module if no flash chip can +@@ -286,6 +296,31 @@ + mymtd->name, mymtd->size); + axisflash_mtd = mymtd; + } ++ /* scan flash to findout where out partition starts */ ++ ++ printk(KERN_INFO "Scanning flash for end of kernel magic\n"); ++ for(flash_scan_count = 0; flash_scan_count < 100000; flash_scan_count++){ ++ if(strncmp(&flash_mem[flash_scan_count], part_magic, magic_len - 1) == 0) ++ { ++ kernel_part_size = flash_mem[flash_scan_count + magic_len ]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 2]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 1]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 3]; ++ printk(KERN_INFO "Kernel ends at 0x%.08X\n", kernel_part_size); ++ flash_scan_count = 1100000; ++ } ++ } ++ ++ ++ if(kernel_part_size){ ++ kernel_part_size = (kernel_part_size & 0xffff0000); ++ axis_default_partitions[0].size = kernel_part_size; ++ axis_default_partitions[1].size = mymtd->size - axis_default_partitions[0].size - axis_default_partitions[2].size; ++ axis_default_partitions[1].offset = axis_default_partitions[0].size; ++ } + + if (mymtd) { + mymtd->owner = THIS_MODULE; +@@ -354,21 +389,6 @@ + use_default_ptable = !ptable_ok; + } + +- if (romfs_in_flash) { +- /* Add an overlapping device for the root partition (romfs). */ +- +- axis_partitions[pidx].name = "romfs"; +- axis_partitions[pidx].size = romfs_length; +- axis_partitions[pidx].offset = romfs_start - FLASH_CACHED_ADDR; +- axis_partitions[pidx].mask_flags |= MTD_WRITEABLE; +- +- printk(KERN_INFO +- " Adding readonly flash partition for romfs image:\n"); +- printk(pmsg, pidx, axis_partitions[pidx].offset, +- axis_partitions[pidx].size); +- pidx++; +- } +- + #ifdef CONFIG_ETRAX_AXISFLASHMAP_MTD0WHOLE + if (mymtd) { + main_partition.size = mymtd->size; +@@ -391,36 +411,6 @@ + if (err) + panic("axisflashmap could not add MTD partitions!\n"); + } +- +- if (!romfs_in_flash) { +- /* Create an RAM device for the root partition (romfs). */ +- +-#if !defined(CONFIG_MTD_MTDRAM) || (CONFIG_MTDRAM_TOTAL_SIZE != 0) || (CONFIG_MTDRAM_ABS_POS != 0) +- /* No use trying to boot this kernel from RAM. Panic! */ +- printk(KERN_EMERG "axisflashmap: Cannot create an MTD RAM " +- "device due to kernel (mis)configuration!\n"); +- panic("This kernel cannot boot from RAM!\n"); +-#else +- struct mtd_info *mtd_ram; +- +- mtd_ram = kmalloc(sizeof(struct mtd_info), GFP_KERNEL); +- if (!mtd_ram) +- panic("axisflashmap couldn't allocate memory for " +- "mtd_info!\n"); +- +- printk(KERN_INFO " Adding RAM partition for romfs image:\n"); +- printk(pmsg, pidx, (unsigned)romfs_start, +- (unsigned)romfs_length); +- +- err = mtdram_init_device(mtd_ram, +- (void *)romfs_start, +- romfs_length, +- "romfs"); +- if (err) +- panic("axisflashmap could not initialize MTD RAM " +- "device!\n"); +-#endif +- } + return err; + } + +diff -Nur linux-2.6.39.orig/arch/cris/arch-v10/drivers/axisflashmap.c.orig linux-2.6.39/arch/cris/arch-v10/drivers/axisflashmap.c.orig +--- linux-2.6.39.orig/arch/cris/arch-v10/drivers/axisflashmap.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.39/arch/cris/arch-v10/drivers/axisflashmap.c.orig 2011-05-19 06:06:34.000000000 +0200 +@@ -0,0 +1,430 @@ ++/* ++ * Physical mapping layer for MTD using the Axis partitiontable format ++ * ++ * Copyright (c) 2001, 2002 Axis Communications AB ++ * ++ * This file is under the GPL. ++ * ++ * First partition is always sector 0 regardless of if we find a partitiontable ++ * or not. In the start of the next sector, there can be a partitiontable that ++ * tells us what other partitions to define. If there isn't, we use a default ++ * partition split defined below. ++ * ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#ifdef CONFIG_CRIS_LOW_MAP ++#define FLASH_UNCACHED_ADDR KSEG_8 ++#define FLASH_CACHED_ADDR KSEG_5 ++#else ++#define FLASH_UNCACHED_ADDR KSEG_E ++#define FLASH_CACHED_ADDR KSEG_F ++#endif ++ ++#if CONFIG_ETRAX_FLASH_BUSWIDTH==1 ++#define flash_data __u8 ++#elif CONFIG_ETRAX_FLASH_BUSWIDTH==2 ++#define flash_data __u16 ++#elif CONFIG_ETRAX_FLASH_BUSWIDTH==4 ++#define flash_data __u32 ++#endif ++ ++/* From head.S */ ++extern unsigned long romfs_start, romfs_length, romfs_in_flash; ++ ++/* The master mtd for the entire flash. */ ++struct mtd_info* axisflash_mtd = NULL; ++ ++/* Map driver functions. */ ++ ++static map_word flash_read(struct map_info *map, unsigned long ofs) ++{ ++ map_word tmp; ++ tmp.x[0] = *(flash_data *)(map->map_priv_1 + ofs); ++ return tmp; ++} ++ ++static void flash_copy_from(struct map_info *map, void *to, ++ unsigned long from, ssize_t len) ++{ ++ memcpy(to, (void *)(map->map_priv_1 + from), len); ++} ++ ++static void flash_write(struct map_info *map, map_word d, unsigned long adr) ++{ ++ *(flash_data *)(map->map_priv_1 + adr) = (flash_data)d.x[0]; ++} ++ ++/* ++ * The map for chip select e0. ++ * ++ * We run into tricky coherence situations if we mix cached with uncached ++ * accesses to we only use the uncached version here. ++ * ++ * The size field is the total size where the flash chips may be mapped on the ++ * chip select. MTD probes should find all devices there and it does not matter ++ * if there are unmapped gaps or aliases (mirrors of flash devices). The MTD ++ * probes will ignore them. ++ * ++ * The start address in map_priv_1 is in virtual memory so we cannot use ++ * MEM_CSE0_START but must rely on that FLASH_UNCACHED_ADDR is the start ++ * address of cse0. ++ */ ++static struct map_info map_cse0 = { ++ .name = "cse0", ++ .size = MEM_CSE0_SIZE, ++ .bankwidth = CONFIG_ETRAX_FLASH_BUSWIDTH, ++ .read = flash_read, ++ .copy_from = flash_copy_from, ++ .write = flash_write, ++ .map_priv_1 = FLASH_UNCACHED_ADDR ++}; ++ ++/* ++ * The map for chip select e1. ++ * ++ * If there was a gap between cse0 and cse1, map_priv_1 would get the wrong ++ * address, but there isn't. ++ */ ++static struct map_info map_cse1 = { ++ .name = "cse1", ++ .size = MEM_CSE1_SIZE, ++ .bankwidth = CONFIG_ETRAX_FLASH_BUSWIDTH, ++ .read = flash_read, ++ .copy_from = flash_copy_from, ++ .write = flash_write, ++ .map_priv_1 = FLASH_UNCACHED_ADDR + MEM_CSE0_SIZE ++}; ++ ++/* If no partition-table was found, we use this default-set. */ ++#define MAX_PARTITIONS 7 ++#define NUM_DEFAULT_PARTITIONS 3 ++ ++/* ++ * Default flash size is 2MB. CONFIG_ETRAX_PTABLE_SECTOR is most likely the ++ * size of one flash block and "filesystem"-partition needs 5 blocks to be able ++ * to use JFFS. ++ */ ++static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = { ++ { ++ .name = "boot firmware", ++ .size = CONFIG_ETRAX_PTABLE_SECTOR, ++ .offset = 0 ++ }, ++ { ++ .name = "kernel", ++ .size = 0x200000 - (6 * CONFIG_ETRAX_PTABLE_SECTOR), ++ .offset = CONFIG_ETRAX_PTABLE_SECTOR ++ }, ++ { ++ .name = "filesystem", ++ .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR, ++ .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR) ++ } ++}; ++ ++/* Initialize the ones normally used. */ ++static struct mtd_partition axis_partitions[MAX_PARTITIONS] = { ++ { ++ .name = "part0", ++ .size = CONFIG_ETRAX_PTABLE_SECTOR, ++ .offset = 0 ++ }, ++ { ++ .name = "part1", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part2", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part3", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part4", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part5", ++ .size = 0, ++ .offset = 0 ++ }, ++ { ++ .name = "part6", ++ .size = 0, ++ .offset = 0 ++ }, ++}; ++ ++#ifdef CONFIG_ETRAX_AXISFLASHMAP_MTD0WHOLE ++/* Main flash device */ ++static struct mtd_partition main_partition = { ++ .name = "main", ++ .size = 0, ++ .offset = 0 ++}; ++#endif ++ ++/* ++ * Probe a chip select for AMD-compatible (JEDEC) or CFI-compatible flash ++ * chips in that order (because the amd_flash-driver is faster). ++ */ ++static struct mtd_info *probe_cs(struct map_info *map_cs) ++{ ++ struct mtd_info *mtd_cs = NULL; ++ ++ printk(KERN_INFO ++ "%s: Probing a 0x%08lx bytes large window at 0x%08lx.\n", ++ map_cs->name, map_cs->size, map_cs->map_priv_1); ++ ++#ifdef CONFIG_MTD_CFI ++ mtd_cs = do_map_probe("cfi_probe", map_cs); ++#endif ++#ifdef CONFIG_MTD_JEDECPROBE ++ if (!mtd_cs) ++ mtd_cs = do_map_probe("jedec_probe", map_cs); ++#endif ++ ++ return mtd_cs; ++} ++ ++/* ++ * Probe each chip select individually for flash chips. If there are chips on ++ * both cse0 and cse1, the mtd_info structs will be concatenated to one struct ++ * so that MTD partitions can cross chip boundries. ++ * ++ * The only known restriction to how you can mount your chips is that each ++ * chip select must hold similar flash chips. But you need external hardware ++ * to do that anyway and you can put totally different chips on cse0 and cse1 ++ * so it isn't really much of a restriction. ++ */ ++static struct mtd_info *flash_probe(void) ++{ ++ struct mtd_info *mtd_cse0; ++ struct mtd_info *mtd_cse1; ++ struct mtd_info *mtd_cse; ++ ++ mtd_cse0 = probe_cs(&map_cse0); ++ mtd_cse1 = probe_cs(&map_cse1); ++ ++ if (!mtd_cse0 && !mtd_cse1) { ++ /* No chip found. */ ++ return NULL; ++ } ++ ++ if (mtd_cse0 && mtd_cse1) { ++ struct mtd_info *mtds[] = { mtd_cse0, mtd_cse1 }; ++ ++ /* Since the concatenation layer adds a small overhead we ++ * could try to figure out if the chips in cse0 and cse1 are ++ * identical and reprobe the whole cse0+cse1 window. But since ++ * flash chips are slow, the overhead is relatively small. ++ * So we use the MTD concatenation layer instead of further ++ * complicating the probing procedure. ++ */ ++ mtd_cse = mtd_concat_create(mtds, ARRAY_SIZE(mtds), ++ "cse0+cse1"); ++ if (!mtd_cse) { ++ printk(KERN_ERR "%s and %s: Concatenation failed!\n", ++ map_cse0.name, map_cse1.name); ++ ++ /* The best we can do now is to only use what we found ++ * at cse0. ++ */ ++ mtd_cse = mtd_cse0; ++ map_destroy(mtd_cse1); ++ } ++ } else { ++ mtd_cse = mtd_cse0? mtd_cse0 : mtd_cse1; ++ } ++ ++ return mtd_cse; ++} ++ ++/* ++ * Probe the flash chip(s) and, if it succeeds, read the partition-table ++ * and register the partitions with MTD. ++ */ ++static int __init init_axis_flash(void) ++{ ++ struct mtd_info *mymtd; ++ int err = 0; ++ int pidx = 0; ++ struct partitiontable_head *ptable_head = NULL; ++ struct partitiontable_entry *ptable; ++ int use_default_ptable = 1; /* Until proven otherwise. */ ++ const char pmsg[] = " /dev/flash%d at 0x%08x, size 0x%08x\n"; ++ ++ if (!(mymtd = flash_probe())) { ++ /* There's no reason to use this module if no flash chip can ++ * be identified. Make sure that's understood. ++ */ ++ printk(KERN_INFO "axisflashmap: Found no flash chip.\n"); ++ } else { ++ printk(KERN_INFO "%s: 0x%08x bytes of flash memory.\n", ++ mymtd->name, mymtd->size); ++ axisflash_mtd = mymtd; ++ } ++ ++ if (mymtd) { ++ mymtd->owner = THIS_MODULE; ++ ptable_head = (struct partitiontable_head *)(FLASH_CACHED_ADDR + ++ CONFIG_ETRAX_PTABLE_SECTOR + ++ PARTITION_TABLE_OFFSET); ++ } ++ pidx++; /* First partition is always set to the default. */ ++ ++ if (ptable_head && (ptable_head->magic == PARTITION_TABLE_MAGIC) ++ && (ptable_head->size < ++ (MAX_PARTITIONS * sizeof(struct partitiontable_entry) + ++ PARTITIONTABLE_END_MARKER_SIZE)) ++ && (*(unsigned long*)((void*)ptable_head + sizeof(*ptable_head) + ++ ptable_head->size - ++ PARTITIONTABLE_END_MARKER_SIZE) ++ == PARTITIONTABLE_END_MARKER)) { ++ /* Looks like a start, sane length and end of a ++ * partition table, lets check csum etc. ++ */ ++ int ptable_ok = 0; ++ struct partitiontable_entry *max_addr = ++ (struct partitiontable_entry *) ++ ((unsigned long)ptable_head + sizeof(*ptable_head) + ++ ptable_head->size); ++ unsigned long offset = CONFIG_ETRAX_PTABLE_SECTOR; ++ unsigned char *p; ++ unsigned long csum = 0; ++ ++ ptable = (struct partitiontable_entry *) ++ ((unsigned long)ptable_head + sizeof(*ptable_head)); ++ ++ /* Lets be PARANOID, and check the checksum. */ ++ p = (unsigned char*) ptable; ++ ++ while (p <= (unsigned char*)max_addr) { ++ csum += *p++; ++ csum += *p++; ++ csum += *p++; ++ csum += *p++; ++ } ++ ptable_ok = (csum == ptable_head->checksum); ++ ++ /* Read the entries and use/show the info. */ ++ printk(KERN_INFO " Found a%s partition table at 0x%p-0x%p.\n", ++ (ptable_ok ? " valid" : "n invalid"), ptable_head, ++ max_addr); ++ ++ /* We have found a working bootblock. Now read the ++ * partition table. Scan the table. It ends when ++ * there is 0xffffffff, that is, empty flash. ++ */ ++ while (ptable_ok ++ && ptable->offset != 0xffffffff ++ && ptable < max_addr ++ && pidx < MAX_PARTITIONS) { ++ ++ axis_partitions[pidx].offset = offset + ptable->offset; ++ axis_partitions[pidx].size = ptable->size; ++ ++ printk(pmsg, pidx, axis_partitions[pidx].offset, ++ axis_partitions[pidx].size); ++ pidx++; ++ ptable++; ++ } ++ use_default_ptable = !ptable_ok; ++ } ++ ++ if (romfs_in_flash) { ++ /* Add an overlapping device for the root partition (romfs). */ ++ ++ axis_partitions[pidx].name = "romfs"; ++ axis_partitions[pidx].size = romfs_length; ++ axis_partitions[pidx].offset = romfs_start - FLASH_CACHED_ADDR; ++ axis_partitions[pidx].mask_flags |= MTD_WRITEABLE; ++ ++ printk(KERN_INFO ++ " Adding readonly flash partition for romfs image:\n"); ++ printk(pmsg, pidx, axis_partitions[pidx].offset, ++ axis_partitions[pidx].size); ++ pidx++; ++ } ++ ++#ifdef CONFIG_ETRAX_AXISFLASHMAP_MTD0WHOLE ++ if (mymtd) { ++ main_partition.size = mymtd->size; ++ err = add_mtd_partitions(mymtd, &main_partition, 1); ++ if (err) ++ panic("axisflashmap: Could not initialize " ++ "partition for whole main mtd device!\n"); ++ } ++#endif ++ ++ if (mymtd) { ++ if (use_default_ptable) { ++ printk(KERN_INFO " Using default partition table.\n"); ++ err = add_mtd_partitions(mymtd, axis_default_partitions, ++ NUM_DEFAULT_PARTITIONS); ++ } else { ++ err = add_mtd_partitions(mymtd, axis_partitions, pidx); ++ } ++ ++ if (err) ++ panic("axisflashmap could not add MTD partitions!\n"); ++ } ++ ++ if (!romfs_in_flash) { ++ /* Create an RAM device for the root partition (romfs). */ ++ ++#if !defined(CONFIG_MTD_MTDRAM) || (CONFIG_MTDRAM_TOTAL_SIZE != 0) || (CONFIG_MTDRAM_ABS_POS != 0) ++ /* No use trying to boot this kernel from RAM. Panic! */ ++ printk(KERN_EMERG "axisflashmap: Cannot create an MTD RAM " ++ "device due to kernel (mis)configuration!\n"); ++ panic("This kernel cannot boot from RAM!\n"); ++#else ++ struct mtd_info *mtd_ram; ++ ++ mtd_ram = kmalloc(sizeof(struct mtd_info), GFP_KERNEL); ++ if (!mtd_ram) ++ panic("axisflashmap couldn't allocate memory for " ++ "mtd_info!\n"); ++ ++ printk(KERN_INFO " Adding RAM partition for romfs image:\n"); ++ printk(pmsg, pidx, (unsigned)romfs_start, ++ (unsigned)romfs_length); ++ ++ err = mtdram_init_device(mtd_ram, ++ (void *)romfs_start, ++ romfs_length, ++ "romfs"); ++ if (err) ++ panic("axisflashmap could not initialize MTD RAM " ++ "device!\n"); ++#endif ++ } ++ return err; ++} ++ ++/* This adds the above to the kernels init-call chain. */ ++module_init(init_axis_flash); ++ ++EXPORT_SYMBOL(axisflash_mtd); +diff -Nur linux-2.6.39.orig/arch/cris/arch-v10/drivers/ds1302.c linux-2.6.39/arch/cris/arch-v10/drivers/ds1302.c +--- linux-2.6.39.orig/arch/cris/arch-v10/drivers/ds1302.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/drivers/ds1302.c 2011-07-28 16:16:35.863415658 +0200 +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -501,6 +502,10 @@ + return 0; + } + ++#ifdef CONFIG_SYSFS ++static struct class *rtc_class; ++#endif ++ + static int __init ds1302_register(void) + { + ds1302_init(); +@@ -509,6 +514,12 @@ + ds1302_name, RTC_MAJOR_NR); + return -1; + } ++ #ifdef CONFIG_SYSFS ++ rtc_class = class_create(THIS_MODULE, "rtc"); ++ class_device_create(rtc_class, NULL, MKDEV(RTC_MAJOR_NR, 0), ++ NULL, "rtc"); ++ #endif ++ + return 0; + + } +diff -Nur linux-2.6.39.orig/arch/cris/arch-v10/drivers/gpio.c linux-2.6.39/arch/cris/arch-v10/drivers/gpio.c +--- linux-2.6.39.orig/arch/cris/arch-v10/drivers/gpio.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/drivers/gpio.c 2011-07-28 16:16:36.023425394 +0200 +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -798,6 +799,10 @@ + + /* main driver initialization routine, called from mem.c */ + ++#ifdef CONFIG_SYSFS ++static struct class *gpio_class; ++#endif ++ + static int __init gpio_init(void) + { + int res; +@@ -811,6 +816,13 @@ + return res; + } + ++#ifdef CONFIG_SYSFS ++ gpio_class = class_create(THIS_MODULE, "gpio"); ++ device_create(gpio_class, NULL, MKDEV(GPIO_MAJOR, 0), NULL, "gpioa"); ++ device_create(gpio_class, NULL, MKDEV(GPIO_MAJOR, 1), NULL, "gpiob"); ++ device_create(gpio_class, NULL, MKDEV(GPIO_MAJOR, 2), NULL, "leds"); ++ device_create(gpio_class, NULL, MKDEV(GPIO_MAJOR, 3), NULL, "gpiog"); ++#endif + /* Clear all leds */ + #if defined (CONFIG_ETRAX_CSP0_LEDS) || defined (CONFIG_ETRAX_PA_LEDS) || defined (CONFIG_ETRAX_PB_LEDS) + CRIS_LED_NETWORK_SET(0); +diff -Nur linux-2.6.39.orig/arch/cris/arch-v10/lib/hw_settings.S linux-2.6.39/arch/cris/arch-v10/lib/hw_settings.S +--- linux-2.6.39.orig/arch/cris/arch-v10/lib/hw_settings.S 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/lib/hw_settings.S 2011-07-28 16:16:36.163758404 +0200 +@@ -58,3 +58,5 @@ + .dword R_PORT_PB_SET + .dword PB_SET_VALUE + .dword 0 ; No more register values ++ .ascii "ACME_PART_MAGIC" ++ .dword 0xdeadc0de +diff -Nur linux-2.6.39.orig/arch/cris/arch-v10/mm/init.c linux-2.6.39/arch/cris/arch-v10/mm/init.c +--- linux-2.6.39.orig/arch/cris/arch-v10/mm/init.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/arch-v10/mm/init.c 2011-07-28 16:16:36.313421347 +0200 +@@ -184,6 +184,9 @@ + + free_area_init_node(0, zones_size, PAGE_OFFSET >> PAGE_SHIFT, 0); + } ++void free_initrd_mem(unsigned long start, unsigned long end) ++{ ++} + + /* Initialize remaps of some I/O-ports. It is important that this + * is called before any driver is initialized. +diff -Nur linux-2.6.39.orig/arch/cris/boot/compressed/Makefile linux-2.6.39/arch/cris/boot/compressed/Makefile +--- linux-2.6.39.orig/arch/cris/boot/compressed/Makefile 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/boot/compressed/Makefile 2011-07-28 16:16:36.453421314 +0200 +@@ -18,7 +18,7 @@ + OBJECTS-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o + OBJECTS-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o + OBJECTS= $(OBJECTS-y) $(obj)/misc.o +-OBJCOPYFLAGS = -O binary --remove-section=.bss ++#OBJCOPYFLAGS = -O binary --remove-section=.bss + + quiet_cmd_image = BUILD $@ + cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@ +diff -Nur linux-2.6.39.orig/arch/cris/boot/Makefile linux-2.6.39/arch/cris/boot/Makefile +--- linux-2.6.39.orig/arch/cris/boot/Makefile 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/boot/Makefile 2011-07-28 16:16:36.573671907 +0200 +@@ -5,7 +5,7 @@ + objcopyflags-$(CONFIG_ETRAX_ARCH_V10) += -R .note -R .comment + objcopyflags-$(CONFIG_ETRAX_ARCH_V32) += --remove-section=.bss --remove-section=.note.gnu.build-id + +-OBJCOPYFLAGS = -O binary $(objcopyflags-y) ++#OBJCOPYFLAGS = -O binary $(objcopyflags-y) + + + subdir- := compressed rescue +@@ -17,7 +17,6 @@ + + $(obj)/compressed/vmlinux: $(obj)/Image FORCE + $(Q)$(MAKE) $(build)=$(obj)/compressed $@ +- $(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin + + $(obj)/zImage: $(obj)/compressed/vmlinux + @cp $< $@ +diff -Nur linux-2.6.39.orig/arch/cris/Kconfig linux-2.6.39/arch/cris/Kconfig +--- linux-2.6.39.orig/arch/cris/Kconfig 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/Kconfig 2011-07-28 16:16:36.713417234 +0200 +@@ -168,6 +168,12 @@ + help + Size of DRAM (decimal in MB) typically 2, 8 or 16. + ++config ETRAX_MTD_SIZE ++ hex "MTD size (hex)" ++ default "0x00800000" ++ help ++ Size of MTD device typically 4 or 8 MB. ++ + config ETRAX_VMEM_SIZE + int "Video memory size (dec, in MB)" + depends on ETRAX_ARCH_V32 && !ETRAXFS +@@ -273,7 +279,7 @@ + select MTD_CFI_AMDSTD + select MTD_JEDECPROBE if ETRAX_ARCH_V32 + select MTD_CHAR +- select MTD_BLOCK ++ select MTD_BLOCK_RO + select MTD_PARTITIONS + select MTD_COMPLEX_MAPPINGS + help +@@ -660,6 +666,11 @@ + + source "drivers/ide/Kconfig" + ++#mysteriously part of this standard linux driver was removed from cris build! - info@crisos.org ++source "drivers/scsi/Kconfig" ++ ++source "drivers/media/Kconfig" ++ + source "drivers/net/Kconfig" + + source "drivers/i2c/Kconfig" +@@ -675,6 +686,8 @@ + + source "fs/Kconfig" + ++source "sound/Kconfig" ++ + source "drivers/usb/Kconfig" + + source "drivers/uwb/Kconfig" +diff -Nur linux-2.6.39.orig/arch/cris/Kconfig.orig linux-2.6.39/arch/cris/Kconfig.orig +--- linux-2.6.39.orig/arch/cris/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.39/arch/cris/Kconfig.orig 2011-05-19 06:06:34.000000000 +0200 +@@ -0,0 +1,690 @@ ++config MMU ++ bool ++ default y ++ ++config ZONE_DMA ++ bool ++ default y ++ ++config RWSEM_GENERIC_SPINLOCK ++ bool ++ default y ++ ++config RWSEM_XCHGADD_ALGORITHM ++ bool ++ ++config GENERIC_CMOS_UPDATE ++ def_bool y ++ ++config ARCH_USES_GETTIMEOFFSET ++ def_bool n ++ ++config GENERIC_IOMAP ++ bool ++ default y ++ ++config ARCH_HAS_ILOG2_U32 ++ bool ++ default n ++ ++config ARCH_HAS_ILOG2_U64 ++ bool ++ default n ++ ++config GENERIC_FIND_NEXT_BIT ++ bool ++ default y ++ ++config GENERIC_HWEIGHT ++ bool ++ default y ++ ++config GENERIC_CALIBRATE_DELAY ++ bool ++ default y ++ ++config NO_IOPORT ++ def_bool y ++ ++config FORCE_MAX_ZONEORDER ++ int ++ default 6 ++ ++config CRIS ++ bool ++ default y ++ select HAVE_IDE ++ select HAVE_GENERIC_HARDIRQS ++ select GENERIC_IRQ_SHOW ++ ++config HZ ++ int ++ default 100 ++ ++source "init/Kconfig" ++ ++source "kernel/Kconfig.freezer" ++ ++menu "General setup" ++ ++source "fs/Kconfig.binfmt" ++ ++config ETRAX_CMDLINE ++ string "Kernel command line" ++ default "root=/dev/mtdblock3" ++ help ++ Pass additional commands to the kernel. ++ ++config ETRAX_WATCHDOG ++ bool "Enable ETRAX watchdog" ++ help ++ Enable the built-in watchdog timer support on ETRAX based embedded ++ network computers. ++ ++config ETRAX_WATCHDOG_NICE_DOGGY ++ bool "Disable watchdog during Oops printouts" ++ depends on ETRAX_WATCHDOG ++ help ++ By enabling this you make sure that the watchdog does not bite while ++ printing oopses. Recommended for development systems but not for ++ production releases. ++ ++config ETRAX_FAST_TIMER ++ bool "Enable ETRAX fast timer API" ++ help ++ This options enables the API to a fast timer implementation using ++ timer1 to get sub jiffie resolution timers (primarily one-shot ++ timers). ++ This is needed if CONFIG_ETRAX_SERIAL_FAST_TIMER is enabled. ++ ++config ETRAX_KMALLOCED_MODULES ++ bool "Enable module allocation with kmalloc" ++ help ++ Enable module allocation with kmalloc instead of vmalloc. ++ ++config OOM_REBOOT ++ bool "Enable reboot at out of memory" ++ ++source "kernel/Kconfig.preempt" ++ ++source mm/Kconfig ++ ++endmenu ++ ++menu "Hardware setup" ++ ++choice ++ prompt "Processor type" ++ default ETRAX100LX ++ ++config ETRAX100LX ++ bool "ETRAX-100LX-v1" ++ select ARCH_USES_GETTIMEOFFSET ++ help ++ Support version 1 of the ETRAX 100LX. ++ ++config ETRAX100LX_V2 ++ bool "ETRAX-100LX-v2" ++ select ARCH_USES_GETTIMEOFFSET ++ help ++ Support version 2 of the ETRAX 100LX. ++ ++config SVINTO_SIM ++ bool "ETRAX-100LX-for-xsim-simulator" ++ select ARCH_USES_GETTIMEOFFSET ++ help ++ Support the xsim ETRAX Simulator. ++ ++config ETRAXFS ++ bool "ETRAX-FS-V32" ++ help ++ Support CRIS V32. ++ ++config CRIS_MACH_ARTPEC3 ++ bool "ARTPEC-3" ++ help ++ Support Axis ARTPEC-3. ++ ++endchoice ++ ++config ETRAX_VCS_SIM ++ bool "VCS Simulator" ++ help ++ Setup hardware to be run in the VCS simulator. ++ ++config ETRAX_ARCH_V10 ++ bool ++ default y if ETRAX100LX || ETRAX100LX_V2 ++ default n if !(ETRAX100LX || ETRAX100LX_V2) ++ ++config ETRAX_ARCH_V32 ++ bool ++ default y if (ETRAXFS || CRIS_MACH_ARTPEC3) ++ default n if !(ETRAXFS || CRIS_MACH_ARTPEC3) ++ ++config ETRAX_DRAM_SIZE ++ int "DRAM size (dec, in MB)" ++ default "8" ++ help ++ Size of DRAM (decimal in MB) typically 2, 8 or 16. ++ ++config ETRAX_VMEM_SIZE ++ int "Video memory size (dec, in MB)" ++ depends on ETRAX_ARCH_V32 && !ETRAXFS ++ default 8 if !ETRAXFS ++ help ++ Size of Video accessible memory (decimal, in MB). ++ ++config ETRAX_FLASH_BUSWIDTH ++ int "Buswidth of NOR flash in bytes" ++ default "2" ++ help ++ Width in bytes of the NOR Flash bus (1, 2 or 4). Is usually 2. ++ ++config ETRAX_NANDFLASH_BUSWIDTH ++ int "Buswidth of NAND flash in bytes" ++ default "1" ++ help ++ Width in bytes of the NAND flash (1 or 2). ++ ++config ETRAX_FLASH1_SIZE ++ int "FLASH1 size (dec, in MB. 0 = Unknown)" ++ default "0" ++ ++choice ++ prompt "Product debug-port" ++ default ETRAX_DEBUG_PORT0 ++ ++config ETRAX_DEBUG_PORT0 ++ bool "Serial-0" ++ help ++ Choose a serial port for the ETRAX debug console. Default to ++ port 0. ++ ++config ETRAX_DEBUG_PORT1 ++ bool "Serial-1" ++ help ++ Use serial port 1 for the console. ++ ++config ETRAX_DEBUG_PORT2 ++ bool "Serial-2" ++ help ++ Use serial port 2 for the console. ++ ++config ETRAX_DEBUG_PORT3 ++ bool "Serial-3" ++ help ++ Use serial port 3 for the console. ++ ++config ETRAX_DEBUG_PORT_NULL ++ bool "disabled" ++ help ++ Disable serial-port debugging. ++ ++endchoice ++ ++choice ++ prompt "Kernel GDB port" ++ depends on ETRAX_KGDB ++ default ETRAX_KGDB_PORT0 ++ help ++ Choose a serial port for kernel debugging. NOTE: This port should ++ not be enabled under Drivers for built-in interfaces (as it has its ++ own initialization code) and should not be the same as the debug port. ++ ++config ETRAX_KGDB_PORT0 ++ bool "Serial-0" ++ help ++ Use serial port 0 for kernel debugging. ++ ++config ETRAX_KGDB_PORT1 ++ bool "Serial-1" ++ help ++ Use serial port 1 for kernel debugging. ++ ++config ETRAX_KGDB_PORT2 ++ bool "Serial-2" ++ help ++ Use serial port 2 for kernel debugging. ++ ++config ETRAX_KGDB_PORT3 ++ bool "Serial-3" ++ help ++ Use serial port 3 for kernel debugging. ++ ++endchoice ++ ++source arch/cris/arch-v10/Kconfig ++source arch/cris/arch-v32/Kconfig ++ ++endmenu ++ ++source "net/Kconfig" ++ ++# bring in ETRAX built-in drivers ++menu "Drivers for built-in interfaces" ++source arch/cris/arch-v10/drivers/Kconfig ++source arch/cris/arch-v32/drivers/Kconfig ++ ++config ETRAX_AXISFLASHMAP ++ bool "Axis flash-map support" ++ select MTD ++ select MTD_CFI ++ select MTD_CFI_AMDSTD ++ select MTD_JEDECPROBE if ETRAX_ARCH_V32 ++ select MTD_CHAR ++ select MTD_BLOCK ++ select MTD_PARTITIONS ++ select MTD_COMPLEX_MAPPINGS ++ help ++ This option enables MTD mapping of flash devices. Needed to use ++ flash memories. If unsure, say Y. ++ ++config ETRAX_RTC ++ bool "Real Time Clock support" ++ depends on ETRAX_I2C ++ help ++ Enables drivers for the Real-Time Clock battery-backed chips on ++ some products. The kernel reads the time when booting, and ++ the date can be set using ioctl(fd, RTC_SET_TIME, &rt) with rt a ++ rtc_time struct (see ) on the /dev/rtc ++ device. You can check the time with cat /proc/rtc, but ++ normal time reading should be done using libc function time and ++ friends. ++ ++choice ++ prompt "RTC chip" ++ depends on ETRAX_RTC ++ default ETRAX_DS1302 ++ ++config ETRAX_DS1302 ++ depends on ETRAX_ARCH_V10 ++ bool "DS1302" ++ help ++ Enables the driver for the DS1302 Real-Time Clock battery-backed ++ chip on some products. ++ ++config ETRAX_PCF8563 ++ bool "PCF8563" ++ help ++ Enables the driver for the PCF8563 Real-Time Clock battery-backed ++ chip on some products. ++ ++endchoice ++ ++config ETRAX_SYNCHRONOUS_SERIAL ++ bool "Synchronous serial-port support" ++ help ++ Select this to enable the synchronous serial port driver. ++ ++config ETRAX_SYNCHRONOUS_SERIAL_PORT0 ++ bool "Synchronous serial port 0 enabled" ++ depends on ETRAX_SYNCHRONOUS_SERIAL ++ help ++ Enabled synchronous serial port 0. ++ ++config ETRAX_SYNCHRONOUS_SERIAL0_DMA ++ bool "Enable DMA on synchronous serial port 0." ++ depends on ETRAX_SYNCHRONOUS_SERIAL_PORT0 ++ help ++ A synchronous serial port can run in manual or DMA mode. ++ Selecting this option will make it run in DMA mode. ++ ++config ETRAX_SYNCHRONOUS_SERIAL_PORT1 ++ bool "Synchronous serial port 1 enabled" ++ depends on ETRAX_SYNCHRONOUS_SERIAL && (ETRAXFS || ETRAX_ARCH_V10) ++ help ++ Enabled synchronous serial port 1. ++ ++config ETRAX_SYNCHRONOUS_SERIAL1_DMA ++ bool "Enable DMA on synchronous serial port 1." ++ depends on ETRAX_SYNCHRONOUS_SERIAL_PORT1 ++ help ++ A synchronous serial port can run in manual or DMA mode. ++ Selecting this option will make it run in DMA mode. ++ ++choice ++ prompt "Network LED behavior" ++ depends on ETRAX_ETHERNET ++ default ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY ++ ++config ETRAX_NETWORK_LED_ON_WHEN_LINK ++ bool "LED_on_when_link" ++ help ++ Selecting LED_on_when_link will light the LED when there is a ++ connection and will flash off when there is activity. ++ ++ Selecting LED_on_when_activity will light the LED only when ++ there is activity. ++ ++ This setting will also affect the behaviour of other activity LEDs ++ e.g. Bluetooth. ++ ++config ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY ++ bool "LED_on_when_activity" ++ help ++ Selecting LED_on_when_link will light the LED when there is a ++ connection and will flash off when there is activity. ++ ++ Selecting LED_on_when_activity will light the LED only when ++ there is activity. ++ ++ This setting will also affect the behaviour of other activity LEDs ++ e.g. Bluetooth. ++ ++endchoice ++ ++choice ++ prompt "Ser0 DMA out channel" ++ depends on ETRAX_SERIAL_PORT0 ++ default ETRAX_SERIAL_PORT0_DMA6_OUT if ETRAX_ARCH_V32 ++ default ETRAX_SERIAL_PORT0_NO_DMA_OUT if ETRAX_ARCH_V10 ++ ++config ETRAX_SERIAL_PORT0_NO_DMA_OUT ++ bool "Ser0 uses no DMA for output" ++ help ++ Do not use DMA for ser0 output. ++ ++config ETRAX_SERIAL_PORT0_DMA6_OUT ++ bool "Ser0 uses DMA6 for output" ++ depends on ETRAXFS ++ help ++ Enables the DMA6 output channel for ser0 (ttyS0). ++ If you do not enable DMA, an interrupt for each character will be ++ used when transmitting data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++config ETRAX_SERIAL_PORT0_DMA0_OUT ++ bool "Ser0 uses DMA0 for output" ++ depends on CRIS_MACH_ARTPEC3 ++ help ++ Enables the DMA0 output channel for ser0 (ttyS0). ++ If you do not enable DMA, an interrupt for each character will be ++ used when transmitting data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++endchoice ++ ++choice ++ prompt "Ser0 DMA in channel " ++ depends on ETRAX_SERIAL_PORT0 ++ default ETRAX_SERIAL_PORT0_NO_DMA_IN if ETRAX_ARCH_V32 ++ default ETRAX_SERIAL_PORT0_DMA7_IN if ETRAX_ARCH_V10 ++ help ++ What DMA channel to use for ser0. ++ ++config ETRAX_SERIAL_PORT0_NO_DMA_IN ++ bool "Ser0 uses no DMA for input" ++ help ++ Do not use DMA for ser0 input. ++ ++config ETRAX_SERIAL_PORT0_DMA7_IN ++ bool "Ser0 uses DMA7 for input" ++ depends on ETRAXFS ++ help ++ Enables the DMA7 input channel for ser0 (ttyS0). ++ If you do not enable DMA, an interrupt for each character will be ++ used when receiving data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++config ETRAX_SERIAL_PORT0_DMA1_IN ++ bool "Ser0 uses DMA1 for input" ++ depends on CRIS_MACH_ARTPEC3 ++ help ++ Enables the DMA1 input channel for ser0 (ttyS0). ++ If you do not enable DMA, an interrupt for each character will be ++ used when receiving data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++endchoice ++ ++choice ++ prompt "Ser1 DMA in channel " ++ depends on ETRAX_SERIAL_PORT1 ++ default ETRAX_SERIAL_PORT1_NO_DMA_IN if ETRAX_ARCH_V32 ++ default ETRAX_SERIAL_PORT1_DMA9_IN if ETRAX_ARCH_V10 ++ help ++ What DMA channel to use for ser1. ++ ++config ETRAX_SERIAL_PORT1_NO_DMA_IN ++ bool "Ser1 uses no DMA for input" ++ help ++ Do not use DMA for ser1 input. ++ ++config ETRAX_SERIAL_PORT1_DMA5_IN ++ bool "Ser1 uses DMA5 for input" ++ depends on ETRAX_ARCH_V32 ++ help ++ Enables the DMA5 input channel for ser1 (ttyS1). ++ If you do not enable DMA, an interrupt for each character will be ++ used when receiving data. ++ Normally you want this on, unless you use the DMA channel for ++ something else. ++ ++config ETRAX_SERIAL_PORT1_DMA9_IN ++ depends on ETRAX_ARCH_V10 ++ bool "Ser1 uses DMA9 for input" ++ ++endchoice ++ ++ ++choice ++ prompt "Ser1 DMA out channel" ++ depends on ETRAX_SERIAL_PORT1 ++ default ETRAX_SERIAL_PORT1_NO_DMA_OUT if ETRAX_ARCH_V32 ++ default ETRAX_SERIAL_PORT1_DMA8_OUT if ETRAX_ARCH_V10 ++ help ++ What DMA channel to use for ser1. ++ ++config ETRAX_SERIAL_PORT1_NO_DMA_OUT ++ bool "Ser1 uses no DMA for output" ++ help ++ Do not use DMA for ser1 output. ++ ++config ETRAX_SERIAL_PORT1_DMA8_OUT ++ depends on ETRAX_ARCH_V10 ++ bool "Ser1 uses DMA8 for output" ++ ++config ETRAX_SERIAL_PORT1_DMA4_OUT ++ depends on ETRAX_ARCH_V32 ++ bool "Ser1 uses DMA4 for output" ++ help ++ Enables the DMA4 output channel for ser1 (ttyS1). ++ If you do not enable DMA, an interrupt for each character will be ++ used when transmitting data. ++ Normally you want this on, unless you use the DMA channel for ++ something else. ++ ++endchoice ++ ++choice ++ prompt "Ser2 DMA out channel" ++ depends on ETRAX_SERIAL_PORT2 ++ default ETRAX_SERIAL_PORT2_NO_DMA_OUT if ETRAX_ARCH_V32 ++ default ETRAX_SERIAL_PORT2_DMA2_OUT if ETRAX_ARCH_V10 ++ ++config ETRAX_SERIAL_PORT2_NO_DMA_OUT ++ bool "Ser2 uses no DMA for output" ++ help ++ Do not use DMA for ser2 output. ++ ++config ETRAX_SERIAL_PORT2_DMA2_OUT ++ bool "Ser2 uses DMA2 for output" ++ depends on ETRAXFS || ETRAX_ARCH_V10 ++ help ++ Enables the DMA2 output channel for ser2 (ttyS2). ++ If you do not enable DMA, an interrupt for each character will be ++ used when transmitting data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++config ETRAX_SERIAL_PORT2_DMA6_OUT ++ bool "Ser2 uses DMA6 for output" ++ depends on CRIS_MACH_ARTPEC3 ++ help ++ Enables the DMA6 output channel for ser2 (ttyS2). ++ If you do not enable DMA, an interrupt for each character will be ++ used when transmitting data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++endchoice ++ ++choice ++ prompt "Ser2 DMA in channel" ++ depends on ETRAX_SERIAL_PORT2 ++ default ETRAX_SERIAL_PORT2_NO_DMA_IN if ETRAX_ARCH_V32 ++ default ETRAX_SERIAL_PORT2_DMA3_IN if ETRAX_ARCH_V10 ++ help ++ What DMA channel to use for ser2. ++ ++config ETRAX_SERIAL_PORT2_NO_DMA_IN ++ bool "Ser2 uses no DMA for input" ++ help ++ Do not use DMA for ser2 input. ++ ++config ETRAX_SERIAL_PORT2_DMA3_IN ++ bool "Ser2 uses DMA3 for input" ++ depends on ETRAXFS || ETRAX_ARCH_V10 ++ help ++ Enables the DMA3 input channel for ser2 (ttyS2). ++ If you do not enable DMA, an interrupt for each character will be ++ used when receiving data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++config ETRAX_SERIAL_PORT2_DMA7_IN ++ bool "Ser2 uses DMA7 for input" ++ depends on CRIS_MACH_ARTPEC3 ++ help ++ Enables the DMA7 input channel for ser2 (ttyS2). ++ If you do not enable DMA, an interrupt for each character will be ++ used when receiving data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++endchoice ++ ++choice ++ prompt "Ser3 DMA in channel" ++ depends on ETRAX_SERIAL_PORT3 ++ default ETRAX_SERIAL_PORT3_NO_DMA_IN if ETRAX_ARCH_V32 ++ default ETRAX_SERIAL_PORT3_DMA5_IN if ETRAX_ARCH_V10 ++ help ++ What DMA channel to use for ser3. ++ ++config ETRAX_SERIAL_PORT3_NO_DMA_IN ++ bool "Ser3 uses no DMA for input" ++ help ++ Do not use DMA for ser3 input. ++ ++config ETRAX_SERIAL_PORT3_DMA5_IN ++ depends on ETRAX_ARCH_V10 ++ bool "DMA 5" ++ ++config ETRAX_SERIAL_PORT3_DMA9_IN ++ bool "Ser3 uses DMA9 for input" ++ depends on ETRAXFS ++ help ++ Enables the DMA9 input channel for ser3 (ttyS3). ++ If you do not enable DMA, an interrupt for each character will be ++ used when receiving data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++config ETRAX_SERIAL_PORT3_DMA3_IN ++ bool "Ser3 uses DMA3 for input" ++ depends on CRIS_MACH_ARTPEC3 ++ help ++ Enables the DMA3 input channel for ser3 (ttyS3). ++ If you do not enable DMA, an interrupt for each character will be ++ used when receiving data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++endchoice ++ ++choice ++ prompt "Ser3 DMA out channel" ++ depends on ETRAX_SERIAL_PORT3 ++ default ETRAX_SERIAL_PORT3_NO_DMA_OUT if ETRAX_ARCH_V32 ++ default ETRAX_SERIAL_PORT3_DMA4_OUT if ETRAX_ARCH_V10 ++ ++config ETRAX_SERIAL_PORT3_NO_DMA_OUT ++ bool "Ser3 uses no DMA for output" ++ help ++ Do not use DMA for ser3 output. ++ ++config ETRAX_SERIAL_PORT3_DMA4_OUT ++ depends on ETRAX_ARCH_V10 ++ bool "DMA 4" ++ ++config ETRAX_SERIAL_PORT3_DMA8_OUT ++ bool "Ser3 uses DMA8 for output" ++ depends on ETRAXFS ++ help ++ Enables the DMA8 output channel for ser3 (ttyS3). ++ If you do not enable DMA, an interrupt for each character will be ++ used when transmitting data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++config ETRAX_SERIAL_PORT3_DMA2_OUT ++ bool "Ser3 uses DMA2 for output" ++ depends on CRIS_MACH_ARTPEC3 ++ help ++ Enables the DMA2 output channel for ser3 (ttyS3). ++ If you do not enable DMA, an interrupt for each character will be ++ used when transmitting data. ++ Normally you want to use DMA, unless you use the DMA channel for ++ something else. ++ ++endchoice ++ ++endmenu ++ ++source "drivers/base/Kconfig" ++ ++# standard linux drivers ++source "drivers/mtd/Kconfig" ++ ++source "drivers/parport/Kconfig" ++ ++source "drivers/pnp/Kconfig" ++ ++source "drivers/block/Kconfig" ++ ++source "drivers/ide/Kconfig" ++ ++source "drivers/net/Kconfig" ++ ++source "drivers/i2c/Kconfig" ++ ++source "drivers/rtc/Kconfig" ++ ++# ++# input before char - char/joystick depends on it. As does USB. ++# ++source "drivers/input/Kconfig" ++ ++source "drivers/char/Kconfig" ++ ++source "fs/Kconfig" ++ ++source "drivers/usb/Kconfig" ++ ++source "drivers/uwb/Kconfig" ++ ++source "drivers/staging/Kconfig" ++ ++source "arch/cris/Kconfig.debug" ++ ++source "security/Kconfig" ++ ++source "crypto/Kconfig" ++ ++source "lib/Kconfig" +diff -Nur linux-2.6.39.orig/arch/cris/Makefile linux-2.6.39/arch/cris/Makefile +--- linux-2.6.39.orig/arch/cris/Makefile 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/Makefile 2011-07-28 16:16:36.883415879 +0200 +@@ -40,10 +40,10 @@ + + LD = $(CROSS_COMPILE)ld -mcrislinux + +-OBJCOPYFLAGS := -O binary -R .note -R .comment -S ++OBJCOPYFLAGS := -O binary -R .bss -R .note -R .note.gnu.build-id -R .comment -S + + KBUILD_AFLAGS += -mlinux -march=$(arch-y) $(inc) +-KBUILD_CFLAGS += -mlinux -march=$(arch-y) -pipe $(inc) ++KBUILD_CFLAGS += -mlinux -march=$(arch-y) -pipe -fno-peephole2 $(inc) + KBUILD_CPPFLAGS += $(inc) + + ifdef CONFIG_FRAME_POINTER +diff -Nur linux-2.6.39.orig/arch/cris/mm/init.c linux-2.6.39/arch/cris/mm/init.c +--- linux-2.6.39.orig/arch/cris/mm/init.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/arch/cris/mm/init.c 2011-07-28 16:16:37.013424379 +0200 +@@ -16,6 +16,7 @@ + DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); + + unsigned long empty_zero_page; ++EXPORT_SYMBOL(empty_zero_page); + + extern char _stext, _edata, _etext; /* From linkerscript */ + extern char __init_begin, __init_end; +@@ -81,3 +82,10 @@ + printk (KERN_INFO "Freeing unused kernel memory: %luk freed\n", + (unsigned long)((&__init_end - &__init_begin) >> 10)); + } ++ ++#ifdef CONFIG_BLK_DEV_INITRD ++void free_initrd_mem(unsigned long start, unsigned long end) ++{ ++ return 0; ++} ++#endif +diff -Nur linux-2.6.39.orig/drivers/net/cris/eth_v10.c linux-2.6.39/drivers/net/cris/eth_v10.c +--- linux-2.6.39.orig/drivers/net/cris/eth_v10.c 2011-05-19 06:06:34.000000000 +0200 ++++ linux-2.6.39/drivers/net/cris/eth_v10.c 2011-07-28 16:16:37.184155914 +0200 +@@ -1714,7 +1714,7 @@ + static void + e100_netpoll(struct net_device* netdev) + { +- e100rxtx_interrupt(NETWORK_DMA_TX_IRQ_NBR, netdev, NULL); ++ e100rxtx_interrupt(NETWORK_DMA_TX_IRQ_NBR, netdev); + } + #endif + +diff -Nur linux-2.6.39.orig/drivers/net/cris/eth_v10.c.orig linux-2.6.39/drivers/net/cris/eth_v10.c.orig +--- linux-2.6.39.orig/drivers/net/cris/eth_v10.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.39/drivers/net/cris/eth_v10.c.orig 2011-05-19 06:06:34.000000000 +0200 +@@ -0,0 +1,1749 @@ ++/* ++ * e100net.c: A network driver for the ETRAX 100LX network controller. ++ * ++ * Copyright (c) 1998-2002 Axis Communications AB. ++ * ++ * The outline of this driver comes from skeleton.c. ++ * ++ */ ++ ++ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include /* DMA and register descriptions */ ++#include /* CRIS_LED_* I/O functions */ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++//#define ETHDEBUG ++#define D(x) ++ ++/* ++ * The name of the card. Is used for messages and in the requests for ++ * io regions, irqs and dma channels ++ */ ++ ++static const char* cardname = "ETRAX 100LX built-in ethernet controller"; ++ ++/* A default ethernet address. Highlevel SW will set the real one later */ ++ ++static struct sockaddr default_mac = { ++ 0, ++ { 0x00, 0x40, 0x8C, 0xCD, 0x00, 0x00 } ++}; ++ ++/* Information that need to be kept for each board. */ ++struct net_local { ++ struct mii_if_info mii_if; ++ ++ /* Tx control lock. This protects the transmit buffer ring ++ * state along with the "tx full" state of the driver. This ++ * means all netif_queue flow control actions are protected ++ * by this lock as well. ++ */ ++ spinlock_t lock; ++ ++ spinlock_t led_lock; /* Protect LED state */ ++ spinlock_t transceiver_lock; /* Protect transceiver state. */ ++}; ++ ++typedef struct etrax_eth_descr ++{ ++ etrax_dma_descr descr; ++ struct sk_buff* skb; ++} etrax_eth_descr; ++ ++/* Some transceivers requires special handling */ ++struct transceiver_ops ++{ ++ unsigned int oui; ++ void (*check_speed)(struct net_device* dev); ++ void (*check_duplex)(struct net_device* dev); ++}; ++ ++/* Duplex settings */ ++enum duplex ++{ ++ half, ++ full, ++ autoneg ++}; ++ ++/* Dma descriptors etc. */ ++ ++#define MAX_MEDIA_DATA_SIZE 1522 ++ ++#define MIN_PACKET_LEN 46 ++#define ETHER_HEAD_LEN 14 ++ ++/* ++** MDIO constants. ++*/ ++#define MDIO_START 0x1 ++#define MDIO_READ 0x2 ++#define MDIO_WRITE 0x1 ++#define MDIO_PREAMBLE 0xfffffffful ++ ++/* Broadcom specific */ ++#define MDIO_AUX_CTRL_STATUS_REG 0x18 ++#define MDIO_BC_FULL_DUPLEX_IND 0x1 ++#define MDIO_BC_SPEED 0x2 ++ ++/* TDK specific */ ++#define MDIO_TDK_DIAGNOSTIC_REG 18 ++#define MDIO_TDK_DIAGNOSTIC_RATE 0x400 ++#define MDIO_TDK_DIAGNOSTIC_DPLX 0x800 ++ ++/*Intel LXT972A specific*/ ++#define MDIO_INT_STATUS_REG_2 0x0011 ++#define MDIO_INT_FULL_DUPLEX_IND (1 << 9) ++#define MDIO_INT_SPEED (1 << 14) ++ ++/* Network flash constants */ ++#define NET_FLASH_TIME (HZ/50) /* 20 ms */ ++#define NET_FLASH_PAUSE (HZ/100) /* 10 ms */ ++#define NET_LINK_UP_CHECK_INTERVAL (2*HZ) /* 2 s */ ++#define NET_DUPLEX_CHECK_INTERVAL (2*HZ) /* 2 s */ ++ ++#define NO_NETWORK_ACTIVITY 0 ++#define NETWORK_ACTIVITY 1 ++ ++#define NBR_OF_RX_DESC 32 ++#define NBR_OF_TX_DESC 16 ++ ++/* Large packets are sent directly to upper layers while small packets are */ ++/* copied (to reduce memory waste). The following constant decides the breakpoint */ ++#define RX_COPYBREAK 256 ++ ++/* Due to a chip bug we need to flush the cache when descriptors are returned */ ++/* to the DMA. To decrease performance impact we return descriptors in chunks. */ ++/* The following constant determines the number of descriptors to return. */ ++#define RX_QUEUE_THRESHOLD NBR_OF_RX_DESC/2 ++ ++#define GET_BIT(bit,val) (((val) >> (bit)) & 0x01) ++ ++/* Define some macros to access ETRAX 100 registers */ ++#define SETF(var, reg, field, val) var = (var & ~IO_MASK_(reg##_, field##_)) | \ ++ IO_FIELD_(reg##_, field##_, val) ++#define SETS(var, reg, field, val) var = (var & ~IO_MASK_(reg##_, field##_)) | \ ++ IO_STATE_(reg##_, field##_, _##val) ++ ++static etrax_eth_descr *myNextRxDesc; /* Points to the next descriptor to ++ to be processed */ ++static etrax_eth_descr *myLastRxDesc; /* The last processed descriptor */ ++ ++static etrax_eth_descr RxDescList[NBR_OF_RX_DESC] __attribute__ ((aligned(32))); ++ ++static etrax_eth_descr* myFirstTxDesc; /* First packet not yet sent */ ++static etrax_eth_descr* myLastTxDesc; /* End of send queue */ ++static etrax_eth_descr* myNextTxDesc; /* Next descriptor to use */ ++static etrax_eth_descr TxDescList[NBR_OF_TX_DESC] __attribute__ ((aligned(32))); ++ ++static unsigned int network_rec_config_shadow = 0; ++ ++static unsigned int network_tr_ctrl_shadow = 0; ++ ++/* Network speed indication. */ ++static DEFINE_TIMER(speed_timer, NULL, 0, 0); ++static DEFINE_TIMER(clear_led_timer, NULL, 0, 0); ++static int current_speed; /* Speed read from transceiver */ ++static int current_speed_selection; /* Speed selected by user */ ++static unsigned long led_next_time; ++static int led_active; ++static int rx_queue_len; ++ ++/* Duplex */ ++static DEFINE_TIMER(dup