aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch22
-rw-r--r--target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch22
2 files changed, 36 insertions, 8 deletions
diff --git a/target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch b/target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
index 89bac64830..ff3490bf9e 100644
--- a/target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
+++ b/target/linux/generic/pending-4.14/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
-@@ -1172,6 +1172,54 @@ static struct mtd_info * __init open_mtd
+@@ -1172,6 +1172,68 @@ static struct mtd_info * __init open_mtd
return mtd;
}
@@ -20,6 +20,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+{
+ int err;
+ struct mtd_info *mtd;
++ loff_t offset = 0;
+ size_t len;
+ char magic[4];
+
@@ -31,9 +32,22 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+ if (IS_ERR(mtd))
+ return;
+
++ /* get the first not bad block */
++ if (mtd_can_have_bb(mtd))
++ while (mtd_block_isbad(mtd, offset)) {
++ offset += mtd->erasesize;
++
++ if (offset > mtd->size) {
++ pr_err("UBI error: Failed to find a non-bad "
++ "block on mtd%d\n", mtd->index);
++ goto cleanup;
++ }
++ }
++
+ /* check for a valid ubi magic if read from flash was successful */
-+ err = mtd_read(mtd, 0, 4, &len, (void *) magic);
-+ if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
++ err = mtd_read(mtd, offset, 4, &len, (void *) magic);
++ if ((!err || mtd_is_bitflip(err)) &&
++ len == 4 && strncmp(magic, "UBI#", 4)) {
+ pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
+ goto cleanup;
+ }
@@ -63,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static int __init ubi_init(void)
{
int err, i, k;
-@@ -1255,6 +1303,12 @@ static int __init ubi_init(void)
+@@ -1255,6 +1317,12 @@ static int __init ubi_init(void)
}
}
diff --git a/target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch b/target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
index 1436e486dd..8b923d17d6 100644
--- a/target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
+++ b/target/linux/generic/pending-4.9/490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
@@ -8,7 +8,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
-@@ -1226,6 +1226,54 @@ static struct mtd_info * __init open_mtd
+@@ -1226,6 +1226,68 @@ static struct mtd_info * __init open_mtd
return mtd;
}
@@ -20,6 +20,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+{
+ int err;
+ struct mtd_info *mtd;
++ loff_t offset = 0;
+ size_t len;
+ char magic[4];
+
@@ -31,9 +32,22 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+ if (IS_ERR(mtd))
+ return;
+
++ /* get the first not bad block */
++ if (mtd_can_have_bb(mtd))
++ while (mtd_block_isbad(mtd, offset)) {
++ offset += mtd->erasesize;
++
++ if (offset > mtd->size) {
++ pr_err("UBI error: Failed to find a non-bad "
++ "block on mtd%d\n", mtd->index);
++ goto cleanup;
++ }
++ }
++
+ /* check for a valid ubi magic if read from flash was successful */
-+ err = mtd_read(mtd, 0, 4, &len, (void *) magic);
-+ if (!err && len == 4 && strncmp(magic, "UBI#", 4)) {
++ err = mtd_read(mtd, offset, 4, &len, (void *) magic);
++ if ((!err || mtd_is_bitflip(err)) &&
++ len == 4 && strncmp(magic, "UBI#", 4)) {
+ pr_err("UBI error: no valid UBI magic found inside mtd%d\n", mtd->index);
+ goto cleanup;
+ }
@@ -63,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
static int __init ubi_init(void)
{
int err, i, k;
-@@ -1309,6 +1357,12 @@ static int __init ubi_init(void)
+@@ -1309,6 +1371,12 @@ static int __init ubi_init(void)
}
}