From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Sun, 12 Feb 2023 23:15:09 +0100 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pRKco-005asB-Eq for lore@lore.pengutronix.de; Sun, 12 Feb 2023 23:15:08 +0100 Received: from localhost ([127.0.0.1] helo=metis.ext.pengutronix.de) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1pRKcl-0006u8-0h; Sun, 12 Feb 2023 23:15:07 +0100 Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pRKcb-0006o3-Oa; Sun, 12 Feb 2023 23:14:57 +0100 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1pRKcZ-004WUw-TZ; Sun, 12 Feb 2023 23:14:57 +0100 Received: from rhi by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1pRKcZ-006uAY-T5; Sun, 12 Feb 2023 23:14:55 +0100 From: Roland Hieber To: distrokit@pengutronix.de Date: Sun, 12 Feb 2023 23:14:43 +0100 Message-Id: <20230212221449.1644628-3-rhi@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230212221449.1644628-1-rhi@pengutronix.de> References: <20230212221449.1644628-1-rhi@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [DistroKit] [PATCH 2/8] v7a: add RAUC support for qemu-vexpress X-BeenThere: distrokit@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: DistroKit Mailinglist List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Roland Hieber Sender: "DistroKit" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: distrokit-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false * Enable barebox bootchooser framework * Add a redundant root partition to the genimage config. The current size of the rootfs is below 98 MiB, so we can add a second root partition to the image while keeping the overall image size the same. * Add appropriate variables to the barebox defaultenv so the bootchooser can decide into which partition to boot * Make the bootstate node in the device tree reusable for more platforms * Map partitions in rauc-udev compatibility layer Signed-off-by: Roland Hieber --- .../init/bootsource | 2 +- .../nv/boot.default | 1 + .../nv/bootchooser.state_prefix | 1 + .../nv/bootchooser.system0.boot | 1 + .../nv/bootchooser.system1.boot | 1 + .../nv/bootchooser.targets | 1 + configs/platform-v7a/barebox-vexpress.config | 3 +- .../platform-v7a/barebox-vexpress.config.diff | 2 + .../config/images/vexpress.config | 7 +- ...-bootstate-node-into-a-generic-templ.patch | 123 ++++++++++++++++++ .../patches/barebox-2022.09.0/series | 1 + .../lib/udev/rules.d/90-rauc-partitions.rules | 5 + 12 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 configs/platform-v7a/barebox-vexpress-defaultenv/nv/boot.default create mode 100644 configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.state_prefix create mode 100644 configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.system0.boot create mode 100644 configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.system1.boot create mode 100644 configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.targets create mode 100644 configs/platform-v7a/patches/barebox-2022.09.0/0101-arm-dts-refactor-bootstate-node-into-a-generic-templ.patch diff --git a/configs/platform-v7a/barebox-vexpress-defaultenv/init/bootsource b/configs/platform-v7a/barebox-vexpress-defaultenv/init/bootsource index b42659c5e78b..4432e021fb0f 100644 --- a/configs/platform-v7a/barebox-vexpress-defaultenv/init/bootsource +++ b/configs/platform-v7a/barebox-vexpress-defaultenv/init/bootsource @@ -4,4 +4,4 @@ if [ -n "$nv.boot.default" ]; then exit fi -global.boot.default="disk0.0 net" +global.boot.default="bootchooser net" diff --git a/configs/platform-v7a/barebox-vexpress-defaultenv/nv/boot.default b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/boot.default new file mode 100644 index 000000000000..d7d9a373c50b --- /dev/null +++ b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/boot.default @@ -0,0 +1 @@ +bootchooser net diff --git a/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.state_prefix b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.state_prefix new file mode 100644 index 000000000000..6246412a5c27 --- /dev/null +++ b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.state_prefix @@ -0,0 +1 @@ +state.bootstate diff --git a/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.system0.boot b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.system0.boot new file mode 100644 index 000000000000..961e29fe981b --- /dev/null +++ b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.system0.boot @@ -0,0 +1 @@ +disk0.0 diff --git a/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.system1.boot b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.system1.boot new file mode 100644 index 000000000000..5676f868b380 --- /dev/null +++ b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.system1.boot @@ -0,0 +1 @@ +disk0.1 diff --git a/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.targets b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.targets new file mode 100644 index 000000000000..f0fb14eeaad2 --- /dev/null +++ b/configs/platform-v7a/barebox-vexpress-defaultenv/nv/bootchooser.targets @@ -0,0 +1 @@ +system0 system1 diff --git a/configs/platform-v7a/barebox-vexpress.config b/configs/platform-v7a/barebox-vexpress.config index 9503d59b04af..443d2c2d82f2 100644 --- a/configs/platform-v7a/barebox-vexpress.config +++ b/configs/platform-v7a/barebox-vexpress.config @@ -188,7 +188,7 @@ CONFIG_BTHREAD=y CONFIG_STATE=y # CONFIG_STATE_CRYPTO is not set # CONFIG_STATE_BACKWARD_COMPATIBLE is not set -# CONFIG_BOOTCHOOSER is not set +CONFIG_BOOTCHOOSER=y CONFIG_RESET_SOURCE=y # CONFIG_MACHINE_ID is not set # CONFIG_SYSTEMD_OF_WATCHDOG is not set @@ -277,6 +277,7 @@ CONFIG_CMD_GO=y # CONFIG_CMD_LOADY is not set CONFIG_CMD_RESET=y CONFIG_CMD_UIMAGE=y +CONFIG_CMD_BOOTCHOOSER=y # end of Boot # diff --git a/configs/platform-v7a/barebox-vexpress.config.diff b/configs/platform-v7a/barebox-vexpress.config.diff index c9c2cc471980..8811f82ccd04 100644 --- a/configs/platform-v7a/barebox-vexpress.config.diff +++ b/configs/platform-v7a/barebox-vexpress.config.diff @@ -8,8 +8,10 @@ CONFIG_ARCH_VEXPRESS=y # CONFIG_ARM_SECURE_MONITOR is undefined # CONFIG_ARM_SMCCC is undefined # CONFIG_ARM_USE_COMPRESSED_DTB is undefined +CONFIG_BOOTCHOOSER=y # CONFIG_CFI_BUFFER_WRITE is not set # CONFIG_CLOCKSOURCE_BCM283X is undefined +CONFIG_CMD_BOOTCHOOSER=y # CONFIG_CMD_GPIO is undefined # CONFIG_CMD_SMC is undefined CONFIG_CONSOLE_ACTIVATE_ALL=y diff --git a/configs/platform-v7a/config/images/vexpress.config b/configs/platform-v7a/config/images/vexpress.config index d51a58be2893..3aa64a4299ce 100644 --- a/configs/platform-v7a/config/images/vexpress.config +++ b/configs/platform-v7a/config/images/vexpress.config @@ -6,7 +6,12 @@ image @IMAGE@ { partition root-A { image = root.ext2 partition-type = 0x83 - size = 192M + size = 96M + } + partition root-B { + image = root.ext2 + partition-type = 0x83 + size = 96M } partition data { partition-type = 0x83 diff --git a/configs/platform-v7a/patches/barebox-2022.09.0/0101-arm-dts-refactor-bootstate-node-into-a-generic-templ.patch b/configs/platform-v7a/patches/barebox-2022.09.0/0101-arm-dts-refactor-bootstate-node-into-a-generic-templ.patch new file mode 100644 index 000000000000..a735d0449de3 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2022.09.0/0101-arm-dts-refactor-bootstate-node-into-a-generic-templ.patch @@ -0,0 +1,123 @@ +From: Roland Hieber +Date: Mon, 25 Jan 2021 00:24:21 +0100 +Subject: [PATCH] arm: dts: refactor bootstate node into a generic template + +The existing bootstate node can be used as-is for other A/B redundancy +setups with the bootchooser framework too. Refactor it into an include +file which can be simply re-used in other device trees. + +Signed-off-by: Roland Hieber +--- + arch/arm/dts/generic-bootstate.dtsi | 44 +++++++++++++++++++++++++++++++++++++ + arch/arm/dts/vexpress-v2p-ca9.dts | 44 +++---------------------------------- + 2 files changed, 47 insertions(+), 41 deletions(-) + create mode 100644 arch/arm/dts/generic-bootstate.dtsi + +diff --git a/arch/arm/dts/generic-bootstate.dtsi b/arch/arm/dts/generic-bootstate.dtsi +new file mode 100644 +index 000000000000..5cf9d1640d5c +--- /dev/null ++++ b/arch/arm/dts/generic-bootstate.dtsi +@@ -0,0 +1,44 @@ ++&bootstate { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ system0 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ remaining_attempts@0 { ++ reg = <0x0 0x4>; ++ type = "uint32"; ++ default = <3>; ++ }; ++ ++ priority@4 { ++ reg = <0x4 0x4>; ++ type = "uint32"; ++ default = <20>; ++ }; ++ }; ++ ++ system1 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ remaining_attempts@8 { ++ reg = <0x8 0x4>; ++ type = "uint32"; ++ default = <3>; ++ }; ++ ++ priority@c { ++ reg = <0xc 0x4>; ++ type = "uint32"; ++ default = <10>; ++ }; ++ }; ++ ++ last_chosen@10 { ++ reg = <0x10 0x4>; ++ type = "uint32"; ++ }; ++}; ++ +diff --git a/arch/arm/dts/vexpress-v2p-ca9.dts b/arch/arm/dts/vexpress-v2p-ca9.dts +index a43628e7ce15..b7962c363a7b 100644 +--- a/arch/arm/dts/vexpress-v2p-ca9.dts ++++ b/arch/arm/dts/vexpress-v2p-ca9.dts +@@ -25,50 +25,12 @@ + #address-cells = <1>; + #size-cells = <1>; + +- bootstate { +- #address-cells = <1>; +- #size-cells = <1>; +- +- system0 { /* the node's name here must match the subnode's name in the 'bootstate' node */ +- #address-cells = <1>; +- #size-cells = <1>; +- +- remaining_attempts@0 { +- reg = <0x0 0x4>; +- type = "uint32"; +- default = <3>; +- }; +- priority@4 { +- reg = <0x4 0x4>; +- type = "uint32"; +- default = <20>; +- }; +- }; +- +- system1 { /* the node's name here must match the subnode's name in the 'bootstate' node */ +- #address-cells = <1>; +- #size-cells = <1>; +- +- remaining_attempts@8 { +- reg = <0x8 0x4>; +- type = "uint32"; +- default = <3>; +- }; +- priority@c { +- reg = <0xC 0x4>; +- type = "uint32"; +- default = <20>; +- }; +- }; +- +- last_chosen@10 { +- reg = <0x10 0x4>; +- type = "uint32"; +- }; +- }; ++ bootstate: bootstate {}; + }; + }; + ++#include "generic-bootstate.dtsi" ++ + &{/bus@40000000/motherboard-bus@40000000/flash@0,00000000} { + partitions { + compatible = "fixed-partitions"; diff --git a/configs/platform-v7a/patches/barebox-2022.09.0/series b/configs/platform-v7a/patches/barebox-2022.09.0/series index 26c8a02e7caa..5ae996252bb9 100644 --- a/configs/platform-v7a/patches/barebox-2022.09.0/series +++ b/configs/platform-v7a/patches/barebox-2022.09.0/series @@ -1,3 +1,4 @@ 0001-mci-core-act-upon-broken-cd-device-tree-property.patch 0002-mci-core-add-broken_cd-device-parameter.patch 0003-mci-core-fixup-broken-cd-information-into-kernel-DT.patch +0101-arm-dts-refactor-bootstate-node-into-a-generic-templ.patch diff --git a/projectroot/usr/lib/udev/rules.d/90-rauc-partitions.rules b/projectroot/usr/lib/udev/rules.d/90-rauc-partitions.rules index 0300e8b9daad..32731f8e983a 100644 --- a/projectroot/usr/lib/udev/rules.d/90-rauc-partitions.rules +++ b/projectroot/usr/lib/udev/rules.d/90-rauc-partitions.rules @@ -8,5 +8,10 @@ IMPORT{program}="of_base_compatible" # Add symlinks named /dev/disk/by-usage/{data,rootfs0,rootfs1} pointing # to the correct partitions based on the device tree compatible +ENV{OF_BASE_COMPATIBLE}!="*arm,vexpress,v2p-ca9*", GOTO="qemu_vexpress_end" +KERNEL=="mmcblk0p1", SYMLINK+="disk/by-usage/rootfs0" +KERNEL=="mmcblk0p2", SYMLINK+="disk/by-usage/rootfs1" +KERNEL=="mmcblk0p3", SYMLINK+="disk/by-usage/data" +LABEL="qemu_vexpress_end" LABEL="rauc_partitions_end" -- 2.30.2