[PATCH v2] rpi: copy /chosen/bootloader partition and set boot_partition

Gregor Herburger <[email protected]> Mon, 03 Aug 2026 13:28:40 +0200
Newsgroups gmane.comp.boot-loaders.u-boot
Message-ID <[email protected]>
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.

Reviewed-by: Matthias Brugger <[email protected]>
Signed-off-by: Gregor Herburger <[email protected]>
---
Changes in v2:
- update Reviewed-by tag
---
 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 1da5df92351c..7a2ff646ac8c 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: baa64b2f892890f00a377eac4a3e685472bb56b5
change-id: 20260803-tryboot2-8c5221376e5a

Best regards,
--  
Gregor Herburger <[email protected]>