mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
Merge patch series "bootstd: rauc: Small fixes"
Martin Schwan <m.schwan@phytec.de> says: Fix some small bugs that I noticed during testing. Link: https://lore.kernel.org/r/20250714-wip-bootmeth-rauc-fixes-v1-0-69d2b80e7606@phytec.de
This commit is contained in:
@@ -79,18 +79,17 @@ static int distro_rauc_check(struct udevice *dev, struct bootflow_iter *iter)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int distro_rauc_scan_boot_part(struct bootflow *bflow)
|
||||
static int distro_rauc_scan_parts(struct bootflow *bflow)
|
||||
{
|
||||
struct blk_desc *desc;
|
||||
struct distro_rauc_priv *priv;
|
||||
char *boot_order;
|
||||
const char **boot_order_list;
|
||||
bool exists;
|
||||
int ret;
|
||||
int i;
|
||||
int j;
|
||||
|
||||
desc = dev_get_uclass_plat(bflow->blk);
|
||||
if (bflow->blk)
|
||||
desc = dev_get_uclass_plat(bflow->blk);
|
||||
|
||||
priv = bflow->bootmeth_priv;
|
||||
if (!priv || !priv->slots)
|
||||
@@ -99,20 +98,21 @@ static int distro_rauc_scan_boot_part(struct bootflow *bflow)
|
||||
boot_order = env_get("BOOT_ORDER");
|
||||
boot_order_list = str_to_list(boot_order);
|
||||
for (i = 0; boot_order_list[i]; i++) {
|
||||
exists = false;
|
||||
for (j = 0; script_names[j]; j++) {
|
||||
const struct distro_rauc_slot *slot;
|
||||
const struct distro_rauc_slot *slot;
|
||||
|
||||
slot = get_slot(priv, boot_order_list[i]);
|
||||
if (!slot)
|
||||
return log_msg_ret("env", -ENOENT);
|
||||
slot = get_slot(priv, boot_order_list[i]);
|
||||
if (!slot)
|
||||
return log_msg_ret("slot", -EINVAL);
|
||||
if (desc) {
|
||||
ret = fs_set_blk_dev_with_part(desc, slot->boot_part);
|
||||
if (ret)
|
||||
return log_msg_ret("blk", ret);
|
||||
exists |= fs_exists(script_names[j]);
|
||||
return log_msg_ret("part", ret);
|
||||
fs_close();
|
||||
ret = fs_set_blk_dev_with_part(desc, slot->root_part);
|
||||
if (ret)
|
||||
return log_msg_ret("part", ret);
|
||||
fs_close();
|
||||
}
|
||||
if (!exists)
|
||||
return log_msg_ret("fs", -ENOENT);
|
||||
}
|
||||
str_free_list(boot_order_list);
|
||||
|
||||
@@ -168,20 +168,24 @@ static int distro_rauc_read_bootflow(struct udevice *dev, struct bootflow *bflow
|
||||
(slot = strsep(&boot_order_copy, " "));
|
||||
i++) {
|
||||
struct distro_rauc_slot *s;
|
||||
struct distro_rauc_slot **new_slots;
|
||||
|
||||
s = calloc(1, sizeof(struct distro_rauc_slot));
|
||||
s->name = strdup(slot);
|
||||
s->boot_part = simple_strtoul(strsep(&parts, ","), NULL, 10);
|
||||
s->root_part = simple_strtoul(strsep(&parts, ","), NULL, 10);
|
||||
priv->slots = realloc(priv->slots, (i + 1) *
|
||||
sizeof(struct distro_rauc_slot));
|
||||
new_slots = realloc(priv->slots, (i + 1) *
|
||||
sizeof(struct distro_rauc_slot));
|
||||
if (!new_slots)
|
||||
return log_msg_ret("buf", -ENOMEM);
|
||||
priv->slots = new_slots;
|
||||
priv->slots[i - 1] = s;
|
||||
priv->slots[i]->name = NULL;
|
||||
priv->slots[i] = NULL;
|
||||
}
|
||||
|
||||
bflow->bootmeth_priv = priv;
|
||||
|
||||
ret = distro_rauc_scan_boot_part(bflow);
|
||||
ret = distro_rauc_scan_parts(bflow);
|
||||
if (ret < 0) {
|
||||
for (i = 0; priv->slots[i]->name; i++) {
|
||||
free(priv->slots[i]->name);
|
||||
|
||||
Reference in New Issue
Block a user