On 12/2/25 5:16 AM, Anshul Dalal via lists.yoctoproject.org wrote:
U-Boot uses the 'bootpart' env variable to configure the rootfs for the
kernel at boot. The BACKUP_REG0 MMR is also used to store bootcount as
per U-Boot requirements[1].

After each reset, U-Boot increments the bootcount and it's reset to 0 by
the swupdate service indicating a successful boot. If the kernel panics
however (eg. if the update failed), the bootcount is never reset and
keeps on getting incremented by U-Boot until it reaches certain
threshold after which U-Boot switches to the other non-updated partition
to ensure a successful boot.

This patch adds support for the same to the final .swu image generated
by the update-image recipe.

[1]: https://docs.u-boot.org/en/latest/api/bootcount.html

Signed-off-by: Anshul Dalal <[email protected]>
---
  .../recipes-swupdate/images/files/sw-description     | 12 ++++++++++++
  .../recipes-swupdate/libubootenv/files/fw_env.config |  5 +++++
  .../libubootenv/libubootenv_%.bbappend               | 10 ++++++++++
  .../recipes-swupdate/swupdate/files/defconfig        |  2 ++
  .../recipes-swupdate/swupdate/files/swupdate.sh      |  4 ++++
  .../recipes-swupdate/swupdate/swupdate_%.bbappend    |  2 ++
  6 files changed, 35 insertions(+)
  create mode 100644 
meta-arago-distro/recipes-swupdate/libubootenv/files/fw_env.config
  create mode 100644 
meta-arago-distro/recipes-swupdate/libubootenv/libubootenv_%.bbappend

diff --git a/meta-arago-distro/recipes-swupdate/images/files/sw-description 
b/meta-arago-distro/recipes-swupdate/images/files/sw-description
index 8dc4e2b2..241bc95c 100644
--- a/meta-arago-distro/recipes-swupdate/images/files/sw-description
+++ b/meta-arago-distro/recipes-swupdate/images/files/sw-description
@@ -15,6 +15,12 @@ software =
                                                compressed = "zlib";
                                        },
                                );
+                               uboot: (
+                                       {
+                                               name = "bootpart";
+                                               value = "0:1";
+                                       },
+                               );
                        };
copy2 : {
@@ -26,6 +32,12 @@ software =
                                                compressed = "zlib";
                                        },
                                );
+                               uboot: (
+                                       {
+                                               name = "bootpart";
+                                               value = "0:2";
+                                       },
+                               );
                        };
                };
        }
diff --git a/meta-arago-distro/recipes-swupdate/libubootenv/files/fw_env.config 
b/meta-arago-distro/recipes-swupdate/libubootenv/files/fw_env.config
new file mode 100644
index 00000000..57eec5fc
--- /dev/null
+++ b/meta-arago-distro/recipes-swupdate/libubootenv/files/fw_env.config
@@ -0,0 +1,5 @@
+# Describes the env location for U-Boot in the hw partition
+# Second entry indicates redundant env
+# Boot dev                     Offset          Size
+/dev/mmcblk0boot0      0x680000        0x20000
+/dev/mmcblk0boot0      0x6a0000        0x20000
diff --git 
a/meta-arago-distro/recipes-swupdate/libubootenv/libubootenv_%.bbappend 
b/meta-arago-distro/recipes-swupdate/libubootenv/libubootenv_%.bbappend
new file mode 100644
index 00000000..e3d142f2
--- /dev/null
+++ b/meta-arago-distro/recipes-swupdate/libubootenv/libubootenv_%.bbappend
@@ -0,0 +1,10 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+SRC_URI:append = " file://fw_env.config"
+
+do_install:append() {
+       install -d ${D}${sysconfdir}
+       install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}
+}
+
+FILES:${PN}:append = " ${sysconfdir}"
diff --git a/meta-arago-distro/recipes-swupdate/swupdate/files/defconfig 
b/meta-arago-distro/recipes-swupdate/swupdate/files/defconfig
index b1362eaa..4a2d78c0 100644
--- a/meta-arago-distro/recipes-swupdate/swupdate/files/defconfig
+++ b/meta-arago-distro/recipes-swupdate/swupdate/files/defconfig
@@ -1,8 +1,10 @@
  CONFIG_HW_COMPATIBILITY=y
  # CONFIG_LUA is not set
  # CONFIG_BOOTLOADER_NONE is not set
+CONFIG_UBOOT=y
  CONFIG_SYSTEMD=y
  CONFIG_WEBSERVER=y
+CONFIG_BOOTLOADERHANDLER=y
  CONFIG_CFI=y
  CONFIG_EMMC_HANDLER=y
  CONFIG_RAW=y
diff --git a/meta-arago-distro/recipes-swupdate/swupdate/files/swupdate.sh 
b/meta-arago-distro/recipes-swupdate/swupdate/files/swupdate.sh
index bb3a3593..2083062e 100644
--- a/meta-arago-distro/recipes-swupdate/swupdate/files/swupdate.sh
+++ b/meta-arago-distro/recipes-swupdate/swupdate/files/swupdate.sh
@@ -8,4 +8,8 @@ else
        SELECTION="-e stable,copy2"
  fi
+# BACKUP_REG0 MMR on AM62x
+UBOOT_BOOTCOUNT_ADDR=0x4301c100
+
+devmem2 $UBOOT_BOOTCOUNT_ADDR w 0

Yuck, magic memory locations and /dev/mem, I'm trying to get
rid of our dependence on /dev/mem in general so let's not add
to the problem. How about CONFIG_BOOTCOUNT_FS?

Or maybe store it in an EFI variable, look into efivarfs and
see if we can do something with that to allow usersapce access
to this count.

Andrew

  swupdate -H @MACHINE@:1.0 ${SELECTION} -p 'reboot' -f /etc/swupdate.cfg -w "-r 
/www -p 8080"
diff --git a/meta-arago-distro/recipes-swupdate/swupdate/swupdate_%.bbappend 
b/meta-arago-distro/recipes-swupdate/swupdate/swupdate_%.bbappend
index 0ce763f9..20f87435 100644
--- a/meta-arago-distro/recipes-swupdate/swupdate/swupdate_%.bbappend
+++ b/meta-arago-distro/recipes-swupdate/swupdate/swupdate_%.bbappend
@@ -2,6 +2,8 @@ inherit swupdate-lib
FILESEXTRAPATHS:append := "${THISDIR}/files:" +RDEPENDS:${PN} += "devmem2"
+
  FILES:${PN} += " \
    ${SWUPDATE_HW_COMPATIBILITY_FILE} \
  "



-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#16853): 
https://lists.yoctoproject.org/g/meta-arago/message/16853
Mute This Topic: https://lists.yoctoproject.org/mt/116574476/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/meta-arago/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to