* [PATCH v4 0/4] firmware: raspberrypi: Add support for the tryboot mode
@ 2026-09-04 7:46 Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 1/4] firmware: raspberrypi: reorder rpi_firmware_property_tag enum Gregor Herburger
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Gregor Herburger @ 2026-09-04 7:46 UTC (permalink / raw)
To: Florian Fainelli, Broadcom internal kernel review list, Ray Jui,
Scott Branden, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Eric Anholt, Stefan Wahren
Cc: linux-rpi-kernel, linux-arm-kernel, linux-kernel, devicetree,
Gregor Herburger, Krzysztof Kozlowski
This adds support for the tryboot mode on Raspberry Pis. As there is no
documentation other than the downstream implementation [0] the
implementation is based on this.
I tested this on Raspberry Pi 5 and therefore I only added the
properties to this devicetree. But afaik this should work on all
Raspberry Pis. I will add it to the correspondings dts if I get some
hardware to test it.
[0] https://github.com/raspberrypi/linux/commit/eb56da0c1925c07e8929ce4c9fe8aeafa7cb8c7b
---
Changes in v4:
- fix use-after-free error by moving devm_add_action_or_reset before devm_add_action_or_reset
- Rebase onto v7.3-rc1
- Link to v3: https://patch.msgid.link/20260707-rpi-tryboot-v3-0-fda82fe7ed76@linutronix.de
Changes in v3:
- fix use-after-free error by using devm_add_action_or_reset
- ensure endianness of magic byte
- refactor reboot mode registration into separate function
- Link to v2: https://patch.msgid.link/20260630-rpi-tryboot-v2-0-f68d2dc6aa27@linutronix.de
Changes in v2:
- Remove unnecessary reboot_mode_unregister().
- dt-binding: restrict to mode-{normal,tryboot} and only allow 32bit value.
- Link to v1: https://patch.msgid.link/20260626-rpi-tryboot-v1-0-490b1c4c4970@linutronix.de
---
Gregor Herburger (4):
firmware: raspberrypi: reorder rpi_firmware_property_tag enum
dt-bindings: raspberrypi,bcm2835-firmware: Include 'reboot-mode.yaml'
firmware: raspberrypi: Add reboot mode support
arm64: dts: broadcom: bcm2712: Add reboot modes to firmware node
.../arm/bcm/raspberrypi,bcm2835-firmware.yaml | 9 +++++
.../boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi | 2 ++
drivers/firmware/Kconfig | 2 ++
drivers/firmware/raspberrypi.c | 40 +++++++++++++++++++---
include/soc/bcm2835/raspberrypi-firmware.h | 22 ++++++------
5 files changed, 60 insertions(+), 15 deletions(-)
---
base-commit: cee9395acd8043be0644b25c34bfa86623f2b935
change-id: 20260623-rpi-tryboot-4292c92b0727
Best regards,
--
Gregor Herburger <gregor.herburger@linutronix.de>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 1/4] firmware: raspberrypi: reorder rpi_firmware_property_tag enum
2026-09-04 7:46 [PATCH v4 0/4] firmware: raspberrypi: Add support for the tryboot mode Gregor Herburger
@ 2026-09-04 7:46 ` Gregor Herburger
2026-09-04 7:51 ` sashiko-bot
2026-09-04 7:46 ` [PATCH v4 2/4] dt-bindings: raspberrypi,bcm2835-firmware: Include 'reboot-mode.yaml' Gregor Herburger
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Gregor Herburger @ 2026-09-04 7:46 UTC (permalink / raw)
To: Florian Fainelli, Broadcom internal kernel review list, Ray Jui,
Scott Branden, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Eric Anholt, Stefan Wahren
Cc: linux-rpi-kernel, linux-arm-kernel, linux-kernel, devicetree,
Gregor Herburger
The enum was once ordered by tag values. The later added tags were added
in a different order. Reorder the tags again.
No functional change intended.
Signed-off-by: Gregor Herburger <gregor.herburger@linutronix.de>
---
include/soc/bcm2835/raspberrypi-firmware.h | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
index 975bef529854a..8ad1cdbf5e9f5 100644
--- a/include/soc/bcm2835/raspberrypi-firmware.h
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
@@ -72,26 +72,26 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_GET_EDID_BLOCK = 0x00030020,
RPI_FIRMWARE_GET_CUSTOMER_OTP = 0x00030021,
RPI_FIRMWARE_GET_DOMAIN_STATE = 0x00030030,
+ RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041,
+ RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043,
+ RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045,
RPI_FIRMWARE_GET_THROTTLED = 0x00030046,
RPI_FIRMWARE_GET_CLOCK_MEASURED = 0x00030047,
RPI_FIRMWARE_NOTIFY_REBOOT = 0x00030048,
+ RPI_FIRMWARE_GET_POE_HAT_VAL = 0x00030049,
+ RPI_FIRMWARE_SET_POE_HAT_VAL = 0x00030050,
+ RPI_FIRMWARE_NOTIFY_XHCI_RESET = 0x00030058,
+ RPI_FIRMWARE_NOTIFY_DISPLAY_DONE = 0x00030066,
RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001,
RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002,
RPI_FIRMWARE_SET_VOLTAGE = 0x00038003,
RPI_FIRMWARE_SET_TURBO = 0x00038009,
RPI_FIRMWARE_SET_CUSTOMER_OTP = 0x00038021,
RPI_FIRMWARE_SET_DOMAIN_STATE = 0x00038030,
- RPI_FIRMWARE_GET_GPIO_STATE = 0x00030041,
RPI_FIRMWARE_SET_GPIO_STATE = 0x00038041,
RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042,
- RPI_FIRMWARE_GET_GPIO_CONFIG = 0x00030043,
RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043,
- RPI_FIRMWARE_GET_PERIPH_REG = 0x00030045,
RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045,
- RPI_FIRMWARE_GET_POE_HAT_VAL = 0x00030049,
- RPI_FIRMWARE_SET_POE_HAT_VAL = 0x00030050,
- RPI_FIRMWARE_NOTIFY_XHCI_RESET = 0x00030058,
- RPI_FIRMWARE_NOTIFY_DISPLAY_DONE = 0x00030066,
/* Dispmanx TAGS */
RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001,
@@ -107,7 +107,6 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b,
RPI_FIRMWARE_FRAMEBUFFER_GET_TOUCHBUF = 0x0004000f,
RPI_FIRMWARE_FRAMEBUFFER_GET_GPIOVIRTBUF = 0x00040010,
- RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001,
RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003,
RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004,
RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 0x00044005,
@@ -117,6 +116,7 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a,
RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b,
RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e,
+ RPI_FIRMWARE_FRAMEBUFFER_RELEASE = 0x00048001,
RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003,
RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004,
RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005,
@@ -125,10 +125,10 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009,
RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a,
RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b,
- RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f,
- RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020,
RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e,
RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f,
+ RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020,
RPI_FIRMWARE_VCHIQ_INIT = 0x00048010,
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 2/4] dt-bindings: raspberrypi,bcm2835-firmware: Include 'reboot-mode.yaml'
2026-09-04 7:46 [PATCH v4 0/4] firmware: raspberrypi: Add support for the tryboot mode Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 1/4] firmware: raspberrypi: reorder rpi_firmware_property_tag enum Gregor Herburger
@ 2026-09-04 7:46 ` Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 3/4] firmware: raspberrypi: Add reboot mode support Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 4/4] arm64: dts: broadcom: bcm2712: Add reboot modes to firmware node Gregor Herburger
3 siblings, 0 replies; 8+ messages in thread
From: Gregor Herburger @ 2026-09-04 7:46 UTC (permalink / raw)
To: Florian Fainelli, Broadcom internal kernel review list, Ray Jui,
Scott Branden, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Eric Anholt, Stefan Wahren
Cc: linux-rpi-kernel, linux-arm-kernel, linux-kernel, devicetree,
Krzysztof Kozlowski, Gregor Herburger
The Raspberry Pi firmware allows to set a reboot mode called tryboot
that allows to try booting from a different partition to allow updating
of the boot partition. Allow reboot mode properties by referencing the
reboot-mode schema. The firmware allows a 32bit value to be sent as
reboot flag so restrict the maxItems to 1.
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Gregor Herburger <gregor.herburger@linutronix.de>
---
.../bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
index 983ea80eaec97..28c5713860468 100644
--- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
+++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
@@ -133,6 +133,15 @@ properties:
required:
- compatible
+ mode-normal:
+ maxItems: 1
+
+ mode-tryboot:
+ maxItems: 1
+
+allOf:
+ - $ref: /schemas/power/reset/reboot-mode.yaml#
+
required:
- compatible
- mboxes
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 3/4] firmware: raspberrypi: Add reboot mode support
2026-09-04 7:46 [PATCH v4 0/4] firmware: raspberrypi: Add support for the tryboot mode Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 1/4] firmware: raspberrypi: reorder rpi_firmware_property_tag enum Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 2/4] dt-bindings: raspberrypi,bcm2835-firmware: Include 'reboot-mode.yaml' Gregor Herburger
@ 2026-09-04 7:46 ` Gregor Herburger
2026-09-04 16:39 ` Stefan Wahren
2026-09-04 7:46 ` [PATCH v4 4/4] arm64: dts: broadcom: bcm2712: Add reboot modes to firmware node Gregor Herburger
3 siblings, 1 reply; 8+ messages in thread
From: Gregor Herburger @ 2026-09-04 7:46 UTC (permalink / raw)
To: Florian Fainelli, Broadcom internal kernel review list, Ray Jui,
Scott Branden, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Eric Anholt, Stefan Wahren
Cc: linux-rpi-kernel, linux-arm-kernel, linux-kernel, devicetree,
Gregor Herburger
The Raspberry Pi firmware has a tryboot mode where it tries to boot from
another partition. This can be used to create a A/B update scheme.
To enable this on the next boot, the RPI_FIRMWARE_SET_REBOOT_FLAGS
message must be sent to the firmware. Add support for this by
registering a reboot mode driver.
Furthermore, safely registering the reboot mode requires adjusting the
teardown sequence. Replace the manually called rpi_firmware_put() with a
devres-managed called (devm_add_action_or_reset). Without this, the
cleanup function of devm_reboot_mode_register() would trigger a
use-after-free error by attempting to access the firmware context after
it had already been freed by rpi_firmware_remove().
Signed-off-by: Gregor Herburger <gregor.herburger@linutronix.de>
---
drivers/firmware/Kconfig | 2 ++
drivers/firmware/raspberrypi.c | 40 ++++++++++++++++++++++++++----
include/soc/bcm2835/raspberrypi-firmware.h | 2 ++
3 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
index b7cc11e4fbfa6..ec9e06960ec32 100644
--- a/drivers/firmware/Kconfig
+++ b/drivers/firmware/Kconfig
@@ -139,6 +139,8 @@ config RASPBERRYPI_FIRMWARE
depends on ARM || ARM64
depends on MAILBOX
default ARCH_BCM2835
+ select POWER_RESET
+ select REBOOT_MODE
help
This option enables support for communicating with the firmware on the
Raspberry Pi.
diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
index 0aa322e9a2e73..9038bd5fdb8e2 100644
--- a/drivers/firmware/raspberrypi.c
+++ b/drivers/firmware/raspberrypi.c
@@ -14,6 +14,7 @@
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/platform_device.h>
+#include <linux/reboot-mode.h>
#include <linux/slab.h>
#include <soc/bcm2835/raspberrypi-firmware.h>
@@ -29,6 +30,7 @@ struct rpi_firmware {
struct mbox_client cl;
struct mbox_chan *chan; /* The property channel. */
struct completion c;
+ struct reboot_mode_driver reboot_mode;
u32 enabled;
struct kref consumers;
@@ -273,10 +275,37 @@ static void devm_rpi_firmware_put(void *data)
rpi_firmware_put(fw);
}
+static int rpi_firmware_reboot_mode_write(struct reboot_mode_driver *reboot,
+ unsigned int magic)
+{
+ struct rpi_firmware *fw = container_of(reboot, struct rpi_firmware,
+ reboot_mode);
+ __le32 fw_magic = cpu_to_le32(magic);
+
+ if (!magic)
+ return 0;
+
+ return rpi_firmware_property(fw, RPI_FIRMWARE_SET_REBOOT_FLAGS,
+ &fw_magic, sizeof(fw_magic));
+}
+
+static void rpi_register_reboot_mode(struct device *dev, struct rpi_firmware *fw)
+{
+ int ret;
+
+ fw->reboot_mode.dev = dev;
+ fw->reboot_mode.write = rpi_firmware_reboot_mode_write;
+ ret = devm_reboot_mode_register(dev, &fw->reboot_mode);
+ if (ret)
+ dev_err(dev, "Failed to register reboot mode: %d\n", ret);
+
+}
+
static int rpi_firmware_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct rpi_firmware *fw;
+ int ret;
/*
* Memory will be freed by rpi_firmware_delete() once all users have
@@ -292,7 +321,7 @@ static int rpi_firmware_probe(struct platform_device *pdev)
fw->chan = mbox_request_channel(&fw->cl, 0);
if (IS_ERR(fw->chan)) {
- int ret = PTR_ERR(fw->chan);
+ ret = PTR_ERR(fw->chan);
kfree(fw);
return dev_err_probe(dev, ret, "Failed to get mbox channel\n");
}
@@ -300,11 +329,16 @@ static int rpi_firmware_probe(struct platform_device *pdev)
init_completion(&fw->c);
kref_init(&fw->consumers);
+ ret = devm_add_action_or_reset(dev, devm_rpi_firmware_put, fw);
+ if (ret)
+ return ret;
+
platform_set_drvdata(pdev, fw);
rpi_firmware_print_firmware_revision(fw);
rpi_register_hwmon_driver(dev, fw);
rpi_register_clk_driver(dev);
+ rpi_register_reboot_mode(dev, fw);
return 0;
}
@@ -321,14 +355,10 @@ static void rpi_firmware_shutdown(struct platform_device *pdev)
static void rpi_firmware_remove(struct platform_device *pdev)
{
- struct rpi_firmware *fw = platform_get_drvdata(pdev);
-
platform_device_unregister(rpi_hwmon);
rpi_hwmon = NULL;
platform_device_unregister(rpi_clk);
rpi_clk = NULL;
-
- rpi_firmware_put(fw);
}
static const struct of_device_id rpi_firmware_of_match[] = {
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
index 8ad1cdbf5e9f5..b75596dc367bb 100644
--- a/include/soc/bcm2835/raspberrypi-firmware.h
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
@@ -81,6 +81,7 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_GET_POE_HAT_VAL = 0x00030049,
RPI_FIRMWARE_SET_POE_HAT_VAL = 0x00030050,
RPI_FIRMWARE_NOTIFY_XHCI_RESET = 0x00030058,
+ RPI_FIRMWARE_GET_REBOOT_FLAGS = 0x00030064,
RPI_FIRMWARE_NOTIFY_DISPLAY_DONE = 0x00030066,
RPI_FIRMWARE_SET_CLOCK_STATE = 0x00038001,
RPI_FIRMWARE_SET_CLOCK_RATE = 0x00038002,
@@ -92,6 +93,7 @@ enum rpi_firmware_property_tag {
RPI_FIRMWARE_SET_SDHOST_CLOCK = 0x00038042,
RPI_FIRMWARE_SET_GPIO_CONFIG = 0x00038043,
RPI_FIRMWARE_SET_PERIPH_REG = 0x00038045,
+ RPI_FIRMWARE_SET_REBOOT_FLAGS = 0x00038064,
/* Dispmanx TAGS */
RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001,
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v4 4/4] arm64: dts: broadcom: bcm2712: Add reboot modes to firmware node
2026-09-04 7:46 [PATCH v4 0/4] firmware: raspberrypi: Add support for the tryboot mode Gregor Herburger
` (2 preceding siblings ...)
2026-09-04 7:46 ` [PATCH v4 3/4] firmware: raspberrypi: Add reboot mode support Gregor Herburger
@ 2026-09-04 7:46 ` Gregor Herburger
3 siblings, 0 replies; 8+ messages in thread
From: Gregor Herburger @ 2026-09-04 7:46 UTC (permalink / raw)
To: Florian Fainelli, Broadcom internal kernel review list, Ray Jui,
Scott Branden, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Eric Anholt, Stefan Wahren
Cc: linux-rpi-kernel, linux-arm-kernel, linux-kernel, devicetree,
Gregor Herburger
The Raspberry Pi firmware driver allows the tryboot reboot mode. Add
this mode and normal boot mode to the node.
Signed-off-by: Gregor Herburger <gregor.herburger@linutronix.de>
---
arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi
index b7a6bc34ae1ab..67095c7ff770d 100644
--- a/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcm2712-rpi-5-b-base.dtsi
@@ -49,6 +49,8 @@ firmware: rpi-firmware {
compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
mboxes = <&mailbox>;
+ mode-normal = <0>;
+ mode-tryboot = <1>;
firmware_clocks: clocks {
compatible = "raspberrypi,firmware-clocks";
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/4] firmware: raspberrypi: reorder rpi_firmware_property_tag enum
2026-09-04 7:46 ` [PATCH v4 1/4] firmware: raspberrypi: reorder rpi_firmware_property_tag enum Gregor Herburger
@ 2026-09-04 7:51 ` sashiko-bot
2026-09-04 11:11 ` Gregor Herburger
0 siblings, 1 reply; 8+ messages in thread
From: sashiko-bot @ 2026-09-04 7:51 UTC (permalink / raw)
To: Gregor Herburger; +Cc: conor+dt, devicetree, robh
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The patch claims to reorder the `rpi_firmware_property_tag` enum by tag values but introduces a new sorting error by moving higher values immediately before lower ones.
--
commit 5b5e3e4d76c8fceb817f997acacf1b16bf561c0e
Author: Gregor Herburger <gregor.herburger@linutronix.de>
firmware: raspberrypi: reorder rpi_firmware_property_tag enum
This patch reorders the tags in the rpi_firmware_property_tag enum to
sort them by their tag values. It claims no functional change is intended.
> diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
> index 975bef529854a..8ad1cdbf5e9f5 100644
> --- a/include/soc/bcm2835/raspberrypi-firmware.h
> +++ b/include/soc/bcm2835/raspberrypi-firmware.h
[ ... ]
> @@ -125,10 +125,10 @@ enum rpi_firmware_property_tag {
> RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009,
> RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a,
> RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b,
> - RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f,
> - RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020,
> RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e,
> RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f,
> + RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f,
> + RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020,
>
> RPI_FIRMWARE_VCHIQ_INIT = 0x00048010,
>
[Severity: Medium]
The commit message mentions that the enum is being ordered by tag values,
but does this actually break the ordering for these values?
The new placement moves RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF (0x0004801f)
and RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF (0x00048020) immediately before
RPI_FIRMWARE_VCHIQ_INIT (0x00048010) in rpi_firmware_property_tag.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260904-rpi-tryboot-v4-0-fdee8bc53ff7@linutronix.de?part=1
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/4] firmware: raspberrypi: reorder rpi_firmware_property_tag enum
2026-09-04 7:51 ` sashiko-bot
@ 2026-09-04 11:11 ` Gregor Herburger
0 siblings, 0 replies; 8+ messages in thread
From: Gregor Herburger @ 2026-09-04 11:11 UTC (permalink / raw)
To: sashiko-reviews; +Cc: conor+dt, devicetree, robh
On Fri, Sep 04, 2026 at 07:51:08AM +0000, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [Medium] The patch claims to reorder the `rpi_firmware_property_tag` enum by tag values but introduces a new sorting error by moving higher values immediately before lower ones.
> --
>
> commit 5b5e3e4d76c8fceb817f997acacf1b16bf561c0e
> Author: Gregor Herburger <gregor.herburger@linutronix.de>
>
> firmware: raspberrypi: reorder rpi_firmware_property_tag enum
>
> This patch reorders the tags in the rpi_firmware_property_tag enum to
> sort them by their tag values. It claims no functional change is intended.
>
> > diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
> > index 975bef529854a..8ad1cdbf5e9f5 100644
> > --- a/include/soc/bcm2835/raspberrypi-firmware.h
> > +++ b/include/soc/bcm2835/raspberrypi-firmware.h
>
> [ ... ]
>
> > @@ -125,10 +125,10 @@ enum rpi_firmware_property_tag {
> > RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009,
> > RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a,
> > RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b,
> > - RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f,
> > - RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020,
> > RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC = 0x0004800e,
> > RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f,
> > + RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF = 0x0004801f,
> > + RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF = 0x00048020,
> >
> > RPI_FIRMWARE_VCHIQ_INIT = 0x00048010,
> >
>
> [Severity: Medium]
> The commit message mentions that the enum is being ordered by tag values,
> but does this actually break the ordering for these values?
>
> The new placement moves RPI_FIRMWARE_FRAMEBUFFER_SET_TOUCHBUF (0x0004801f)
> and RPI_FIRMWARE_FRAMEBUFFER_SET_GPIOVIRTBUF (0x00048020) immediately before
> RPI_FIRMWARE_VCHIQ_INIT (0x00048010) in rpi_firmware_property_tag.
Yes I am aware of this but this RPI_FIRMWARE_VCHIQ_INIT seems not to fit into
the RPI_FIRMWARE_FRAMEBUFFER_* block. So I decided to keep it where it is.
Best regards
--
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 3/4] firmware: raspberrypi: Add reboot mode support
2026-09-04 7:46 ` [PATCH v4 3/4] firmware: raspberrypi: Add reboot mode support Gregor Herburger
@ 2026-09-04 16:39 ` Stefan Wahren
0 siblings, 0 replies; 8+ messages in thread
From: Stefan Wahren @ 2026-09-04 16:39 UTC (permalink / raw)
To: Gregor Herburger, Florian Fainelli,
Broadcom internal kernel review list, Ray Jui, Scott Branden,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Eric Anholt
Cc: linux-rpi-kernel, linux-arm-kernel, linux-kernel, devicetree
Am 04.09.26 um 09:46 schrieb Gregor Herburger:
> The Raspberry Pi firmware has a tryboot mode where it tries to boot from
> another partition. This can be used to create a A/B update scheme.
>
> To enable this on the next boot, the RPI_FIRMWARE_SET_REBOOT_FLAGS
> message must be sent to the firmware. Add support for this by
> registering a reboot mode driver.
>
> Furthermore, safely registering the reboot mode requires adjusting the
> teardown sequence. Replace the manually called rpi_firmware_put() with a
> devres-managed called (devm_add_action_or_reset). Without this, the
> cleanup function of devm_reboot_mode_register() would trigger a
> use-after-free error by attempting to access the firmware context after
> it had already been freed by rpi_firmware_remove().
>
> Signed-off-by: Gregor Herburger <gregor.herburger@linutronix.de>
Tested-by: Stefan Wahren <wahrenst@gmx.net>
I tested with a Raspberry Pi 3 B Plus i didn't see any regressions
also the code looks fine to me
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-09-04 16:39 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-04 7:46 [PATCH v4 0/4] firmware: raspberrypi: Add support for the tryboot mode Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 1/4] firmware: raspberrypi: reorder rpi_firmware_property_tag enum Gregor Herburger
2026-09-04 7:51 ` sashiko-bot
2026-09-04 11:11 ` Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 2/4] dt-bindings: raspberrypi,bcm2835-firmware: Include 'reboot-mode.yaml' Gregor Herburger
2026-09-04 7:46 ` [PATCH v4 3/4] firmware: raspberrypi: Add reboot mode support Gregor Herburger
2026-09-04 16:39 ` Stefan Wahren
2026-09-04 7:46 ` [PATCH v4 4/4] arm64: dts: broadcom: bcm2712: Add reboot modes to firmware node Gregor Herburger
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.