ath79: add support for jjPlus JA76PF2
[openwrt/openwrt.git] / target / linux / ath79 / base-files / lib / upgrade / platform.sh
index 60cc6a4fafe0ae33a31d6f2fc228406473191bf7..c2fe08154d9e297fc4c79443465257af0ef3290b 100644 (file)
@@ -3,39 +3,50 @@
 #
 
 PART_NAME=firmware
-RAMFS_COPY_BIN='nandwrite'
+REQUIRE_IMAGE_METADATA=1
 
-CI_BLKSZ=65536
-CI_LDADR=0x80060000
+redboot_fis_do_upgrade() {
+       local append
+       local sysup_file="$1"
+       local kern_part="$2"
+       local magic=$(get_magic_word "$sysup_file")
 
-PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=0
+       if [ "$magic" = "4349" ]; then
+               local kern_length=0x$(dd if="$sysup_file" bs=2 skip=1 count=4 2>/dev/null)
 
-platform_check_image() {
-       local board=$(board_name)
-       local magic="$(get_magic_word "$1")"
-       local magic_long="$(get_magic_long "$1")"
+               [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
+               dd if="$sysup_file" bs=64k skip=1 2>/dev/null | \
+                       mtd -r $append -F$kern_part:$kern_length:0x80060000,rootfs write - $kern_part:rootfs
 
-       [ "$#" -gt 1 ] && return 1
+       elif [ "$magic" = "7379" ]; then
+               local board_dir=$(tar tf $sysup_file | grep -m 1 '^sysupgrade-.*/$')
+               local kern_length=$(tar xf $sysup_file ${board_dir}kernel -O | wc -c)
 
-       case "$board" in
-       "ubnt,unifi")
-               [ "$magic" != "2705" ] && {
-                       echo "Invalid image type."
-                       return 1
-               }
+               [ -f "$CONF_TAR" -a "$SAVE_CONFIG" -eq 1 ] && append="-j $CONF_TAR"
+               tar xf $sysup_file ${board_dir}kernel ${board_dir}root -O | \
+                       mtd -r $append -F$kern_part:$kern_length:0x80060000,rootfs write - $kern_part:rootfs
 
-               return 0
-               ;;
-       esac
+       else
+               echo "Unknown image, aborting!"
+               return 1
+       fi
+}
 
-       echo "Sysupgrade is not yet supported on $board."
-       return 1
+platform_check_image() {
+       return 0
 }
 
 platform_do_upgrade() {
        local board=$(board_name)
 
        case "$board" in
+       jjplus,ja76pf2)
+               redboot_fis_do_upgrade "$ARGV" linux
+               ;;
+       ubnt,routerstation|\
+       ubnt,routerstation-pro)
+               redboot_fis_do_upgrade "$ARGV" kernel
+               ;;
        *)
                default_do_upgrade "$ARGV"
                ;;