mediatek: mt7622: bpi-r64: rewrite MMC uImage.FIT sysupgrade
authorDaniel Golle <daniel@makrotopia.org>
Fri, 12 Nov 2021 14:54:52 +0000 (14:54 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Fri, 12 Nov 2021 15:03:07 +0000 (15:03 +0000)
Similar to mt7623, also no longer use 'blockdev' and stop relying on
in-kernel partition parsers. Instead, strip off all metadata using
'fwtool' while writing the firmware image and scrape the number of
blocks written from 'dd', then use that block offset to stash the
configuration backup.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
target/linux/mediatek/mt7622/base-files/lib/upgrade/platform.sh
target/linux/mediatek/mt7622/target.mk

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
 }
 
index 5403bf5f87bbdab6ec7ffe6deccd075c7d7c280f..92c3f47370ee12d86c456de8703fb35bbb02e5cd 100644 (file)
@@ -2,7 +2,7 @@ ARCH:=aarch64
 SUBTARGET:=mt7622
 BOARDNAME:=MT7622
 CPU_TYPE:=cortex-a53
-DEFAULT_PACKAGES += kmod-mt7615e kmod-mt7615-firmware wpad-basic-wolfssl blockdev uboot-envtools
+DEFAULT_PACKAGES += kmod-mt7615e kmod-mt7615-firmware wpad-basic-wolfssl uboot-envtools
 KERNELNAME:=Image dtbs
 
 define Target/Description