summaryrefslogtreecommitdiff
path: root/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2014-07-18 14:36:38 +0000
committerFelix Fietkau <nbd@openwrt.org>2014-07-18 14:36:38 +0000
commit1d232f354a9194a7c3a56beaa3346482cc097f80 (patch)
treed549e21f1a310d7234c52bba49ee9a19a4126853 /target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch
parent51fbfde474136a5b442f53e6fc1bcd6f93e1cddb (diff)
downloadmtk-20170518-1d232f354a9194a7c3a56beaa3346482cc097f80.zip
mtk-20170518-1d232f354a9194a7c3a56beaa3346482cc097f80.tar.gz
mtk-20170518-1d232f354a9194a7c3a56beaa3346482cc097f80.tar.bz2
kernel: mtd: allow partial block erase
This fixes error erasing partial mtd partition which does not start on eraseblock boundary and allows using fconfig to configure redboot on devices such as the Gateworks Cambria. Signed-off-by: Maciej Skrzypek <maciej.skrzypek@flytronic.pl> SVN-Revision: 41733
Diffstat (limited to 'target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch')
-rw-r--r--target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch7
1 files changed, 4 insertions, 3 deletions
diff --git a/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch b/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch
index 3b22cfc..f9c1c5e 100644
--- a/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch
+++ b/target/linux/generic/patches-3.3/401-partial_eraseblock_write.patch
@@ -9,7 +9,7 @@
/* Our partition linked list */
static LIST_HEAD(mtd_partitions);
static DEFINE_MUTEX(mtd_partitions_mutex);
-@@ -252,13 +254,60 @@ static int part_erase(struct mtd_info *m
+@@ -252,13 +254,61 @@ static int part_erase(struct mtd_info *m
return -EROFS;
if (instr->addr >= mtd->size)
return -EINVAL;
@@ -33,6 +33,7 @@
+ part->master->erasesize,
+ &readlen, instr->erase_buf);
+
++ instr->len += instr->erase_buf_ofs;
+ instr->partial_start = true;
+ } else {
+ mtd_ofs = part->offset + part->mtd.size;
@@ -70,7 +71,7 @@
return ret;
}
-@@ -266,7 +315,25 @@ void mtd_erase_callback(struct erase_inf
+@@ -266,7 +316,25 @@ void mtd_erase_callback(struct erase_inf
{
if (instr->mtd->erase == part_erase) {
struct mtd_part *part = PART(instr->mtd);
@@ -96,7 +97,7 @@
if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
instr->fail_addr -= part->offset;
instr->addr -= part->offset;
-@@ -537,18 +604,24 @@ static struct mtd_part *allocate_partiti
+@@ -537,18 +605,24 @@ static struct mtd_part *allocate_partiti
if ((slave->mtd.flags & MTD_WRITEABLE) &&
mtd_mod_by_eb(slave->offset, &slave->mtd)) {
/* Doesn't start on a boundary of major erase size */