--- /dev/null
+From d09957fbb4d0b059b3176b510540df69048ad170 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Tue, 10 Mar 2015 17:48:37 +0100
+Subject: mtd: cfi: reduce stack size
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit d09957fbb4d0b059b3176b510540df69048ad170 upstream.
+
+The cfi_staa_write_buffers function uses a large amount of kernel stack
+whenever CONFIG_MTD_MAP_BANK_WIDTH_32 is set, and that results in a
+warning on ARM allmodconfig builds:
+
+drivers/mtd/chips/cfi_cmdset_0020.c: In function 'cfi_staa_write_buffers':
+drivers/mtd/chips/cfi_cmdset_0020.c:651:1: warning: the frame size of 1208 bytes is larger than 1024 bytes [-Wframe-larger-than=]
+
+It turns out that this is largely a result of a suboptimal implementation
+of map_word_andequal(). Replacing this function with a straightforward
+one reduces the stack size in this function by exactly 200 bytes,
+shrinks the .text segment for this file from 27648 bytes to 26608 bytes,
+and makes the warning go away.
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/mtd/map.h | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+--- a/include/linux/mtd/map.h
++++ b/include/linux/mtd/map.h
+@@ -309,7 +309,17 @@ static inline map_word map_word_or(struc
+ return r;
+ }
+
+-#define map_word_andequal(m, a, b, z) map_word_equal(m, z, map_word_and(m, a, b))
++static inline int map_word_andequal(struct map_info *map, map_word val1, map_word val2, map_word val3)
++{
++ int i;
++
++ for (i = 0; i < map_words(map); i++) {
++ if ((val1.x[i] & val2.x[i]) != val3.x[i])
++ return 0;
++ }
++
++ return 1;
++}
+
+ static inline int map_word_bitsset(struct map_info *map, map_word val1, map_word val2)
+ {
--- /dev/null
+From ffb6e0c9a0572f8e5f8e9337a1b40ac2ec1493a1 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Tue, 26 May 2015 14:45:29 -0700
+Subject: tty: remove platform_sysrq_reset_seq
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit ffb6e0c9a0572f8e5f8e9337a1b40ac2ec1493a1 upstream.
+
+The platform_sysrq_reset_seq code was intended as a way for an embedded
+platform to provide its own sysrq sequence at compile time. After over two
+years, nobody has started using it in an upstream kernel, and the platforms
+that were interested in it have moved on to devicetree, which can be used
+to configure the sequence without requiring kernel changes. The method is
+also incompatible with the way that most architectures build support for
+multiple platforms into a single kernel.
+
+Now the code is producing warnings when built with gcc-5.1:
+
+drivers/tty/sysrq.c: In function 'sysrq_init':
+drivers/tty/sysrq.c:959:33: warning: array subscript is above array bounds [-Warray-bounds]
+ key = platform_sysrq_reset_seq[i];
+
+We could fix this, but it seems unlikely that it will ever be used, so
+let's just remove the code instead. We still have the option to pass the
+sequence either in DT, using the kernel command line, or using the
+/sys/module/sysrq/parameters/reset_seq file.
+
+Fixes: 154b7a489a ("Input: sysrq - allow specifying alternate reset sequence")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/sysrq.c | 19 +------------------
+ 1 file changed, 1 insertion(+), 18 deletions(-)
+
+--- a/drivers/tty/sysrq.c
++++ b/drivers/tty/sysrq.c
+@@ -55,9 +55,6 @@
+ static int __read_mostly sysrq_enabled = CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE;
+ static bool __read_mostly sysrq_always_enabled;
+
+-unsigned short platform_sysrq_reset_seq[] __weak = { KEY_RESERVED };
+-int sysrq_reset_downtime_ms __weak;
+-
+ static bool sysrq_on(void)
+ {
+ return sysrq_enabled || sysrq_always_enabled;
+@@ -567,6 +564,7 @@ void handle_sysrq(int key)
+ EXPORT_SYMBOL(handle_sysrq);
+
+ #ifdef CONFIG_INPUT
++static int sysrq_reset_downtime_ms;
+
+ /* Simple translation table for the SysRq keys */
+ static const unsigned char sysrq_xlate[KEY_CNT] =
+@@ -947,23 +945,8 @@ static bool sysrq_handler_registered;
+
+ static inline void sysrq_register_handler(void)
+ {
+- unsigned short key;
+ int error;
+- int i;
+-
+- /* First check if a __weak interface was instantiated. */
+- for (i = 0; i < ARRAY_SIZE(sysrq_reset_seq); i++) {
+- key = platform_sysrq_reset_seq[i];
+- if (key == KEY_RESERVED || key > KEY_MAX)
+- break;
+-
+- sysrq_reset_seq[sysrq_reset_seq_len++] = key;
+- }
+
+- /*
+- * DT configuration takes precedence over anything that would
+- * have been defined via the __weak interface.
+- */
+ sysrq_of_get_keyreset_config();
+
+ error = input_register_handler(&sysrq_handler);