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. Copy this property to the device tree and set the env variable boot_partition. This allows boards to create a bootcmd based on the boot partition.
Signed-off-by: Gregor Herburger <[email protected]> --- board/raspberrypi/rpi/rpi.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c index 1da5df92351..7a2ff646ac8 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; } @@ -641,6 +656,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 boot partition */ + copy_property(fdt, fw_fdt, "/chosen/bootloader", "partition"); } int ft_board_setup(void *blob, struct bd_info *bd) --- base-commit: ee5d46b45ec0c63f8f9dd1e816e0dac3452ccc3d change-id: 20260708-tryboot-c11aa44bf1cc Best regards, -- Gregor Herburger <[email protected]>

