base-files: fix sysupgrade for kernel-out-of-UBI
[openwrt/openwrt.git] / package / base-files / files / lib / upgrade / nand.sh
index 5ecdb0ff23636b6a95edf8edf7b33c4f78703700..c9960bf9d44d1d2375b20398e56465cca54e1582 100644 (file)
@@ -305,7 +305,11 @@ nand_upgrade_tar() {
        local ubi_kernel_length
        if [ "$kernel_length" ]; then
                if [ "$kernel_mtd" ]; then
-                       mtd erase "$CI_KERNPART"
+                       # On some devices, the raw kernel and ubi partitions overlap.
+                       # These devices brick if the kernel partition is erased.
+                       # Hence only invalidate kernel for now.
+                       dd if=/dev/zero bs=4096 count=1 2>/dev/null | \
+                               mtd write - "$CI_KERNPART"
                else
                        ubi_kernel_length="$kernel_length"
                fi
@@ -322,7 +326,7 @@ nand_upgrade_tar() {
        if [ "$kernel_length" ]; then
                if [ "$kernel_mtd" ]; then
                        tar xf "$tar_file" "$board_dir/kernel" -O | \
-                               mtd -n write - "$CI_KERNPART"
+                               mtd write - "$CI_KERNPART"
                else
                        local kern_ubivol="$( nand_find_volume $ubidev "$CI_KERNPART" )"
                        tar xf "$tar_file" "$board_dir/kernel" -O | \