[][Refactor eMMC image of MT7981]

[Description]
Refactor eMMC image of MT7981.
The whole image format is changed:
 - Kernel and rootfs reside in individual partitions.
 - rootfs_data split from rootfs partition using loop device with offset.
 - Upgrading firmware usig tarball with saving config files supported.
 - No recovery partition needed.
 - No GPT partition offset and size restricted.

Important note:
Please select the following packages to make emmc firmware upgrading work:
e2fsprogs mkf2fs blkid blockdev losetup kmod-fs-ext4 kmod-fs-f2fs

[Release-log]
  N/A

Change-Id: I17ad85efa235d068504eeb848431b0c73ae768b4

Change-Id: Iae56e7776b049d3fd9f79861523379794e99c7f0
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/5374466
diff --git a/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-emmc-rfb.dts b/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-emmc-rfb.dts
index d632601..bf2628e 100644
--- a/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-emmc-rfb.dts
+++ b/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-emmc-rfb.dts
@@ -6,7 +6,7 @@
 	chosen {
 		bootargs = "console=ttyS0,115200n1 loglevel=8  \
 				earlycon=uart8250,mmio32,0x11002000 \
-				root=/dev/mmcblk0p7 rootfstype=squashfs,f2fs";
+				root=PARTLABEL=rootfs rootfstype=squashfs,f2fs";
 	};
 
 	memory {
diff --git a/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-sd-rfb.dts b/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-sd-rfb.dts
index b3db66b..7d0c097 100644
--- a/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-sd-rfb.dts
+++ b/target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-sd-rfb.dts
@@ -2,11 +2,11 @@
 #include "mt7981.dtsi"
 / {
 	model = "MediaTek MT7981 RFB";
-	compatible = "mediatek,mt7981-emmc-rfb";
+	compatible = "mediatek,mt7981-sd-rfb";
 	chosen {
 		bootargs = "console=ttyS0,115200n1 loglevel=8  \
 				earlycon=uart8250,mmio32,0x11002000 \
-				root=/dev/mmcblk0p7 rootfstype=squashfs,f2fs";
+				root=PARTLABEL=rootfs rootfstype=squashfs,f2fs";
 	};
 
 	memory {
diff --git a/target/linux/mediatek/image/gen_mt7981_emmc_img.sh b/target/linux/mediatek/image/gen_mt7981_emmc_img.sh
deleted file mode 100755
index d74068c..0000000
--- a/target/linux/mediatek/image/gen_mt7981_emmc_img.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-OUTPUT_FILE=$1
-KERNEL_FILE=$2
-RECOVERY_FILE=$3
-ROOTFS_FILE=$4
-
-BS=512
-
-#RECOVERY_OFFSET= kernel size / BS = 20M / 512 (blocks)
-RECOVERY_OFFSET=40960
-
-#ROOTFS_OFFSET = RECOVERY_OFFSET + (RECOVERY_SIZE / BS)
-#	       = 40960 + (10M  / 512) (blocks)
-ROOTFS_OFFSET=61440
-dd bs="$BS" of="$OUTPUT_FILE" if="$KERNEL_FILE"
-dd bs="$BS" of="$OUTPUT_FILE" if="$RECOVERY_FILE" seek="$RECOVERY_OFFSET"
-dd bs="$BS" of="$OUTPUT_FILE" if="$ROOTFS_FILE" seek="$ROOTFS_OFFSET"
-dd if=/dev/zero of="$OUTPUT_FILE" bs=128k count=1 oflag=append conv=notrunc
diff --git a/target/linux/mediatek/image/mt7981.mk b/target/linux/mediatek/image/mt7981.mk
index f42ca75..359351d 100755
--- a/target/linux/mediatek/image/mt7981.mk
+++ b/target/linux/mediatek/image/mt7981.mk
@@ -46,13 +46,28 @@
   DEVICE_VENDOR := MediaTek
   DEVICE_MODEL := mt7981-emmc-rfb
   DEVICE_DTS := mt7981-emmc-rfb
+  SUPPORTED_DEVICES := mediatek,mt7981-emmc-rfb
   DEVICE_DTS_DIR := $(DTS_DIR)/mediatek
-  DEVICE_PACKAGES := mkf2fs e2fsprogs kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1 kmod-mmc
-  IMAGES := sysupgrade-emmc.bin.gz
-  IMAGE/sysupgrade-emmc.bin.gz := sysupgrade-emmc | gzip | append-metadata
+  DEVICE_PACKAGES := mkf2fs e2fsprogs blkid blockdev losetup kmod-fs-ext4 \
+		     kmod-mmc kmod-fs-f2fs kmod-fs-vfat kmod-nls-cp437 \
+		     kmod-nls-iso8859-1
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
 endef
 TARGET_DEVICES += mt7981-emmc-rfb
 
+define Device/mt7981-sd-rfb
+  DEVICE_VENDOR := MediaTek
+  DEVICE_MODEL := mt7981-sd-rfb
+  DEVICE_DTS := mt7981-sd-rfb
+  SUPPORTED_DEVICES := mediatek,mt7981-sd-rfb
+  DEVICE_DTS_DIR := $(DTS_DIR)/mediatek
+  DEVICE_PACKAGES := mkf2fs e2fsprogs blkid blockdev losetup kmod-fs-ext4 \
+		     kmod-mmc kmod-fs-f2fs kmod-fs-vfat kmod-nls-cp437 \
+		     kmod-nls-iso8859-1
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+endef
+TARGET_DEVICES += mt7981-sd-rfb
+
 define Device/mt7981-snfi-nand-2500wan-p5
   DEVICE_VENDOR := MediaTek
   DEVICE_MODEL := mt7981-snfi-nand-2500wan-p5
diff --git a/target/linux/mediatek/mt7981/base-files/lib/upgrade/platform.sh b/target/linux/mediatek/mt7981/base-files/lib/upgrade/platform.sh
index 2ee99c7..53a45ab 100644
--- a/target/linux/mediatek/mt7981/base-files/lib/upgrade/platform.sh
+++ b/target/linux/mediatek/mt7981/base-files/lib/upgrade/platform.sh
@@ -1,3 +1,4 @@
+RAMFS_COPY_BIN='mkfs.f2fs blkid blockdev'
 platform_do_upgrade() {
 	local board=$(board_name)
 
@@ -6,6 +7,10 @@
 		nand_do_upgrade "$1"
 		;;
 	*)
+	*emmc*)
+		mtk_mmc_do_upgrade "$1"
+		;;
+	*)
 		default_do_upgrade "$1"
 		;;
 	esac
@@ -20,7 +25,8 @@
 	[ "$#" -gt 1 ] && return 1
 
 	case "$board" in
-	*snand*)
+	*snand*)|\
+	*emmc*)
 		# tar magic `ustar`
 		magic="$(dd if="$1" bs=1 skip=257 count=5 2>/dev/null)"