aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ath79/nand/base-files/lib/upgrade/glinet.sh
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ath79/nand/base-files/lib/upgrade/glinet.sh')
-rw-r--r--target/linux/ath79/nand/base-files/lib/upgrade/glinet.sh90
1 files changed, 90 insertions, 0 deletions
diff --git a/target/linux/ath79/nand/base-files/lib/upgrade/glinet.sh b/target/linux/ath79/nand/base-files/lib/upgrade/glinet.sh
new file mode 100644
index 0000000000..86729f8f2a
--- /dev/null
+++ b/target/linux/ath79/nand/base-files/lib/upgrade/glinet.sh
@@ -0,0 +1,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
+}