From 7a62e909b286250e310a649a4cbe11d65f802f78 Mon Sep 17 00:00:00 2001 From: Piotr Dymacz Date: Tue, 29 Oct 2019 23:25:56 +0100 Subject: [PATCH] ramips: support dual image feature on ALFA Network boards New U-Boot version for MediaTek MT76x8/MT762x based ALFA Network boards includes support for a 'dual image' feature. Users can enable it using U-Boot environment variable 'dual_image' ('1' -> enabled). When 'dual image' feature is enabled, U-Boot will modify DTB and divide the original 'firmware' flash area into two, equal in size and aligned to 64 KB partitions: 'firmware' and 'backup'. U-Boot will also adjust size of 'firmware' area to match installed flash chip size. U-Boot will load kernel from active partition which is marked with env variable 'bootactive' ('1' -> first partition, '2' -> second partition) and rename both partitions accordingly ('firmware' <-> 'backup'). There are 3 additional env variables used to control 'dual image' mode: - bootlimit - maximum number of unsuccessful boot tries (default: '3') - bootcount - current number of boot tries - bootchanged - flag which informs that active partition was changed; if it is set and 'bootcount' reaches 'bootlimit' value, U-Boot will start web-based recovery which then updates both partitions with provided image Signed-off-by: Piotr Dymacz (backported from commit bc173ddd8381b03dde8cc2e6c66d0cd392c62bbd) --- .../ramips/base-files/etc/init.d/bootcount | 13 ++++++++++--- .../ramips/base-files/lib/upgrade/platform.sh | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/target/linux/ramips/base-files/etc/init.d/bootcount b/target/linux/ramips/base-files/etc/init.d/bootcount index 0f260fa3fc..12326de0e3 100755 --- a/target/linux/ramips/base-files/etc/init.d/bootcount +++ b/target/linux/ramips/base-files/etc/init.d/bootcount @@ -5,8 +5,15 @@ START=99 start() { . /lib/functions.sh - local board=$(board_name) - if [ $board = "sk-wb8" ]; then + case $(board_name) in + alfa-network,ac1200rm|\ + alfa-network,awusfree1|\ + alfa-network,tube-e4g) + [ -n "$(fw_printenv bootcount bootchanged 2>/dev/null)" ] &&\ + echo -e "bootcount\nbootchanged\n" | /usr/sbin/fw_setenv -s - + ;; + sk-wb8) fw_setenv bootcount 0 - fi + ;; + esac } diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh index c4a09cb40e..eff2ba967c 100755 --- a/target/linux/ramips/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh @@ -5,6 +5,9 @@ PART_NAME=firmware REQUIRE_IMAGE_METADATA=1 +RAMFS_COPY_BIN='fw_printenv fw_setenv' +RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' + platform_check_image() { return 0 } @@ -36,6 +39,20 @@ platform_do_upgrade() { local board=$(board_name) case "$board" in + alfa-network,ac1200rm|\ + alfa-network,awusfree1|\ + alfa-network,tube-e4g) + [ "$(fw_printenv -n dual_image 2>/dev/null)" = "1" ] &&\ + [ -n "$(find_mtd_part backup)" ] && { + PART_NAME=backup + if [ "$(fw_printenv -n bootactive 2>/dev/null)" = "1" ]; then + fw_setenv bootactive 2 || exit 1 + else + fw_setenv bootactive 1 || exit 1 + fi + } + default_do_upgrade "$1" + ;; hc5962|\ r6220|\ netgear,r6350|\ -- 2.30.2