0debff28bb6ab4283c804e99ef51e7fda22e043b
[oweals/openwrt.git] / target / linux / bcm63xx / base-files / lib / upgrade / platform.sh
1 PART_NAME=linux
2 REQUIRE_IMAGE_METADATA=0
3
4 platform_check_image() {
5         [ "$#" -gt 1 ] && return 1
6
7         case "$(board_name)" in
8                 comtrend,vr-3032u)
9                         # NAND sysupgrade
10                         return 0
11                         ;;
12         esac
13
14         case "$(get_magic_word "$1")" in
15                 3600|3700|3800)
16                         # CFE tag versions
17                         return 0
18                         ;;
19                 *)
20                         echo "Invalid image type. Please use only .bin files"
21                         return 1
22                         ;;
23         esac
24 }
25
26 cfe_jffs2_upgrade_tar() {
27         local tar_file="$1"
28         local kernel_mtd="$(find_mtd_index $CI_KERNPART)"
29
30         if [ -z "$kernel_mtd" ]; then
31                 echo "$CI_KERNPART partition not found"
32                 return 1
33         fi
34
35         local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
36         board_dir=${board_dir%/}
37
38         local kernel_length=$(tar xf $tar_file ${board_dir}/kernel -O | wc -c 2> /dev/null)
39         local rootfs_length=$(tar xf $tar_file ${board_dir}/root -O | wc -c 2> /dev/null)
40
41         if [ "$kernel_length" = 0 ]; then
42                 echo "kernel cannot be empty"
43                 return 1
44         fi
45
46         flash_erase -j /dev/mtd${kernel_mtd} 0 0
47         tar xf $tar_file ${board_dir}/kernel -O | nandwrite /dev/mtd${kernel_mtd} -
48
49         local rootfs_type="$(identify_tar "$tar_file" ${board_dir}/root)"
50
51         nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "0" "0"
52
53         local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
54
55         local root_ubivol="$(nand_find_volume $ubidev $CI_ROOTPART)"
56         tar xf $tar_file ${board_dir}/root -O | \
57                 ubiupdatevol /dev/$root_ubivol -s $rootfs_length -
58
59         nand_do_upgrade_success
60 }
61
62 platform_do_upgrade() {
63         case "$(board_name)" in
64                 comtrend,vr-3032u)
65                         REQUIRE_IMAGE_METADATA=1
66                         cfe_jffs2_upgrade_tar "$1"
67                         ;;
68                 *)
69                         default_do_upgrade "$1"
70                         ;;
71         esac
72 }