aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ath79/nand/base-files/lib/upgrade/glinet.sh
blob: 86729f8f2a44117ac73da0c6d726b0ac75910b97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2019 Jeff Kletsky
#

glinet_using_boot_dev_switch() {
	if [ "$(fw_printenv -n boot_dev 2>/dev/null)" = "on" ] ; then
		>&2 echo "NOTE: boot_dev=on; use switch to control boot partition"
		true
	else
		false
	fi
}

glinet_set_next_boot_nand() {
	mkdir -p /var/lock
	! glinet_using_boot_dev_switch && \
		fw_setenv bootcount 0 &&  \
		>&2 echo "Next boot set for NAND"
}

glinet_set_next_boot_nor() {
	mkdir -p /var/lock
	! glinet_using_boot_dev_switch && \
		fw_setenv bootcount 3 &&  \
		>&2 echo "Next boot set for NOR"
}

glinet_nand_nor_do_upgrade() {
	set_next_boot_nand() { glinet_set_next_boot_nand; }
	set_next_boot_nor() { glinet_set_next_boot_nor; }
	nand_nor_do_upgrade "$1"
}

nand_nor_do_upgrade() {
	local upgrade_file="$1"

	local pn
	local found=""
	local err

	case "$(get_magic_long "$upgrade_file")" in

	"27051956")	# U-Boot Image Magic

		for pn in "nor_${PART_NAME}" "$PART_NAME" ; do		# firmware
			if [ "$(find_mtd_index "$pn")" ] ; then
				PART_NAME="$pn"
				found="yes"
				break
			fi
		done
		if [ "$found" = "yes" ] ; then
			>&2 echo "Running NOR upgrade"
			default_do_upgrade "$upgrade_file"
			# At this time, default_do_upgrade() exits on error
			type set_next_boot_nor >/dev/null && set_next_boot_nor
		else
			>&2 echo "ERROR: UPGRADE FAILED: Unable to locate '$PART_NAME' or 'nor_${PART_NAME}'"
			exit 1
		fi
		;;

	*)	# otherwise a file that nand_do_upgrade can process

		for pn in "nand_${CI_KERNPART}" "$CI_KERNPART" ; do	# kernel
			if [ "$(find_mtd_index "$pn")" ] ; then
				CI_KERNPART="$pn"
				break
			fi
		done
		for pn in "nand_${CI_UBIPART}" "$CI_UBIPART" ; do	# ubi
			if [ "$(find_mtd_index "$pn")" ] ; then
				CI_UBIPART="$pn"
				break
			fi
		done
		for pn in "nand_${CI_ROOTPART}" "$CI_ROOTPART" ; do	#rootfs
			if [ "$(find_mtd_index "$pn")" ] ; then
				CI_ROOTPART="$pn"
				break
			fi
		done
		>&2 echo "Running NAND upgrade"
		# TODO: change order when NAND upgrade offers return
		type set_next_boot_nand >/dev/null && set_next_boot_nand
		nand_do_upgrade "$upgrade_file"
		;;
	esac
}