mediatek: mt7622: check firmware metadata
[openwrt/staging/rmilecki.git] / target / linux / mediatek / mt7622 / base-files / lib / upgrade / platform.sh
1 REQUIRE_IMAGE_METADATA=1
2 RAMFS_COPY_BIN='fw_printenv fw_setenv blockdev'
3 RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
4
5 get_cmdline_var() {
6 local var=$1
7 local cmdlinevar tmp
8 local cmdline="$(cat /proc/cmdline)"
9
10 for cmdlinevar in $cmdline; do
11 tmp=${cmdlinevar##${var}}
12 [ "=" = "${tmp:0:1}" ] && echo ${tmp:1}
13 done
14 }
15
16 get_rootdev() {
17 local rootvol rootdev
18 rootvol=$(get_cmdline_var root)
19 rootvol=$(basename $rootvol)
20 [ -e /sys/class/block/$rootvol ] || {
21 rootvol=${rootvol%%[0-9]}
22 [ -e /sys/class/block/$rootvol ] && echo $rootvol
23 rootvol=${rootvol%%p}
24 [ -e /sys/class/block/$rootvol ] && echo $rootvol
25 return
26 }
27 [ -e /sys/class/block/$rootvol/partition ] || {
28 echo $rootvol
29 return
30 }
31 rootdev=$(busybox readlink -f /sys/class/block/$rootvol)
32 rootdev=$(basename ${rootdev%%/${rootvol}})
33 [ -e /sys/class/block/$rootdev ] && echo $rootdev
34 }
35
36 get_partition() {
37 for partname in /sys/class/block/$1/*/name; do
38 [ "$(cat ${partname})" = "$2" ] && {
39 basename ${partname%%/name}
40 break
41 }
42 done
43 }
44
45 platform_do_upgrade() {
46 local board=$(board_name)
47 local file_type=$(identify $1)
48
49 case "$board" in
50 bananapi,bpi-r64)
51 local rootdev=$(get_rootdev)
52 local fitpart=$(get_partition $rootdev production)
53 [ "$fitpart" ] || exit 1
54 dd if=/dev/zero of=/dev/$fitpart bs=4096 count=1 2>/dev/null
55 blockdev --rereadpt /dev/$rootdev
56 get_image "$1" | dd of=/dev/$fitpart
57 echo $rootdev > /tmp/sysupgrade.rootdev
58 ;;
59 linksys,e8450-ubi|\
60 mediatek,mt7622,ubi)
61 CI_KERNPART="fit"
62 nand_do_upgrade "$1"
63 ;;
64 linksys,e8450)
65 if grep -q mtdparts=slave /proc/cmdline; then
66 PART_NAME=firmware2
67 else
68 PART_NAME=firmware1
69 fi
70 default_do_upgrade "$1"
71 ;;
72 *)
73 default_do_upgrade "$1"
74 ;;
75 esac
76 }
77
78 PART_NAME=firmware
79
80 platform_check_image() {
81 local board=$(board_name)
82 local magic="$(get_magic_long "$1")"
83
84 [ "$#" -gt 1 ] && return 1
85
86 case "$board" in
87 *)
88 [ "$magic" != "d00dfeed" ] && {
89 echo "Invalid image type."
90 return 1
91 }
92 return 0
93 ;;
94 esac
95
96 return 0
97 }
98
99 platform_copy_config_mmc() {
100 [ -e "$UPGRADE_BACKUP" ] || return
101 local rootdev=$(cat /tmp/sysupgrade.rootdev)
102 blockdev --rereadpt /dev/$rootdev
103 local datadev=$(get_partition $rootdev rootfs_data)
104 [ "$datadev" ] || echo "no rootfs_data partition, cannot keep configuration." >&2
105 dd if="$UPGRADE_BACKUP" of=/dev/$datadev
106 sync
107 }
108
109 platform_copy_config() {
110 case "$(board_name)" in
111 bananapi,bpi-r64)
112 platform_copy_config_mmc
113 ;;
114 esac
115 }