From f890117582829fe71bb877c26a6faf7c748b956d Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Mon, 15 Aug 2011 00:15:36 +0000
Subject: kernel: disable cfi cmdset 0002 erase suspend

on some platforms, erase suspend leads to data corruption and lockups when write
ops collide with erase ops. this has been observed on the buffalo wzr-hp-g300nh.
rather than play whack-a-mole with a hard to reproduce issue on a variety of devices,
simply disable erase suspend, as it will usually not produce any useful gain on
the small filesystems used on embedded hardware.

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@27984 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 .../patches-2.6.39/461-cfi_cmdset_0002_no_erase_suspend.patch | 11 +++++++++++
 .../patches-3.0/460-cfi_cmdset_0002_no_erase_suspend.patch    | 11 +++++++++++
 .../patches-3.1/460-cfi_cmdset_0002_no_erase_suspend.patch    | 11 +++++++++++
 3 files changed, 33 insertions(+)
 create mode 100644 target/linux/generic/patches-2.6.39/461-cfi_cmdset_0002_no_erase_suspend.patch
 create mode 100644 target/linux/generic/patches-3.0/460-cfi_cmdset_0002_no_erase_suspend.patch
 create mode 100644 target/linux/generic/patches-3.1/460-cfi_cmdset_0002_no_erase_suspend.patch

(limited to 'target/linux')

diff --git a/target/linux/generic/patches-2.6.39/461-cfi_cmdset_0002_no_erase_suspend.patch b/target/linux/generic/patches-2.6.39/461-cfi_cmdset_0002_no_erase_suspend.patch
new file mode 100644
index 000000000..d7b44ef71
--- /dev/null
+++ b/target/linux/generic/patches-2.6.39/461-cfi_cmdset_0002_no_erase_suspend.patch
@@ -0,0 +1,11 @@
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -684,7 +684,7 @@ static int get_chip(struct map_info *map
+ 		return 0;
+ 
+ 	case FL_ERASING:
+-		if (!cfip || !(cfip->EraseSuspend & (0x1|0x2)) ||
++		if (1 /* no suspend */ || !cfip || !(cfip->EraseSuspend & (0x1|0x2)) ||
+ 		    !(mode == FL_READY || mode == FL_POINT ||
+ 		    (mode == FL_WRITING && (cfip->EraseSuspend & 0x2))))
+ 			goto sleep;
diff --git a/target/linux/generic/patches-3.0/460-cfi_cmdset_0002_no_erase_suspend.patch b/target/linux/generic/patches-3.0/460-cfi_cmdset_0002_no_erase_suspend.patch
new file mode 100644
index 000000000..04ef193a8
--- /dev/null
+++ b/target/linux/generic/patches-3.0/460-cfi_cmdset_0002_no_erase_suspend.patch
@@ -0,0 +1,11 @@
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -685,7 +685,7 @@ static int get_chip(struct map_info *map
+ 		return 0;
+ 
+ 	case FL_ERASING:
+-		if (!cfip || !(cfip->EraseSuspend & (0x1|0x2)) ||
++		if (1 /* no suspend */ || !cfip || !(cfip->EraseSuspend & (0x1|0x2)) ||
+ 		    !(mode == FL_READY || mode == FL_POINT ||
+ 		    (mode == FL_WRITING && (cfip->EraseSuspend & 0x2))))
+ 			goto sleep;
diff --git a/target/linux/generic/patches-3.1/460-cfi_cmdset_0002_no_erase_suspend.patch b/target/linux/generic/patches-3.1/460-cfi_cmdset_0002_no_erase_suspend.patch
new file mode 100644
index 000000000..04ef193a8
--- /dev/null
+++ b/target/linux/generic/patches-3.1/460-cfi_cmdset_0002_no_erase_suspend.patch
@@ -0,0 +1,11 @@
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -685,7 +685,7 @@ static int get_chip(struct map_info *map
+ 		return 0;
+ 
+ 	case FL_ERASING:
+-		if (!cfip || !(cfip->EraseSuspend & (0x1|0x2)) ||
++		if (1 /* no suspend */ || !cfip || !(cfip->EraseSuspend & (0x1|0x2)) ||
+ 		    !(mode == FL_READY || mode == FL_POINT ||
+ 		    (mode == FL_WRITING && (cfip->EraseSuspend & 0x2))))
+ 			goto sleep;
-- 
cgit v1.2.3