summaryrefslogtreecommitdiff
path: root/target
diff options
context:
space:
mode:
Diffstat (limited to 'target')
-rw-r--r--target/linux/generic/patches-3.9/001-mips_fix_code_non_dsp_cpu.patch368
-rw-r--r--target/linux/generic/patches-3.9/100-overlayfs.patch8
-rw-r--r--target/linux/generic/patches-3.9/259-regmap_dynamic.patch2
-rw-r--r--target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch2
-rw-r--r--target/linux/generic/patches-3.9/440-block2mtd_init.patch2
-rw-r--r--target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch2
-rw-r--r--target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch2
-rw-r--r--target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch4
-rw-r--r--target/linux/generic/patches-3.9/721-phy_packets.patch4
-rw-r--r--target/linux/generic/patches-3.9/862-gpio_spi_driver.patch2
-rw-r--r--target/linux/generic/patches-3.9/863-gpiommc.patch2
-rw-r--r--target/linux/generic/patches-3.9/921-use_preinit_as_init.patch8
12 files changed, 18 insertions, 388 deletions
diff --git a/target/linux/generic/patches-3.9/001-mips_fix_code_non_dsp_cpu.patch b/target/linux/generic/patches-3.9/001-mips_fix_code_non_dsp_cpu.patch
deleted file mode 100644
index 8d3507f..0000000
--- a/target/linux/generic/patches-3.9/001-mips_fix_code_non_dsp_cpu.patch
+++ /dev/null
@@ -1,368 +0,0 @@
-From f9b4e05597e636a550af8392e80b15f79d9f9e11 Mon Sep 17 00:00:00 2001
-From: Florian Fainelli <florian@openwrt.org>
-Date: Thu, 14 Mar 2013 14:07:20 +0100
-Subject: [PATCH] MIPS: fix code generation for non-DSP capable CPUs
-
-Commit 32a7ede (MIPS: dsp: Add assembler support for DSP ASEs) has
-enabled the use of DSP ASE specific instructions such as rddsp and wrdsp
-under the idea that all code path that will make use of these two
-instructions are properly checking for cpu_has_dsp to ensure that the
-particular CPU we are running on *actually* supports DSP ASE.
-
-This commit actually causes the following oops on QEMU Malta emulating a
-MIPS 24Kc without the DSP ASE implemented:
-
-[ 7.960000] Reserved instruction in kernel
-[ 7.960000] Cpu 0
-[ 7.960000] $ 0 : 00000000 00000000 00000014 00000005
-[ 7.960000] $ 4 : 8fc2de48 00000001 00000000 8f59ddb0
-[ 7.960000] $ 8 : 8f5ceec4 00000018 00000c00 00800000
-[ 7.960000] $12 : 00000100 00000200 00000000 00457b84
-[ 7.960000] $16 : 00000000 8fc2ba78 8f4ec980 00000001
-[ 7.960000] $20 : 80418f90 00000000 00000000 000002dd
-[ 7.960000] $24 : 0000009c 7730d7b8
-[ 7.960000] $28 : 8f59c000 8f59dd38 00000001 80104248
-[ 7.960000] Hi : 0000001d
-[ 7.960000] Lo : 0000000b
-[ 7.960000] epc : 801041ec thread_saved_pc+0x2c/0x38
-[ 7.960000] Not tainted
-[ 7.960000] ra : 80104248 get_wchan+0x48/0xac
-[ 7.960000] Status: 1000b703 KERNEL EXL IE
-[ 7.960000] Cause : 10800028
-[ 7.960000] PrId : 00019300 (MIPS 24Kc)
-[ 7.960000] Modules linked in:
-[ 7.960000] Process killall (pid: 1574, threadinfo=8f59c000,
-task=8fd14558, tls=773aa440)
-[ 7.960000] Stack : 8fc2ba78 8012b008 0000000c 0000001d 00000000
-00000000 8f58a380
- 8f58a380 8fc2ba78 80202668 8f59de78 8f468600 8f59de28
-801b2a3c 8f59df00 8f98ba20 74696e69
- 8f468600 8f59de28 801b7308 0081c007 00000000 00000000
-00000000 00000000 00000000 00000000
- 00000000 8fc2bbb4 00000001 0000001d 0000000b 77f038cc
-7fe80648 ffffffff ffffffff 00000000
- 00000001 0016e000 00000000 ...
-[ 7.960000] Call Trace:
-[ 7.960000] [<801041ec>] thread_saved_pc+0x2c/0x38
-[ 7.960000] [<80104248>] get_wchan+0x48/0xac
-
-The disassembly of thread_saved_pc points to the following:
-000006d0 <thread_saved_pc>:
- 6d0: 8c820208 lw v0,520(a0)
- 6d4: 3c030000 lui v1,0x0
- 6d8: 24630000 addiu v1,v1,0
- 6dc: 10430008 beq v0,v1,700 <thread_saved_pc+0x30>
- 6e0: 00000000 nop
- 6e4: 3c020000 lui v0,0x0
- 6e8: 8c43000c lw v1,12(v0)
- 6ec: 04620004 bltzl v1,700 <thread_saved_pc+0x30>
- 6f0: 00001021 move v0,zero
- 6f4: 8c840200 lw a0,512(a0)
- 6f8: 00031080 sll v0,v1,0x2
- 6fc: 7c44100a lwx v0,a0(v0) <------------
- 700: 03e00008 jr ra
- 704: 00000000 nop
-
-If we specifically disable -mdsp/-mdspr2 for arch/mips/kernel/process.o,
-we get the following (non-crashing) assembly:
-
-00000708 <thread_saved_pc>:
- 708: 8c820208 lw v0,520(a0)
- 70c: 3c030000 lui v1,0x0
- 710: 24630000 addiu v1,v1,0
- 714: 10430009 beq v0,v1,73c <thread_saved_pc+0x34>
- 718: 00000000 nop
- 71c: 3c020000 lui v0,0x0
- 720: 8c42000c lw v0,12(v0)
- 724: 04420005 bltzl v0,73c <thread_saved_pc+0x34>
- 728: 00001021 move v0,zero
- 72c: 8c830200 lw v1,512(a0)
- 730: 00021080 sll v0,v0,0x2
- 734: 00431021 addu v0,v0,v1
- 738: 8c420000 lw v0,0(v0)
- 73c: 03e00008 jr ra
- 740: 00000000 nop
-
-The specific line that leads a different assembly being produced is:
-
-unsigned long thread_saved_pc(struct task_struct *tsk)
-...
- return ((unsigned long *)t->reg29)[schedule_mfi.pc_offset]; <---
-
-The problem here is that the compiler was given the right to use DSP
-instructions with the -mdsp / -mdspr2 command-line switches and
-performed some optimization for us and used DSP ASE instructions where
-we are not checking that the running CPU actually supports DSP ASE.
-
-This patch fixes the issue by partially reverting commit 32a7ede for
-arch/mips/kernel/Makefile in order to remove the -mdsp / -mdspr2
-compiler command-line switches such that we are now guaranteed that the
-compiler will not optimize using DSP ASE reserved instructions. We also
-need to fixup the rddsp/wrdsp and m{t,h}{hi,lo}{0,1,2,3} macros in
-arch/mips/include/asm/mipsregs.h to tell the assembler that we are going
-to explicitely use DSP ASE reserved instructions.
-
-Signed-off-by: Florian Fainelli <florian@openwrt.org>
----
-Ralf, John,
-
-This should be part of your 3.9-rc3 pull request if I may ;)
-
- arch/mips/include/asm/mipsregs.h | 209 ++++++++++++++++++++++++++++++++++----
- arch/mips/kernel/Makefile | 14 ---
- 2 files changed, 190 insertions(+), 33 deletions(-)
-
---- a/arch/mips/include/asm/mipsregs.h
-+++ b/arch/mips/include/asm/mipsregs.h
-@@ -1166,7 +1166,10 @@ do { \
- unsigned int __dspctl; \
- \
- __asm__ __volatile__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
- " rddsp %0, %x1 \n" \
-+ " .set pop \n" \
- : "=r" (__dspctl) \
- : "i" (mask)); \
- __dspctl; \
-@@ -1175,30 +1178,198 @@ do { \
- #define wrdsp(val, mask) \
- do { \
- __asm__ __volatile__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
- " wrdsp %0, %x1 \n" \
-+ " .set pop \n" \
- : \
- : "r" (val), "i" (mask)); \
- } while (0)
-
--#define mflo0() ({ long mflo0; __asm__("mflo %0, $ac0" : "=r" (mflo0)); mflo0;})
--#define mflo1() ({ long mflo1; __asm__("mflo %0, $ac1" : "=r" (mflo1)); mflo1;})
--#define mflo2() ({ long mflo2; __asm__("mflo %0, $ac2" : "=r" (mflo2)); mflo2;})
--#define mflo3() ({ long mflo3; __asm__("mflo %0, $ac3" : "=r" (mflo3)); mflo3;})
--
--#define mfhi0() ({ long mfhi0; __asm__("mfhi %0, $ac0" : "=r" (mfhi0)); mfhi0;})
--#define mfhi1() ({ long mfhi1; __asm__("mfhi %0, $ac1" : "=r" (mfhi1)); mfhi1;})
--#define mfhi2() ({ long mfhi2; __asm__("mfhi %0, $ac2" : "=r" (mfhi2)); mfhi2;})
--#define mfhi3() ({ long mfhi3; __asm__("mfhi %0, $ac3" : "=r" (mfhi3)); mfhi3;})
--
--#define mtlo0(x) __asm__("mtlo %0, $ac0" ::"r" (x))
--#define mtlo1(x) __asm__("mtlo %0, $ac1" ::"r" (x))
--#define mtlo2(x) __asm__("mtlo %0, $ac2" ::"r" (x))
--#define mtlo3(x) __asm__("mtlo %0, $ac3" ::"r" (x))
--
--#define mthi0(x) __asm__("mthi %0, $ac0" ::"r" (x))
--#define mthi1(x) __asm__("mthi %0, $ac1" ::"r" (x))
--#define mthi2(x) __asm__("mthi %0, $ac2" ::"r" (x))
--#define mthi3(x) __asm__("mthi %0, $ac3" ::"r" (x))
-+#define mflo0() \
-+({ \
-+ long mflo0; \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mflo %0, $ac0 \n" \
-+ " .set pop \n" \
-+ : "=r" (mflo0)); \
-+ mflo0; \
-+})
-+
-+#define mflo1() \
-+({ \
-+ long mflo1; \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mflo %0, $ac1 \n" \
-+ " .set pop \n" \
-+ : "=r" (mflo1)); \
-+ mflo1; \
-+})
-+
-+#define mflo2() \
-+({ \
-+ long mflo2; \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mflo %0, $ac2 \n" \
-+ " .set pop \n" \
-+ : "=r" (mflo2)); \
-+ mflo2; \
-+})
-+
-+#define mflo3() \
-+({ \
-+ long mflo3; \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mflo %0, $ac3 \n" \
-+ " .set pop \n" \
-+ : "=r" (mflo3)); \
-+ mflo3; \
-+})
-+
-+#define mfhi0() \
-+({ \
-+ long mfhi0; \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mfhi %0, $ac0 \n" \
-+ " .set pop \n" \
-+ : "=r" (mfhi0)); \
-+ mfhi0; \
-+})
-+
-+#define mfhi1() \
-+({ \
-+ long mfhi1; \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mfhi %0, $ac1 \n" \
-+ " .set pop \n" \
-+ : "=r" (mfhi1)); \
-+ mfhi1; \
-+})
-+
-+#define mfhi2() \
-+({ \
-+ long mfhi2; \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mfhi %0, $ac2 \n" \
-+ " .set pop \n" \
-+ : "=r" (mfhi2)); \
-+ mfhi2; \
-+})
-+
-+#define mfhi3() \
-+({ \
-+ long mfhi3; \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mfhi %0, $ac3 \n" \
-+ " .set pop \n" \
-+ : "=r" (mfhi3)); \
-+ mfhi3; \
-+})
-+
-+
-+#define mtlo0(x) \
-+({ \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mtlo %0, $ac0 \n" \
-+ " .set pop \n" \
-+ : \
-+ : "r" (x)); \
-+})
-+
-+#define mtlo1(x) \
-+({ \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mtlo %0, $ac1 \n" \
-+ " .set pop \n" \
-+ : \
-+ : "r" (x)); \
-+})
-+
-+#define mtlo2(x) \
-+({ \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mtlo %0, $ac2 \n" \
-+ " .set pop \n" \
-+ : \
-+ : "r" (x)); \
-+})
-+
-+#define mtlo3(x) \
-+({ \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mtlo %0, $ac3 \n" \
-+ " .set pop \n" \
-+ : \
-+ : "r" (x)); \
-+})
-+
-+#define mthi0(x) \
-+({ \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mthi %0, $ac0 \n" \
-+ " .set pop \n" \
-+ : \
-+ : "r" (x)); \
-+})
-+
-+#define mthi1(x) \
-+({ \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mthi %0, $ac1 \n" \
-+ " .set pop \n" \
-+ : \
-+ : "r" (x)); \
-+})
-+
-+#define mthi2(x) \
-+({ \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mthi %0, $ac2 \n" \
-+ " .set pop \n" \
-+ : \
-+ : "r" (x)); \
-+})
-+
-+#define mthi3(x) \
-+({ \
-+ __asm__( \
-+ " .set push \n" \
-+ " .set dsp \n" \
-+ " mthi %0, $ac3 \n" \
-+ " .set pop \n" \
-+ : \
-+ : "r" (x)); \
-+})
-
- #else
-
---- a/arch/mips/kernel/Makefile
-+++ b/arch/mips/kernel/Makefile
-@@ -109,20 +109,6 @@ obj-$(CONFIG_JUMP_LABEL) += jump_label.o
- ifeq ($(CONFIG_CPU_MIPSR2), y)
- CFLAGS_DSP = -DHAVE_AS_DSP
-
--#
--# Check if assembler supports DSP ASE
--#
--ifeq ($(call cc-option-yn,-mdsp), y)
--CFLAGS_DSP += -mdsp
--endif
--
--#
--# Check if assembler supports DSP ASE Rev2
--#
--ifeq ($(call cc-option-yn,-mdspr2), y)
--CFLAGS_DSP += -mdspr2
--endif
--
- CFLAGS_signal.o = $(CFLAGS_DSP)
- CFLAGS_signal32.o = $(CFLAGS_DSP)
- CFLAGS_process.o = $(CFLAGS_DSP)
diff --git a/target/linux/generic/patches-3.9/100-overlayfs.patch b/target/linux/generic/patches-3.9/100-overlayfs.patch
index a4bb686..ae1f2f3 100644
--- a/target/linux/generic/patches-3.9/100-overlayfs.patch
+++ b/target/linux/generic/patches-3.9/100-overlayfs.patch
@@ -243,7 +243,7 @@
will be called when part or all of the page is to be removed
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -5905,6 +5905,13 @@ F: drivers/scsi/osd/
+@@ -5911,6 +5911,13 @@ F: drivers/scsi/osd/
F: include/scsi/osd_*
F: fs/exofs/
@@ -335,7 +335,7 @@
goto out;
--- a/fs/namespace.c
+++ b/fs/namespace.c
-@@ -1399,6 +1399,24 @@ void drop_collected_mounts(struct vfsmou
+@@ -1403,6 +1403,24 @@ void drop_collected_mounts(struct vfsmou
release_mounts(&umount_list);
}
@@ -3118,7 +3118,7 @@
+module_exit(ovl_exit);
--- a/fs/splice.c
+++ b/fs/splice.c
-@@ -1308,6 +1308,7 @@ long do_splice_direct(struct file *in, l
+@@ -1310,6 +1310,7 @@ long do_splice_direct(struct file *in, l
return ret;
}
@@ -3179,7 +3179,7 @@
static inline bool execute_ok(struct inode *inode)
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
-@@ -66,6 +66,9 @@ extern void mnt_pin(struct vfsmount *mnt
+@@ -68,6 +68,9 @@ extern void mnt_pin(struct vfsmount *mnt
extern void mnt_unpin(struct vfsmount *mnt);
extern int __mnt_is_readonly(struct vfsmount *mnt);
diff --git a/target/linux/generic/patches-3.9/259-regmap_dynamic.patch b/target/linux/generic/patches-3.9/259-regmap_dynamic.patch
index e1b0141..451a5e2 100644
--- a/target/linux/generic/patches-3.9/259-regmap_dynamic.patch
+++ b/target/linux/generic/patches-3.9/259-regmap_dynamic.patch
@@ -64,7 +64,7 @@
#include <linux/mutex.h>
#include <linux/err.h>
#include <linux/rbtree.h>
-@@ -1777,3 +1778,5 @@ static int __init regmap_initcall(void)
+@@ -1778,3 +1779,5 @@ static int __init regmap_initcall(void)
return 0;
}
postcore_initcall(regmap_initcall);
diff --git a/target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch b/target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch
index 0e99045..bde3f25 100644
--- a/target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch
+++ b/target/linux/generic/patches-3.9/300-mips_expose_boot_raw.patch
@@ -18,7 +18,7 @@ Acked-by: Rob Landley <rob@landley.net>
config CEVT_BCM1480
bool
-@@ -2362,6 +2359,18 @@ config USE_OF
+@@ -2361,6 +2358,18 @@ config USE_OF
select OF_EARLY_FLATTREE
select IRQ_DOMAIN
diff --git a/target/linux/generic/patches-3.9/440-block2mtd_init.patch b/target/linux/generic/patches-3.9/440-block2mtd_init.patch
index 7ea827d..ff0f623 100644
--- a/target/linux/generic/patches-3.9/440-block2mtd_init.patch
+++ b/target/linux/generic/patches-3.9/440-block2mtd_init.patch
@@ -106,7 +106,7 @@
{
--- a/block/partition-generic.c
+++ b/block/partition-generic.c
-@@ -548,6 +548,7 @@ int invalidate_partitions(struct gendisk
+@@ -549,6 +549,7 @@ int invalidate_partitions(struct gendisk
return 0;
}
diff --git a/target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch b/target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch
index e122cc9..71ef938 100644
--- a/target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch
+++ b/target/linux/generic/patches-3.9/474-mtd_mp25p80_add_pm25lq032.patch
@@ -1,6 +1,6 @@
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
-@@ -682,6 +682,7 @@
+@@ -768,6 +768,7 @@ static const struct spi_device_id m25p_i
/* PMC -- pm25x "blocks" are 32K, sectors are 4K */
{ "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K_PMC) },
{ "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K_PMC) },
diff --git a/target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch b/target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch
index 726c2e8..f6de3f9 100644
--- a/target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch
+++ b/target/linux/generic/patches-3.9/476-mtd-m25p80-allow-to-disable-small-sector-erase.patch
@@ -30,7 +30,7 @@
/****************************************************************************/
struct m25p {
-@@ -1017,7 +1023,7 @@ static int m25p_probe(struct spi_device
+@@ -1018,7 +1024,7 @@ static int m25p_probe(struct spi_device
flash->mtd._write = m25p80_write;
/* prefer "small sector" erase if possible */
diff --git a/target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch b/target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch
index 6193aa9..7410a08 100644
--- a/target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch
+++ b/target/linux/generic/patches-3.9/643-bridge_remove_ipv6_dependency.patch
@@ -49,7 +49,7 @@
int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr,
unsigned char banned_flags)
-@@ -4944,6 +4943,9 @@ int __init addrconf_init(void)
+@@ -4965,6 +4964,9 @@ int __init addrconf_init(void)
ipv6_addr_label_rtnl_register();
@@ -59,7 +59,7 @@
return 0;
errout:
rtnl_af_unregister(&inet6_ops);
-@@ -4962,6 +4964,9 @@ void addrconf_cleanup(void)
+@@ -4983,6 +4985,9 @@ void addrconf_cleanup(void)
struct net_device *dev;
int i;
diff --git a/target/linux/generic/patches-3.9/721-phy_packets.patch b/target/linux/generic/patches-3.9/721-phy_packets.patch
index 10fb731..470f54f 100644
--- a/target/linux/generic/patches-3.9/721-phy_packets.patch
+++ b/target/linux/generic/patches-3.9/721-phy_packets.patch
@@ -79,7 +79,7 @@
help
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -2530,9 +2530,19 @@ int dev_hard_start_xmit(struct sk_buff *
+@@ -2529,9 +2529,19 @@ int dev_hard_start_xmit(struct sk_buff *
if (!list_empty(&ptype_all))
dev_queue_xmit_nit(skb, dev);
@@ -102,7 +102,7 @@
if (rc == NETDEV_TX_OK)
txq_trans_update(txq);
return rc;
-@@ -2555,9 +2565,19 @@ gso:
+@@ -2554,9 +2564,19 @@ gso:
if (!list_empty(&ptype_all))
dev_queue_xmit_nit(nskb, dev);
diff --git a/target/linux/generic/patches-3.9/862-gpio_spi_driver.patch b/target/linux/generic/patches-3.9/862-gpio_spi_driver.patch
index e68f808..29c735b 100644
--- a/target/linux/generic/patches-3.9/862-gpio_spi_driver.patch
+++ b/target/linux/generic/patches-3.9/862-gpio_spi_driver.patch
@@ -345,7 +345,7 @@ Please use the new mainline SPI-GPIO driver, as of 2.6.29.
+MODULE_LICENSE("GPL v2");
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
-@@ -177,6 +177,15 @@ config SPI_GPIO
+@@ -178,6 +178,15 @@ config SPI_GPIO
GPIO operations, you should be able to leverage that for better
speed with a custom version of this driver; see the source code.
diff --git a/target/linux/generic/patches-3.9/863-gpiommc.patch b/target/linux/generic/patches-3.9/863-gpiommc.patch
index 6c3dce2..ebbafb4 100644
--- a/target/linux/generic/patches-3.9/863-gpiommc.patch
+++ b/target/linux/generic/patches-3.9/863-gpiommc.patch
@@ -830,7 +830,7 @@
+be done automatically.
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -3600,6 +3600,11 @@ L: linuxppc-dev@lists.ozlabs.org
+@@ -3606,6 +3606,11 @@ L: linuxppc-dev@lists.ozlabs.org
S: Odd Fixes
F: drivers/tty/hvc/
diff --git a/target/linux/generic/patches-3.9/921-use_preinit_as_init.patch b/target/linux/generic/patches-3.9/921-use_preinit_as_init.patch
index 482e252..17b2ca7 100644
--- a/target/linux/generic/patches-3.9/921-use_preinit_as_init.patch
+++ b/target/linux/generic/patches-3.9/921-use_preinit_as_init.patch
@@ -1,8 +1,6 @@
-Index: linux-3.8.3/init/main.c
-===================================================================
---- linux-3.8.3.orig/init/main.c 2013-04-02 21:43:30.000000000 +0200
-+++ linux-3.8.3/init/main.c 2013-04-02 21:44:26.362130897 +0200
-@@ -835,7 +835,8 @@
+--- a/init/main.c
++++ b/init/main.c
+@@ -848,7 +848,8 @@ static int __ref kernel_init(void *unuse
printk(KERN_WARNING "Failed to execute %s. Attempting "
"defaults...\n", execute_command);
}