From 97747a95eaa1efc4f76b200d1830d52ab5ccd685 Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 18 Oct 2023 16:24:29 +0200 Subject: [PATCH] common/uboot: Use factory-reset and dev-mode buttons, if available If the bootloader knows about a factory-reset or dev-mode button, use them to allow stopping the boot process, and to signal the factory-reset condition to infix. --- board/common/uboot/env.dtsi | 6 +++++- board/common/uboot/scripts/ixbootslot.sh | 6 ++++++ board/common/uboot/scripts/ixbtn.sh | 13 +++++++++++++ board/common/uboot/scripts/ixdevmode.sh | 3 +++ board/common/uboot/scripts/ixfactory.sh | 7 +++++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 board/common/uboot/scripts/ixbtn.sh create mode 100644 board/common/uboot/scripts/ixdevmode.sh create mode 100644 board/common/uboot/scripts/ixfactory.sh diff --git a/board/common/uboot/env.dtsi b/board/common/uboot/env.dtsi index 3b7ecd77..00323bc7 100644 --- a/board/common/uboot/env.dtsi +++ b/board/common/uboot/env.dtsi @@ -8,9 +8,13 @@ &env { vendor = "infix"; bootdelay = "-2"; - bootcmd = "run ixboot"; + bootcmd = "run ixbtn"; boot_targets = "virtio mmc"; + ixbtn = /incbin/("scripts/ixbtn.sh"); + ixdevmode = /incbin/("scripts/ixdevmode.sh"); + ixfactory = /incbin/("scripts/ixfactory.sh"); + ixbtn = /incbin/("scripts/ixbtn.sh"); ixboot = /incbin/("scripts/ixboot.sh"); ixbootmedia = /incbin/("scripts/ixbootmedia.sh"); ixbootslot = /incbin/("scripts/ixbootslot.sh"); diff --git a/board/common/uboot/scripts/ixbootslot.sh b/board/common/uboot/scripts/ixbootslot.sh index dd26ff78..a5628626 100644 --- a/board/common/uboot/scripts/ixbootslot.sh +++ b/board/common/uboot/scripts/ixbootslot.sh @@ -15,6 +15,12 @@ if test "${prepared}" = "ok"; then echo "${slot}: Booting..." setenv bootargs_user "rauc.slot=${slot}" + if test "${factory_reset}" = "yes"; then + setenv bootargs_user "${bootargs_user} finit.cond=factory-reset" + fi + if test "${dev_mode}" = "yes"; then + setenv bootargs_user "${bootargs_user} finit.cond=dev-mode" + fi blkmap create boot blkmap get boot dev blkmapnum diff --git a/board/common/uboot/scripts/ixbtn.sh b/board/common/uboot/scripts/ixbtn.sh new file mode 100644 index 00000000..6d631c08 --- /dev/null +++ b/board/common/uboot/scripts/ixbtn.sh @@ -0,0 +1,13 @@ +setenv dev_mode no +setenv factory_reset no + +echo -n "dev-mode: " +run ixdevmode +echo -n "factory-reset: " +run ixfactory + +if test "${dev_mode}" = "yes"; then + sleep 1 && run ixboot +else + run ixboot +fi diff --git a/board/common/uboot/scripts/ixdevmode.sh b/board/common/uboot/scripts/ixdevmode.sh new file mode 100644 index 00000000..6f0f12b0 --- /dev/null +++ b/board/common/uboot/scripts/ixdevmode.sh @@ -0,0 +1,3 @@ +if button dev-mode; then + setenv dev_mode yes +fi diff --git a/board/common/uboot/scripts/ixfactory.sh b/board/common/uboot/scripts/ixfactory.sh new file mode 100644 index 00000000..154b2558 --- /dev/null +++ b/board/common/uboot/scripts/ixfactory.sh @@ -0,0 +1,7 @@ +if button factory-reset; then + echo "Keep button pressed for 10 seconds to engage reset" + if sleep 10 && button factory-reset; then + setenv factory_reset yes + echo "FACTORY RESET ENGAGED" + fi +fi