mediatek: mt7622: bpi-r64: rewrite MMC uImage.FIT sysupgrade
[openwrt/staging/thess.git] / target / linux / mediatek / mt7622 / base-files / lib / upgrade / platform.sh
index 98775c6a134b294b880d81140e5675e1ed72fb31..b9fa055854e43b3dd2057c1b1e03520c66ae7433 100755 (executable)
@@ -1,5 +1,5 @@
 REQUIRE_IMAGE_METADATA=1
-RAMFS_COPY_BIN='fw_printenv fw_setenv blockdev'
+RAMFS_COPY_BIN='fw_printenv fw_setenv fwtool'
 RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
 
 platform_do_upgrade() {
@@ -12,17 +12,12 @@ platform_do_upgrade() {
                export_partdevice rootdev 0
                case "$rootdev" in
                mmc*)
-                       blockdev --rereadpt /dev/$rootdev || return 1
-                       local fitpart=$(find_mmc_part "production" $rootdev)
-                       [ "$fitpart" ] || return 1
-                       dd if=/dev/zero of=$fitpart bs=4096 count=1 2>/dev/null
-                       blockdev --rereadpt /dev/$rootdev
-                       get_image "$1" | dd of=$fitpart
-                       blockdev --rereadpt /dev/$rootdev
-                       local datapart=$(find_mmc_part "rootfs_data" $rootdev)
-                       [ "$datapart" ] || return 0
-                       dd if=/dev/zero of=$datapart bs=4096 count=1 2>/dev/null
-                       echo $datapart > /tmp/sysupgrade.datapart
+                       sync
+                       export UPGRADE_MMC_PARTDEV=$(find_mmc_part "production" $rootdev)
+                       [ "$UPGRADE_MMC_PARTDEV" ] || return 1
+                       export UPGRADE_MMC_IMAGE_BLOCKS=$(($(get_image "$1" | fwtool -i /dev/null -T - | dd of=$UPGRADE_MMC_PARTDEV bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
+                       [ "$UPGRADE_MMC_IMAGE_BLOCKS" ] || return 0
+                       dd if=/dev/zero of=$UPGRADE_MMC_PARTDEV bs=512 seek=$UPGRADE_MMC_IMAGE_BLOCKS count=8
                        ;;
                *)
                        CI_KERNPART="fit"
@@ -92,10 +87,12 @@ platform_check_image() {
 }
 
 platform_copy_config_mmc() {
-       [ -e "$UPGRADE_BACKUP" ] || return
-       local datapart=$(cat /tmp/sysupgrade.datapart)
-       [ "$datapart" ] || echo "no rootfs_data partition, cannot keep configuration." >&2
-       dd if="$UPGRADE_BACKUP" of=$datapart
+       if [ ! -e "$UPGRADE_BACKUP" ] ||
+          [ ! -e "$UPGRADE_MMC_PARTDEV" ] ||
+          [ ! "$UPGRADE_MMC_IMAGE_BLOCKS" ]; then
+               return
+       fi
+       dd if="$UPGRADE_BACKUP" of="$UPGRADE_MMC_PARTDEV" bs=512 seek=$UPGRADE_MMC_IMAGE_BLOCKS
        sync
 }