[PATCH] rpi: copy /chosen/bootloader partition and set boot_partition
Gregor Herburger
gregor.herburger at linutronix.de
Wed Jul 8 08:30:11 CEST 2026
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 <gregor.herburger at linutronix.de>
---
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 <gregor.herburger at linutronix.de>
More information about the U-Boot
mailing list