ar71xx: fix platform_find_rootfspart()
[openwrt/openwrt.git] / target / linux / ar71xx / base-files / lib / upgrade / platform.sh
index 82ed041d66226239095bb53c3ecc068e5140dd64..4f479ce8585df7988ebe1492b614bd5c27109ee8 100755 (executable)
@@ -12,6 +12,8 @@ RAMFS_COPY_DATA=/lib/ar71xx.sh
 CI_BLKSZ=65536
 CI_LDADR=0x80060000
 
+PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=0
+
 platform_find_partitions() {
        local first dev size erasesize name
        while read dev size erasesize name; do
@@ -41,6 +43,13 @@ platform_find_kernelpart() {
        done
 }
 
+platform_find_rootfspart() {
+       local part
+       for part in "${1%:*}" "${1#*:}"; do
+               [ "$part" != "$2" ] && echo "$part" && break
+       done
+}
+
 platform_do_upgrade_combined() {
        local partitions=$(platform_find_partitions)
        local kernelpart=$(platform_find_kernelpart "${partitions#*:}")
@@ -54,13 +63,22 @@ platform_do_upgrade_combined() {
           [ ${root_blocks:-0} -gt 0 ] && \
           [ ${erase_size:-0} -gt 0 ];
        then
+               local rootfspart=$(platform_find_rootfspart "$partitions" "$kernelpart")
                local append=""
                [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
 
-               ( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \
-                 dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null ) | \
-                       mtd -r $append -F$kernelpart:$kern_length:$CI_LDADR,rootfs write - $partitions
+               if [ "$PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD" -ne 1 ]; then
+                   ( dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null; \
+                     dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null ) | \
+                           mtd -r $append -F$kernelpart:$kern_length:$CI_LDADR,rootfs write - $partitions
+               elif [ -n "$rootfspart" ]; then
+                   dd if="$1" bs=$CI_BLKSZ skip=1 count=$kern_blocks 2>/dev/null | \
+                           mtd write - $kernelpart
+                   dd if="$1" bs=$CI_BLKSZ skip=$((1+$kern_blocks)) count=$root_blocks 2>/dev/null | \
+                           mtd -r $append write - $rootfspart
+               fi
        fi
+       PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=0
 }
 
 tplink_get_image_hwid() {
@@ -318,6 +336,7 @@ platform_check_image() {
        ls-sr71|\
        pb42|\
        pb44|\
+       rb-941-2nd|\
        routerstation-pro|\
        routerstation|\
        wp543|\
@@ -473,6 +492,8 @@ platform_check_image() {
                tplink_pharos_check_image "$1" && return 0
                return 1
                ;;
+       a40|\
+       a60|\
        mr1750v2|\
        mr1750|\
        mr600v2|\
@@ -481,9 +502,11 @@ platform_check_image() {
        mr900|\
        om2p-hsv2|\
        om2p-hsv3|\
+       om2p-hsv4|\
        om2p-hs|\
        om2p-lc|\
        om2pv2|\
+       om2pv4|\
        om2p|\
        om5p-acv2|\
        om5p-ac|\
@@ -584,6 +607,8 @@ platform_pre_upgrade() {
        local board=$(ar71xx_board_name)
 
        case "$board" in
+       rb-941-2nd)
+               ;;
        rb*|\
        c-60|\
        nbg6716|\
@@ -618,6 +643,10 @@ platform_do_upgrade() {
        local board=$(ar71xx_board_name)
 
        case "$board" in
+       rb-941-2nd)
+               PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=1
+               platform_do_upgrade_combined "$ARGV"
+               ;;
        all0258n)
                platform_do_upgrade_allnet "0x9f050000" "$ARGV"
                ;;
@@ -644,6 +673,8 @@ platform_do_upgrade() {
        tew-673gru)
                platform_do_upgrade_dir825b "$ARGV"
                ;;
+       a40|\
+       a60|\
        mr1750v2|\
        mr1750|\
        mr600v2|\
@@ -652,9 +683,11 @@ platform_do_upgrade() {
        mr900|\
        om2p-hsv2|\
        om2p-hsv3|\
+       om2p-hsv4|\
        om2p-hs|\
        om2p-lc|\
        om2pv2|\
+       om2pv4|\
        om2p|\
        om5p-acv2|\
        om5p-ac|\