aboutsummaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorTomasz Maciej Nowak <tomek_n@o2.pl>2019-08-23 15:50:51 +0200
committerChristian Lamparter <chunkeey@gmail.com>2019-09-01 00:12:03 +0200
commit0bf6a531c257d5b79383293967d432ca4ae8b7b4 (patch)
tree7c5fc5ebfc9bef51d70c0bfd3fd1706789c6963f /target
parenta45cf75eca4069f24bf5bba8f245de2e553f7f78 (diff)
downloadupstream-0bf6a531c257d5b79383293967d432ca4ae8b7b4.tar.gz
upstream-0bf6a531c257d5b79383293967d432ca4ae8b7b4.tar.bz2
upstream-0bf6a531c257d5b79383293967d432ca4ae8b7b4.zip
ath79: fix FIS partition detection for 4.19 kernel
When bumping to 4.19 the patch responsible for scaning flash for FIS partition got left out. Without it devices with RedBoot bootloader using automatic partitions detection in dts won't boot with the new kernel. Fixes: 3771176 ("ath79: add support for linux 4.19") Signed-off-by: Tomasz Maciej Nowak <tomek_n@o2.pl>
Diffstat (limited to 'target')
-rw-r--r--target/linux/ath79/patches-4.19/408-mtd-redboot_partition_scan.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/target/linux/ath79/patches-4.19/408-mtd-redboot_partition_scan.patch b/target/linux/ath79/patches-4.19/408-mtd-redboot_partition_scan.patch
new file mode 100644
index 0000000000..cd41e7ceb2
--- /dev/null
+++ b/target/linux/ath79/patches-4.19/408-mtd-redboot_partition_scan.patch
@@ -0,0 +1,44 @@
+--- a/drivers/mtd/redboot.c
++++ b/drivers/mtd/redboot.c
+@@ -76,12 +76,18 @@ static int parse_redboot_partitions(stru
+ static char nullstring[] = "unallocated";
+ #endif
+
++ buf = vmalloc(master->erasesize);
++ if (!buf)
++ return -ENOMEM;
++
++ restart:
+ if ( directory < 0 ) {
+ offset = master->size + directory * master->erasesize;
+ while (mtd_block_isbad(master, offset)) {
+ if (!offset) {
+ nogood:
+ printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n");
++ vfree(buf);
+ return -EIO;
+ }
+ offset -= master->erasesize;
+@@ -94,10 +100,6 @@ static int parse_redboot_partitions(stru
+ goto nogood;
+ }
+ }
+- buf = vmalloc(master->erasesize);
+-
+- if (!buf)
+- return -ENOMEM;
+
+ printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n",
+ master->name, offset);
+@@ -170,6 +172,11 @@ static int parse_redboot_partitions(stru
+ }
+ if (i == numslots) {
+ /* Didn't find it */
++ if (offset + master->erasesize < master->size) {
++ /* not at the end of the flash yet, maybe next block :) */
++ directory++;
++ goto restart;
++ }
+ printk(KERN_NOTICE "No RedBoot partition table detected in %s\n",
+ master->name);
+ ret = 0;