[PATCH 3/7] bbu: add flag for enabling eMMC boot ack

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



bbu_mmcboot_handler() already takes care to switch $mmc.boot to the
freshly read inactive partition. On some SoCs like the STM32MP1, this is
not enough, but the boot ack bit must be set as well, so the BootROM can
communicate with the eMMC.

Have this happen as part of the eMMC boot switch after a successful
update if bbu_data::flags has BBU_FLAG_MMC_BOOT_ACK set.

Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx>
---
 common/bbu.c  | 17 ++++++++++++++++-
 include/bbu.h |  1 +
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/common/bbu.c b/common/bbu.c
index 4d92d70ff9e3..26b997c02ed1 100644
--- a/common/bbu.c
+++ b/common/bbu.c
@@ -310,7 +310,7 @@ int bbu_mmcboot_handler(struct bbu_handler *handler, struct bbu_data *data,
 {
 	struct bbu_data _data = *data;
 	int ret;
-	char *devicefile = NULL, *bootpartvar = NULL;
+	char *devicefile = NULL, *bootpartvar = NULL, *bootackvar = NULL;
 	const char *bootpart;
 	const char *devname = devpath_to_name(data->devicefile);
 
@@ -346,10 +346,25 @@ int bbu_mmcboot_handler(struct bbu_handler *handler, struct bbu_data *data,
 	if (ret < 0)
 		goto out;
 
+	/*
+	 * This flag can be set in the chained handler or by
+	 * bbu_mmcboot_handler's caller
+	 */
+	if ((_data.flags | data->flags) & BBU_FLAG_MMC_BOOT_ACK) {
+		ret = asprintf(&bootackvar, "%s.boot_ack", devname);
+		if (ret < 0)
+			goto out;
+
+		ret = setenv(bootackvar, "1");
+		if (ret)
+			goto out;
+	}
+
 	/* on success switch boot source */
 	ret = setenv(bootpartvar, bootpart);
 
 out:
+	free(bootackvar);
 	free(devicefile);
 	free(bootpartvar);
 
diff --git a/include/bbu.h b/include/bbu.h
index bf5f2158df72..bd19fa187faf 100644
--- a/include/bbu.h
+++ b/include/bbu.h
@@ -10,6 +10,7 @@
 struct bbu_data {
 #define BBU_FLAG_FORCE	(1 << 0)
 #define BBU_FLAG_YES	(1 << 1)
+#define BBU_FLAG_MMC_BOOT_ACK	(1 << 2)
 	unsigned long flags;
 	int force;
 	const void *image;
-- 
2.30.2


_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux