summaryrefslogtreecommitdiff
path: root/boot/bootmeth-uclass.c
diff options
context:
space:
mode:
authorMartyn Welch <martyn.welch@collabora.com>2024-10-09 14:15:40 +0100
committerTom Rini <trini@konsulko.com>2024-10-15 10:24:27 -0600
commit3809fd35a5dbdbd62043ba0a72c3f37f58e69f9d (patch)
treeb7a3cbf6da74d598d2e8529aaf18a30ce3ccba57 /boot/bootmeth-uclass.c
parent8ba82a91b3aa615fb6148ecfa2af4e91a28659ae (diff)
bootstd: Add command to enable setting of bootmeth specific properties
We have previously added logic to allow a "fallback" option to be specified in the extlinux configuration. Provide a command that allows us to set this as the preferred default option when booting. Combined with the bootcount functionality, this allows the "altbootcmd" to provide a means of falling back to a previously known good state after a failed update. For example, if "bootcmd" is set to: bootflow scan -lb We would set "altbootcmd" to: bootmeth set extlinux fallback 1; bootflow scan -lb Causing the boot process to boot from the fallback option. Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Martyn Welch <martyn.welch@collabora.com>
Diffstat (limited to 'boot/bootmeth-uclass.c')
-rw-r--r--boot/bootmeth-uclass.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/boot/bootmeth-uclass.c b/boot/bootmeth-uclass.c
index c0abadef97c..5b5fea39b3b 100644
--- a/boot/bootmeth-uclass.c
+++ b/boot/bootmeth-uclass.c
@@ -251,6 +251,31 @@ int bootmeth_set_order(const char *order_str)
return 0;
}
+int bootmeth_set_property(const char *name, const char *property, const char *value)
+{
+ int ret;
+ int len;
+ struct udevice *dev;
+ const struct bootmeth_ops *ops;
+
+ len = strlen(name);
+
+ ret = uclass_find_device_by_namelen(UCLASS_BOOTMETH, name, len,
+ &dev);
+ if (ret) {
+ printf("Unknown bootmeth '%s'\n", name);
+ return ret;
+ }
+
+ ops = bootmeth_get_ops(dev);
+ if (!ops->set_property) {
+ printf("set_property not found\n");
+ return -ENODEV;
+ }
+
+ return ops->set_property(dev, property, value);
+}
+
int bootmeth_setup_fs(struct bootflow *bflow, struct blk_desc *desc)
{
int ret;