summaryrefslogtreecommitdiff
path: root/boot/bootmeth_rauc.c
diff options
context:
space:
mode:
Diffstat (limited to 'boot/bootmeth_rauc.c')
-rw-r--r--boot/bootmeth_rauc.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/boot/bootmeth_rauc.c b/boot/bootmeth_rauc.c
index cc6180221ed..81a73046e83 100644
--- a/boot/bootmeth_rauc.c
+++ b/boot/bootmeth_rauc.c
@@ -52,6 +52,18 @@ struct distro_rauc_priv {
struct distro_rauc_slot **slots;
};
+static void distro_rauc_priv_free(struct distro_rauc_priv *priv)
+{
+ int i;
+
+ for (i = 0; priv->slots[i]; i++) {
+ free(priv->slots[i]->name);
+ free(priv->slots[i]);
+ }
+ free(priv->slots);
+ free(priv);
+}
+
static struct distro_rauc_slot *get_slot(struct distro_rauc_priv *priv,
const char *slot_name)
{
@@ -187,13 +199,8 @@ static int distro_rauc_read_bootflow(struct udevice *dev, struct bootflow *bflow
ret = distro_rauc_scan_parts(bflow);
if (ret < 0) {
- for (i = 0; priv->slots[i]->name; i++) {
- free(priv->slots[i]->name);
- free(priv->slots[i]);
- }
- free(priv);
+ distro_rauc_priv_free(priv);
free(boot_order_copy);
- bflow->bootmeth_priv = NULL;
return ret;
}
@@ -402,6 +409,8 @@ static int distro_rauc_boot(struct udevice *dev, struct bootflow *bflow)
if (ret)
return log_msg_ret("boot", ret);
+ distro_rauc_priv_free(priv);
+
return 0;
}
@@ -410,7 +419,7 @@ static int distro_rauc_bootmeth_bind(struct udevice *dev)
struct bootmeth_uc_plat *plat = dev_get_uclass_plat(dev);
plat->desc = "RAUC distro boot from MMC";
- plat->flags = BOOTMETHF_GLOBAL;
+ plat->flags = BOOTMETHF_ANY_PART;
return 0;
}