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
 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} \
 "
-- 
2.52.0



-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#16850): 
https://lists.yoctoproject.org/g/meta-arago/message/16850
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