On Wed, Aug 05, 2026 at 12:40:19PM +0100, Peter Robinson wrote: > Hi Gregor, > > On Tue, 4 Aug 2026 at 14:39, Gregor Herburger > <[email protected]> wrote: > > > > The Raspberry Pi has the "tryboot" feature where it can boot from a > > different partition enabling failsafe A/B updates. After boot the > > firmware sets 'partition' property in /chosen/bootloader. > > I think the title and this needs to be updated to cover the fact we're > now taking the whole chosen/bootloader/ branch of the tree not just > tryboot or partition. Agree will update. > > > Copy the /chosen/bootloader node to the device tree. > > > > Set the env variable boot_partition accordingly to allow boards to > > create a bootcmd based on the boot partition. > > > > Reviewed-by: Matthias Brugger <[email protected]> > Given the patch has changed quite a bit you should drop this review tag. Yes, was not sure. Will drop the tag. > > > Signed-off-by: Gregor Herburger <[email protected]> > > Tested-by: Peter Robinson <[email protected]> > > This works for me to copy all of bootloader/ so I'm adding a tested, I > think there's a few other minor bits needed. > > Thanks, > Peter > > > --- > > Changes in v3: > > - Copy the complete '/chosen/bootloader' node instead of only the > > partition property > > - Link to v2: > > https://patch.msgid.link/[email protected] > > > > Changes in v2: > > - update Reviewed-by tag > > --- > > board/raspberrypi/rpi/rpi.c | 51 > > +++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 51 insertions(+) > > > > diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c > > index 1da5df92351c..ba8a2c1ba4cf 100644 > > --- a/board/raspberrypi/rpi/rpi.c > > +++ b/board/raspberrypi/rpi/rpi.c > > @@ -480,6 +480,20 @@ static void set_serial_number(void) > > env_set("serial#", serial_string); > > } > > > > +static void set_boot_partition_fdt(void) > > +{ > > + void *fdtp = (void *)gd->fdt_blob; > > + u32 partition; > > + > > + partition = fdt_getprop_u32_default(fdtp, "/chosen/bootloader", > > "partition", 1); > > + if (!partition) { > > + printf("Failed to the get partition property.\n"); > > + return; > > + } > > + > > + env_set_ulong("boot_partition", partition); > > +} > > + > > int misc_init_r(void) > > { > > set_fdt_addr(); > > @@ -489,6 +503,7 @@ int misc_init_r(void) > > set_board_info(); > > #endif > > set_serial_number(); > > + set_boot_partition_fdt(); > > > > return 0; > > } > > @@ -579,6 +594,39 @@ int board_fdt_blob_setup(void **fdtp) > > return 0; > > } > > > > +int copy_node_all_properties(void *dst, void *src, const char *path, const > > char *node) > > Should we split this to two patches? > Yes, will split. > > +{ > > + int src_parent, dst_parent; > > + int src_node, dst_node; > > + int prop; > > + int len; > > + > > + src_parent = fdt_path_offset(src, path); > > + dst_parent = fdt_path_offset(dst, path); > > + if (src_parent < 0 || dst_parent < 0) > > + return -1; > > + > > + src_node = fdt_subnode_offset(src, src_parent, node); > > + if (src_node < 0) > > + return -1; > > + > > + dst_node = fdt_find_or_add_subnode(dst, dst_parent, node); > > + if (dst_node < 0) > > + return -1; > > + > > + fdt_for_each_property_offset(prop, src, src_node) { > > + const char *name; > > + const void *value = fdt_getprop_by_offset(src, prop, &name, > > &len); > > + > > + if (!value || !name) > > + continue; > > + > > + fdt_setprop(dst, dst_node, name, value, len); > > + } > > + > > + return 0; > > +} > > + > > int copy_property(void *dst, void *src, char *path, char *property) > > { > > int dst_offset, src_offset; > > @@ -641,6 +689,9 @@ void update_fdt_from_fw(void *fdt, void *fw_fdt) > > > > /* copy uart clk as provided by the firmware */ > > copy_property(fdt, fw_fdt, "/clocks/clk-uart", "clock-frequency"); > > + > > + /* Copy the bootloader node */ > > + copy_node_all_properties(fdt, fw_fdt, "/chosen", "bootloader"); > > } > > > > int ft_board_setup(void *blob, struct bd_info *bd) > > > > --- > > base-commit: baa64b2f892890f00a377eac4a3e685472bb56b5 > > change-id: 20260803-tryboot2-8c5221376e5a > > > > Best regards, > > -- > > Gregor Herburger <[email protected]> > >
-- Gregor Herburger Linutronix GmbH | Bahnhofstrasse 3 | D-88690 Uhldingen-Mühlhofen Phone: +49 7556 25 999 35; Fax.: +49 7556 25 999 99 Hinweise zum Datenschutz finden Sie hier (Informations on data privacy can be found here): https://linutronix.de/legal/data-protection.php Linutronix GmbH | Firmensitz (Registered Office): Uhldingen-Mühlhofen | Registergericht (Registration Court): Amtsgericht Freiburg i.Br., HRB700 806 | Geschäftsführer (Managing Directors): Dr. Wilfried Wessner, Katharina Kopp, Alexander Gieringer
