ar71xx: add support for MikroTik hAP ac
[openwrt/staging/wigyori.git] / target / linux / ar71xx / base-files / lib / upgrade / platform.sh
index 6341a317910a273e9c5bde1e2b506e23e8ad766e..7a0bbb63b4314b83a3a2ae7286cc813680035c19 100755 (executable)
@@ -7,10 +7,13 @@
 
 PART_NAME=firmware
 RAMFS_COPY_DATA=/lib/ar71xx.sh
+[ -x /usr/sbin/nandwrite ] && RAMFS_COPY_BIN=/usr/sbin/nandwrite
 
 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
@@ -40,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#*:}")
@@ -53,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() {
@@ -164,6 +183,15 @@ alfa_check_image() {
        return 0
 }
 
+platform_nand_board_name() {
+       local board=$(ar71xx_board_name)
+
+       case "$board" in
+       rb*) echo "routerboard";;
+       *) echo "$board";;
+       esac
+}
+
 platform_check_image() {
        local board=$(ar71xx_board_name)
        local magic="$(get_magic_word "$1")"
@@ -176,7 +204,10 @@ platform_check_image() {
        airgateway|\
        airrouter|\
        ap132|\
+       ap531b0|\
        ap90q|\
+       archer-c59-v1|\
+       archer-c60-v1|\
        bullet-m|\
        c-55|\
        carambola2|\
@@ -203,6 +234,7 @@ platform_check_image() {
        dlan-pro-500-wp|\
        dr531|\
        dragino2|\
+       ebr-2310-c1|\
        epg5000|\
        esr1750|\
        esr900|\
@@ -216,16 +248,21 @@ platform_check_image() {
        hiwifi-hc6361|\
        hornet-ub-x2|\
        jwap230|\
+       lima|\
        loco-m-xw|\
        mzk-w04nu|\
        mzk-w300nh|\
        nanostation-m-xw|\
        nanostation-m|\
        nbg460n_550n_550nh|\
+       pqi-air-pen|\
        rocket-m-ti|\
        rocket-m-xw|\
        rocket-m|\
        rw2458n|\
+       sc1750|\
+       sc300m|\
+       sc450|\
        sr3200|\
        tew-632brp|\
        tew-712br|\
@@ -366,6 +403,7 @@ platform_check_image() {
        tl-wa801nd-v3|\
        tl-wa830re-v2|\
        tl-wa850re|\
+       tl-wa850re-v2|\
        tl-wa860re|\
        tl-wa901nd-v2|\
        tl-wa901nd-v3|\
@@ -388,6 +426,7 @@ platform_check_image() {
        tl-wr741nd-v4|\
        tl-wr741nd|\
        tl-wr802n-v1|\
+       tl-wr802n-v2|\
        tl-wr810n|\
        tl-wr841n-v11|\
        tl-wr841n-v1|\
@@ -443,6 +482,36 @@ platform_check_image() {
        tew-673gru)
                dir825b_check_image "$1" && return 0
                ;;
+       rb-411|\
+       rb-411u|\
+       rb-433|\
+       rb-433u|\
+       rb-435g|\
+       rb-450|\
+       rb-450g|\
+       rb-493|\
+       rb-493g|\
+       rb-750|\
+       rb-750gl|\
+       rb-751|\
+       rb-751g|\
+       rb-911g-2hpnd|\
+       rb-911g-5hpnd|\
+       rb-911g-5hpacd|\
+       rb-912uag-2hpnd|\
+       rb-912uag-5hpnd|\
+       rb-951g-2hnd|\
+       rb-951ui-2hnd|\
+       rb-2011l|\
+       rb-2011uas|\
+       rb-2011uias|\
+       rb-2011uas-2hnd|\
+       rb-2011uias-2hnd|\
+       rb-sxt2n|\
+       rb-sxt5n)
+               nand_do_platform_check routerboard $1
+               return $?
+               ;;
        c-60|\
        nbg6716|\
        r6100|\
@@ -459,6 +528,8 @@ platform_check_image() {
                tplink_pharos_check_image "$1" && return 0
                return 1
                ;;
+       a40|\
+       a60|\
        mr1750v2|\
        mr1750|\
        mr600v2|\
@@ -467,9 +538,11 @@ platform_check_image() {
        mr900|\
        om2p-hsv2|\
        om2p-hsv3|\
+       om2p-hsv4|\
        om2p-hs|\
        om2p-lc|\
        om2pv2|\
+       om2pv4|\
        om2p|\
        om5p-acv2|\
        om5p-ac|\
@@ -560,6 +633,17 @@ platform_check_image() {
 
                return 0;
                ;;
+       # these boards use metadata images
+       rb-750-r2|\
+       rb-750up-r2|\
+       rb-941-2nd|\
+       rb-951ui-2nd|\
+       rb-952ui-5ac2nd|\
+       rb-962uigs-5hact2hnt|\
+       rb-lhg-5nd|\
+       rb-mapl-2nd)
+               return 0
+               ;;
        esac
 
        echo "Sysupgrade is not yet supported on $board."
@@ -573,10 +657,48 @@ platform_pre_upgrade() {
        c-60|\
        nbg6716|\
        r6100|\
+       rb-411|\
+       rb-411u|\
+       rb-433|\
+       rb-433u|\
+       rb-435g|\
+       rb-450|\
+       rb-450g|\
+       rb-493|\
+       rb-493g|\
+       rb-750|\
+       rb-750gl|\
+       rb-751|\
+       rb-751g|\
+       rb-911g-2hpnd|\
+       rb-911g-5hpnd|\
+       rb-911g-5hpacd|\
+       rb-912uag-2hpnd|\
+       rb-912uag-5hpnd|\
+       rb-951g-2hnd|\
+       rb-951ui-2hnd|\
+       rb-2011l|\
+       rb-2011uas|\
+       rb-2011uias|\
+       rb-2011uas-2hnd|\
+       rb-2011uias-2hnd|\
+       rb-sxt2n|\
+       rb-sxt5n|\
        wndr3700v4|\
        wndr4300)
                nand_do_upgrade "$1"
                ;;
+       rb-750-r2|\
+       rb-750up-r2|\
+       rb-941-2nd|\
+       rb-951ui-2nd|\
+       rb-952ui-5ac2nd|\
+       rb-962uigs-5hact2hnt|\
+       rb-lhg-5nd|\
+       rb-mapl-2nd)
+               # erase firmware if booted from initramfs
+               [ -z "$(rootfs_type)" ] && mtd erase firmware
+               ;;
        mr18|\
        z1)
                merakinand_do_upgrade "$1"
@@ -584,6 +706,21 @@ platform_pre_upgrade() {
        esac
 }
 
+platform_nand_pre_upgrade() {
+       local board=$(ar71xx_board_name)
+
+       case "$board" in
+       rb*)
+               CI_KERNPART=none
+               local fw_mtd=$(find_mtd_part kernel)
+               fw_mtd="${fw_mtd/block/}"
+               [ -n "$fw_mtd" ] || return
+               mtd erase kernel
+               tar xf "$1" sysupgrade-routerboard/kernel -O | nandwrite -o "$fw_mtd" -
+               ;;
+       esac
+}
+
 platform_do_upgrade() {
        local board=$(ar71xx_board_name)
 
@@ -614,6 +751,8 @@ platform_do_upgrade() {
        tew-673gru)
                platform_do_upgrade_dir825b "$ARGV"
                ;;
+       a40|\
+       a60|\
        mr1750v2|\
        mr1750|\
        mr600v2|\
@@ -622,9 +761,11 @@ platform_do_upgrade() {
        mr900|\
        om2p-hsv2|\
        om2p-hsv3|\
+       om2p-hsv4|\
        om2p-hs|\
        om2p-lc|\
        om2pv2|\
+       om2pv4|\
        om2p|\
        om5p-acv2|\
        om5p-ac|\