diff options
author | Tomasz Maciej Nowak <tomek_n@o2.pl> | 2019-08-23 15:50:51 +0200 |
---|---|---|
committer | Christian Lamparter <chunkeey@gmail.com> | 2019-09-01 00:12:03 +0200 |
commit | 0bf6a531c257d5b79383293967d432ca4ae8b7b4 (patch) | |
tree | 7c5fc5ebfc9bef51d70c0bfd3fd1706789c6963f /target | |
parent | a45cf75eca4069f24bf5bba8f245de2e553f7f78 (diff) | |
download | upstream-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.patch | 44 |
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; |