* [PATCH v2 01/11] meta-isar: linux-mainline: Update to 6.6.11
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 02/11] optee-os: Switch default binary to tee-raw.bin Jan Kiszka
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
This is needed for the BeaglePlay board and will allow to use the
mainline kernel also on the VisionFive 2.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
.../{linux-mainline_5.4.203.bb => linux-mainline_6.6.11.bb} | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
rename meta-isar/recipes-kernel/linux/{linux-mainline_5.4.203.bb => linux-mainline_6.6.11.bb} (85%)
diff --git a/meta-isar/recipes-kernel/linux/linux-mainline_5.4.203.bb b/meta-isar/recipes-kernel/linux/linux-mainline_6.6.11.bb
similarity index 85%
rename from meta-isar/recipes-kernel/linux/linux-mainline_5.4.203.bb
rename to meta-isar/recipes-kernel/linux/linux-mainline_6.6.11.bb
index 47270cbb..d7483eb0 100644
--- a/meta-isar/recipes-kernel/linux/linux-mainline_5.4.203.bb
+++ b/meta-isar/recipes-kernel/linux/linux-mainline_6.6.11.bb
@@ -1,7 +1,7 @@
# Example recipe for building the mainline kernel
#
# This software is a part of ISAR.
-# Copyright (c) Siemens AG, 2018-2020
+# Copyright (c) Siemens AG, 2018-2024
#
# SPDX-License-Identifier: MIT
@@ -10,13 +10,13 @@ require recipes-kernel/linux/linux-custom.inc
ARCHIVE_VERSION = "${@ d.getVar('PV')[:-2] if d.getVar('PV').endswith('.0') else d.getVar('PV') }"
SRC_URI += " \
- https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${ARCHIVE_VERSION}.tar.xz \
+ https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${ARCHIVE_VERSION}.tar.xz \
file://x86_64_defconfig \
file://ftpm-module.cfg \
file://subdir/no-ubifs-fs.cfg \
file://no-root-nfs.cfg;apply=no"
-SRC_URI[sha256sum] = "fc933f5b13066cfa54aacb5e86747a167bad1d8d23972e4a03ab5ee36c29798a"
+SRC_URI[sha256sum] = "afe2e5a661bb886d762684ebea71607d1ee8cb9dd100279d2810ba20d9671e52"
S = "${WORKDIR}/linux-${ARCHIVE_VERSION}"
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 02/11] optee-os: Switch default binary to tee-raw.bin
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 01/11] meta-isar: linux-mainline: Update to 6.6.11 Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 03/11] u-boot-custom: Allow to set BL31 and TEE from recipes Jan Kiszka
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
This is standard now with 3.21. In-tree users are not affected, leave
note in changelog for out-of-tree users.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
RECIPE-API-CHANGELOG.md | 5 +++++
meta/recipes-bsp/optee-os/optee-os.inc | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index bea12871..d4000933 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -566,3 +566,8 @@ supported, but a warning is issued when it is used. Future versions will drop
When building a custom kernel module, the `KBuild` file might be located in
a subdirectory. To support this use-case, set `MODULE_DIR=$(PWD)/subdir` in
the module build recipe.
+
+### Change OPTEE_BINARIES default ###
+
+Since OP-TEE 3.21, tee-raw.bin is produced for all platforms and is considered
+the better default option. `OPTEE_BINARIES` now uses this as default as well.
diff --git a/meta/recipes-bsp/optee-os/optee-os.inc b/meta/recipes-bsp/optee-os/optee-os.inc
index 240bb114..d2c5cd93 100644
--- a/meta/recipes-bsp/optee-os/optee-os.inc
+++ b/meta/recipes-bsp/optee-os/optee-os.inc
@@ -16,7 +16,7 @@ DESCRIPTION ?= "Custom OP-TEE OS"
OPTEE_NAME ?= "${MACHINE}"
OPTEE_PLATFORM ?= "unknown"
OPTEE_EXTRA_BUILDARGS ?= ""
-OPTEE_BINARIES ?= "tee-pager_v2.bin"
+OPTEE_BINARIES ?= "tee-raw.bin"
DEBIAN_PACKAGE_NAME ?= "optee-os-${OPTEE_NAME}"
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 03/11] u-boot-custom: Allow to set BL31 and TEE from recipes
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 01/11] meta-isar: linux-mainline: Update to 6.6.11 Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 02/11] optee-os: Switch default binary to tee-raw.bin Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 04/11] u-boot-custom: Allow to define different installation binaries Jan Kiszka
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
These variables commonly define the trusted firmware and trusted
execution environment binaries. There should be no reason to fork the
rules file only for injecting those.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
meta/recipes-bsp/u-boot/files/debian/rules.tmpl | 2 +-
meta/recipes-bsp/u-boot/u-boot-custom.inc | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/meta/recipes-bsp/u-boot/files/debian/rules.tmpl b/meta/recipes-bsp/u-boot/files/debian/rules.tmpl
index 806b01fe..53c85451 100755
--- a/meta/recipes-bsp/u-boot/files/debian/rules.tmpl
+++ b/meta/recipes-bsp/u-boot/files/debian/rules.tmpl
@@ -14,7 +14,7 @@ endif
override_dh_auto_build:
$(MAKE) $(PARALLEL_MAKE) ${U_BOOT_CONFIG}
- $(MAKE) $(PARALLEL_MAKE) ${U_BOOT_BIN}
+ $(MAKE) $(PARALLEL_MAKE) BL31=${BL31} TEE=${TEE} ${U_BOOT_BIN}
$(MAKE) -n u-boot-initial-env >/dev/null 2>&1; if [ $$? -ne 2 ]; then \
$(MAKE) $(PARALLEL_MAKE) u-boot-initial-env; \
else \
diff --git a/meta/recipes-bsp/u-boot/u-boot-custom.inc b/meta/recipes-bsp/u-boot/u-boot-custom.inc
index f16906ce..c3d8fdf5 100644
--- a/meta/recipes-bsp/u-boot/u-boot-custom.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-custom.inc
@@ -27,7 +27,8 @@ python() {
DEBIAN_BUILD_DEPENDS ?= "bc, bison, flex, device-tree-compiler, git"
TEMPLATE_FILES = "debian/control.tmpl debian/rules.tmpl"
-TEMPLATE_VARS += "MACHINE DEBIAN_BUILD_DEPENDS U_BOOT_CONFIG U_BOOT_BIN"
+TEMPLATE_VARS += "MACHINE DEBIAN_BUILD_DEPENDS U_BOOT_CONFIG U_BOOT_BIN \
+ BL31 TEE"
U_BOOT_TOOLS_PACKAGE ?= "0"
U_BOOT_CONFIG_PACKAGE ?= "0"
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 04/11] u-boot-custom: Allow to define different installation binaries
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (2 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 03/11] u-boot-custom: Allow to set BL31 and TEE from recipes Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 05/11] beagleplay: Add TF-A recipe Jan Kiszka
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
This allows to decouple the build target U_BOOT_BIN from the installed
and packaged binaries and also adds support for multiple binaries. The
default remains what is specified via U_BOOT_BIN.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
meta/recipes-bsp/u-boot/u-boot-custom.inc | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/meta/recipes-bsp/u-boot/u-boot-custom.inc b/meta/recipes-bsp/u-boot/u-boot-custom.inc
index c3d8fdf5..fa713c75 100644
--- a/meta/recipes-bsp/u-boot/u-boot-custom.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-custom.inc
@@ -26,6 +26,8 @@ python() {
DEBIAN_BUILD_DEPENDS ?= "bc, bison, flex, device-tree-compiler, git"
+U_BOOT_BIN_INSTALL ?= "${U_BOOT_BIN}"
+
TEMPLATE_FILES = "debian/control.tmpl debian/rules.tmpl"
TEMPLATE_VARS += "MACHINE DEBIAN_BUILD_DEPENDS U_BOOT_CONFIG U_BOOT_BIN \
BL31 TEE"
@@ -38,8 +40,11 @@ do_prepare_build() {
deb_add_changelog
- echo "${U_BOOT_BIN} /usr/lib/u-boot/${MACHINE}" > \
- ${S}/debian/u-boot-${MACHINE}.install
+ rm -f ${S}/debian/u-boot-${MACHINE}.install
+ for bin in ${U_BOOT_BIN_INSTALL}; do
+ echo "$bin /usr/lib/u-boot/${MACHINE}" >> \
+ ${S}/debian/u-boot-${MACHINE}.install
+ done
echo "tools/env/libubootenv.a usr/lib" > \
${S}/debian/u-boot-${MACHINE}-dev.install
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 05/11] beagleplay: Add TF-A recipe
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (3 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 04/11] u-boot-custom: Allow to define different installation binaries Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 06/11] beagleplay: Add OP-TEE recipe Jan Kiszka
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
Add Trusted Firmware A support for the BeaglePlay. Assembly will be done
by U-Boot.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
.../trusted-firmware-a-beagleplay_2.10.bb | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 meta-isar/recipes-bsp/trusted-firmware-a/trusted-firmware-a-beagleplay_2.10.bb
diff --git a/meta-isar/recipes-bsp/trusted-firmware-a/trusted-firmware-a-beagleplay_2.10.bb b/meta-isar/recipes-bsp/trusted-firmware-a/trusted-firmware-a-beagleplay_2.10.bb
new file mode 100644
index 00000000..be1e10bb
--- /dev/null
+++ b/meta-isar/recipes-bsp/trusted-firmware-a/trusted-firmware-a-beagleplay_2.10.bb
@@ -0,0 +1,15 @@
+#
+# Copyright (c) Siemens AG, 2023-2024
+#
+# SPDX-License-Identifier: MIT
+
+require recipes-bsp/trusted-firmware-a/trusted-firmware-a-custom.inc
+
+SRC_URI += "https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/snapshot/trusted-firmware-a-${PV}.tar.gz"
+SRC_URI[sha256sum] = "88215a62291b9ba87da8e50b077741103cdc08fb6c9e1ebd34dfaace746d3201"
+
+S = "${WORKDIR}/trusted-firmware-a-${PV}"
+
+TF_A_PLATFORM = "k3"
+TF_A_EXTRA_BUILDARGS = "CFG_ARM64=y TARGET_BOARD=lite SPD=opteed"
+TF_A_BINARIES = "lite/release/bl31.bin"
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 06/11] beagleplay: Add OP-TEE recipe
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (4 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 05/11] beagleplay: Add TF-A recipe Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 07/11] beagleplay: Add U-Boot recipe Jan Kiszka
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
Add OP-TEE OS support for the BeaglePlay. Assembly will be done by
U-Boot.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
.../optee-os/optee-os-beagleplay_4.0.0.bb | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 meta-isar/recipes-bsp/optee-os/optee-os-beagleplay_4.0.0.bb
diff --git a/meta-isar/recipes-bsp/optee-os/optee-os-beagleplay_4.0.0.bb b/meta-isar/recipes-bsp/optee-os/optee-os-beagleplay_4.0.0.bb
new file mode 100644
index 00000000..ef420687
--- /dev/null
+++ b/meta-isar/recipes-bsp/optee-os/optee-os-beagleplay_4.0.0.bb
@@ -0,0 +1,18 @@
+#
+# Copyright (c) Siemens AG, 2023-2024
+#
+# SPDX-License-Identifier: MIT
+
+require recipes-bsp/optee-os/optee-os-custom.inc
+
+SRC_URI += "https://github.com/OP-TEE/optee_os/archive/${PV}.tar.gz;downloadfilename=optee_os-${PV}.tar.gz"
+SRC_URI[sha256sum] = "2c2c9525b36c96dfad6216520721b8e9663e6cacc61d0108a0c8bffc0ea175f1"
+
+S = "${WORKDIR}/optee_os-${PV}"
+
+DEBIAN_BUILD_DEPENDS += ", python3-cryptography:native"
+
+OPTEE_PLATFORM = "k3"
+OPTEE_EXTRA_BUILDARGS = " \
+ TEE_IMPL_VERSION=${PV} \
+ CFG_ARM64_core=y CFG_USER_TA_TARGETS=ta_arm64"
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 07/11] beagleplay: Add U-Boot recipe
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (5 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 06/11] beagleplay: Add OP-TEE recipe Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 08/11] wic: Add hybrid-boot bootloader source plugin Jan Kiszka
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
Upstream support is available via upcoming 2024.01. One patches is still
needed to enable WIFI support.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
...2x-Add-basic-initialization-for-usb-.patch | 80 +++++++++++++++++++
.../recipes-bsp/u-boot/files/rules-beagleplay | 34 ++++++++
.../u-boot/u-boot-beagleplay_2024.01.bb | 41 ++++++++++
3 files changed, 155 insertions(+)
create mode 100644 meta-isar/recipes-bsp/u-boot/files/0001-TMP-board-ti-am62x-Add-basic-initialization-for-usb-.patch
create mode 100755 meta-isar/recipes-bsp/u-boot/files/rules-beagleplay
create mode 100644 meta-isar/recipes-bsp/u-boot/u-boot-beagleplay_2024.01.bb
diff --git a/meta-isar/recipes-bsp/u-boot/files/0001-TMP-board-ti-am62x-Add-basic-initialization-for-usb-.patch b/meta-isar/recipes-bsp/u-boot/files/0001-TMP-board-ti-am62x-Add-basic-initialization-for-usb-.patch
new file mode 100644
index 00000000..d4e3137e
--- /dev/null
+++ b/meta-isar/recipes-bsp/u-boot/files/0001-TMP-board-ti-am62x-Add-basic-initialization-for-usb-.patch
@@ -0,0 +1,80 @@
+From 3502d8a4dd51b3bfe9b2fb123f0e8d6f7c0735ec Mon Sep 17 00:00:00 2001
+From: Nishanth Menon <nm@ti.com>
+Date: Tue, 25 Jul 2023 13:52:50 -0500
+Subject: [PATCH] TMP: board: ti: am62x: Add basic initialization for usb
+ voltage, 32k crystal, debounce
+
+Do the basic configuration required for setting up the USB core voltage
+configuration, setup to configure the 32k clock coming from 32k crystal
+and the debounce configurations for the various pins.
+
+See https://lore.kernel.org/u-boot/20230725185253.2123433-4-nm@ti.com/
+Changes since then: writel(val, reg) - fixed for debounce values
+
+Signed-off-by: Nishanth Menon <nm@ti.com>
+---
+ board/ti/am62x/evm.c | 46 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 46 insertions(+)
+
+diff --git a/board/ti/am62x/evm.c b/board/ti/am62x/evm.c
+index ad939088402..a1575c2b220 100644
+--- a/board/ti/am62x/evm.c
++++ b/board/ti/am62x/evm.c
+@@ -78,8 +78,54 @@ static int video_setup(void)
+ return 0;
+ }
+
++#define CTRLMMR_USB0_PHY_CTRL 0x43004008
++#define CTRLMMR_USB1_PHY_CTRL 0x43004018
++#define CORE_VOLTAGE 0x80000000
++
++#define WKUP_CTRLMMR_DBOUNCE_CFG1 0x04504084
++#define WKUP_CTRLMMR_DBOUNCE_CFG2 0x04504088
++#define WKUP_CTRLMMR_DBOUNCE_CFG3 0x0450408c
++#define WKUP_CTRLMMR_DBOUNCE_CFG4 0x04504090
++#define WKUP_CTRLMMR_DBOUNCE_CFG5 0x04504094
++#define WKUP_CTRLMMR_DBOUNCE_CFG6 0x04504098
++
+ void spl_board_init(void)
+ {
++ u32 val;
++
++ /* Set USB0 PHY core voltage to 0.85V */
++ val = readl(CTRLMMR_USB0_PHY_CTRL);
++ val &= ~(CORE_VOLTAGE);
++ writel(val, CTRLMMR_USB0_PHY_CTRL);
++
++ /* Set USB1 PHY core voltage to 0.85V */
++ val = readl(CTRLMMR_USB1_PHY_CTRL);
++ val &= ~(CORE_VOLTAGE);
++ writel(val, CTRLMMR_USB1_PHY_CTRL);
++
++ /* We have 32k crystal, so lets enable it */
++ val = readl(MCU_CTRL_LFXOSC_CTRL);
++ val &= ~(MCU_CTRL_LFXOSC_32K_DISABLE_VAL);
++ writel(val, MCU_CTRL_LFXOSC_CTRL);
++ /* Add any TRIM needed for the crystal here.. */
++ /* Make sure to mux up to take the SoC 32k from the crystal */
++ writel(MCU_CTRL_DEVICE_CLKOUT_LFOSC_SELECT_VAL,
++ MCU_CTRL_DEVICE_CLKOUT_32K_CTRL);
++
++ /* Setup debounce conf registers - arbitrary values. Times are approx */
++ /* 1.9ms debounce @ 32k */
++ writel(0x1, WKUP_CTRLMMR_DBOUNCE_CFG1);
++ /* 5ms debounce @ 32k */
++ writel(0x5, WKUP_CTRLMMR_DBOUNCE_CFG2);
++ /* 20ms debounce @ 32k */
++ writel(0x14, WKUP_CTRLMMR_DBOUNCE_CFG3);
++ /* 46ms debounce @ 32k */
++ writel(0x18, WKUP_CTRLMMR_DBOUNCE_CFG4);
++ /* 100ms debounce @ 32k */
++ writel(0x1c, WKUP_CTRLMMR_DBOUNCE_CFG5);
++ /* 156ms debounce @ 32k */
++ writel(0x1f, WKUP_CTRLMMR_DBOUNCE_CFG6);
++
+ video_setup();
+ enable_caches();
+ if (IS_ENABLED(CONFIG_SPL_SPLASH_SCREEN) && IS_ENABLED(CONFIG_SPL_BMP))
+--
+2.35.3
+
diff --git a/meta-isar/recipes-bsp/u-boot/files/rules-beagleplay b/meta-isar/recipes-bsp/u-boot/files/rules-beagleplay
new file mode 100755
index 00000000..bc6c8f2b
--- /dev/null
+++ b/meta-isar/recipes-bsp/u-boot/files/rules-beagleplay
@@ -0,0 +1,34 @@
+#!/usr/bin/make -f
+
+# Debian rules for custom U-Boot build
+#
+# This software is a part of ISAR.
+# Copyright (c) Siemens AG, 2018-2024
+#
+# SPDX-License-Identifier: MIT
+
+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+export CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)-
+SET_CROSS_BUILD_TOOLS=CROSS_BUILD_TOOLS=y
+endif
+
+override_dh_auto_build:
+ $(MAKE) $(PARALLEL_MAKE) ARCH=arm am62x_evm_r5_defconfig beagleplay_r5.config
+ $(MAKE) $(PARALLEL_MAKE) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
+
+ $(MAKE) $(PARALLEL_MAKE) am62x_evm_a53_defconfig beagleplay_a53.config
+ $(MAKE) $(PARALLEL_MAKE) BL31=/usr/lib/trusted-firmware-a/beagleplay/bl31.bin \
+ TEE=/usr/lib/optee-os/beagleplay/tee-raw.bin
+ $(MAKE) $(PARALLEL_MAKE) u-boot-initial-env
+ $(MAKE) $(PARALLEL_MAKE) $(SET_CROSS_BUILD_TOOLS) NO_SDL=1 tools-only envtools
+
+override_dh_auto_install:
+ mv tools/env/lib.a tools/env/libubootenv.a
+
+override_dh_auto_test:
+
+override_dh_strip:
+ dh_strip -X libubootenv.a
+
+%:
+ dh $@ --parallel
diff --git a/meta-isar/recipes-bsp/u-boot/u-boot-beagleplay_2024.01.bb b/meta-isar/recipes-bsp/u-boot/u-boot-beagleplay_2024.01.bb
new file mode 100644
index 00000000..b58126e7
--- /dev/null
+++ b/meta-isar/recipes-bsp/u-boot/u-boot-beagleplay_2024.01.bb
@@ -0,0 +1,41 @@
+#
+# Copyright (c) Siemens AG, 2023-2024
+#
+# SPDX-License-Identifier: MIT
+
+require recipes-bsp/u-boot/u-boot-custom.inc
+
+TI_FIRMWARE_SRCREV = "9ee2fedb1fb4815f54310dd872d34faf9948c7c1"
+
+SRC_URI += " \
+ https://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \
+ https://git.ti.com/cgit/processor-firmware/ti-linux-firmware/plain/ti-sysfw/ti-fs-firmware-am62x-gp.bin?id=${TI_FIRMWARE_SRCREV};downloadfilename=ti-fs-firmware-am62x-gp.bin;name=sysfw \
+ https://git.ti.com/cgit/processor-firmware/ti-linux-firmware/plain/ti-sysfw/ti-fs-stub-firmware-am62x-gp.bin?id=${TI_FIRMWARE_SRCREV};downloadfilename=ti-fs-stub-firmware-am62x-gp.bin;name=sysfw-stub \
+ https://git.ti.com/cgit/processor-firmware/ti-linux-firmware/plain/ti-dm/am62xx/ipc_echo_testb_mcu1_0_release_strip.xer5f?id=${TI_FIRMWARE_SRCREV};downloadfilename=ipc_echo_testb_mcu1_0_release_strip.xer5f;name=dm \
+ file://0001-TMP-board-ti-am62x-Add-basic-initialization-for-usb-.patch \
+ file://rules-beagleplay"
+SRC_URI[sha256sum] = "b99611f1ed237bf3541bdc8434b68c96a6e05967061f992443cb30aabebef5b3"
+SRC_URI[sysfw.sha256sum] = "be7008fdf60ea7ac72d36f57a29c6a1cc6b1aa01a595eae7b3e0e927aae78e2b"
+SRC_URI[sysfw-stub.sha256sum] = "1d5b23b8395037539c3b97eda2f3cc887ac2d6d0c834c9238fb727efc3c8a253"
+SRC_URI[dm.sha256sum] = "6d8a1d8a8ea430efcc6effe025865df1e5eeebf572273d97e9529781e1d04663"
+
+S = "${WORKDIR}/u-boot-${PV}"
+
+COMPATIBLE_MACHINE = "beagleplay"
+
+U_BOOT_BIN_INSTALL = "tiboot3-am62x-gp-evm.bin tispl.bin_unsigned u-boot.img_unsigned"
+
+DEPENDS += "trusted-firmware-a-beagleplay optee-os-beagleplay"
+DEBIAN_BUILD_DEPENDS =. "gcc-arm-linux-gnueabihf, \
+ libssl-dev:native, libssl-dev, \
+ swig, python3-dev:native, python3-setuptools, python3-pyelftools, \
+ python3-jsonschema:native, python3-yaml:native, \
+ trusted-firmware-a-beagleplay, optee-os-beagleplay,"
+
+do_prepare_build:append() {
+ mkdir -p ${S}/ti-sysfw
+ cp ${WORKDIR}/ti-fs-*firmware-am62x-gp.bin ${S}/ti-sysfw
+ mkdir -p ${S}/ti-dm/am62xx
+ cp ${WORKDIR}/ipc_echo_testb_mcu1_0_release_strip.xer5f ${S}/ti-dm/am62xx
+ cp ${WORKDIR}/rules-beagleplay ${S}/debian/rules
+}
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 08/11] wic: Add hybrid-boot bootloader source plugin
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (6 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 07/11] beagleplay: Add U-Boot recipe Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 09/11] expand-on-first-boot: Preserve MBR on expansion of GPT disks Jan Kiszka
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
Creates a hybrid partition table of both GPT and DOS, only adding the
first active partition to the DOS table. This addresses use cases where
the (firmware-)bootable partition is not the EFI partition while EFI
should be used later on. The bootimg-biosplusefi does not suite here.
Usage in a wks file:
part /bootable-partition --active ...
part / ...
bootloader --source hybrid-boot ...
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
.../lib/wic/plugins/source/hybrid-boot.py | 38 +++++++++++++++++++
1 file changed, 38 insertions(+)
create mode 100644 meta/scripts/lib/wic/plugins/source/hybrid-boot.py
diff --git a/meta/scripts/lib/wic/plugins/source/hybrid-boot.py b/meta/scripts/lib/wic/plugins/source/hybrid-boot.py
new file mode 100644
index 00000000..c73e89e6
--- /dev/null
+++ b/meta/scripts/lib/wic/plugins/source/hybrid-boot.py
@@ -0,0 +1,38 @@
+#
+# Copyright (c) Siemens AG, 2024
+#
+# SPDX-License-Identifier: MIT
+#
+# DESCRIPTION
+# This creates a hybrid DOS partition table for a GPT disk, adding the
+# partition marked as bootable to that table. This is useful if the boot
+# partition is different from the EFI partition so that bootimg-biosplusefi
+# cannot be used. Implemented as bootloader source plugin.
+
+import logging
+
+from wic import WicError
+from wic.pluginbase import SourcePlugin
+from wic.misc import exec_native_cmd
+
+logger = logging.getLogger('wic')
+
+class HybridBoot(SourcePlugin):
+ """
+ Create hybrid partition table with a single bootable partition.
+ """
+
+ name = 'hybrid-boot'
+
+ @classmethod
+ def do_install_disk(cls, disk, disk_name, creator, workdir, oe_builddir,
+ bootimg_dir, kernel_dir, native_sysroot):
+ for part in creator.parts:
+ if part.active:
+ break
+ else:
+ raise WicError("No active partition found")
+
+ logger.info("Creating hybrid partition table, using partition %d as bootable DOS partition" % part.realnum)
+ exec_native_cmd("sgdisk %s --hybrid %d:EE" % (disk.path, part.realnum), native_sysroot)
+ exec_native_cmd("sfdisk --label-nested dos -A %s %d" % (disk.path, part.realnum), native_sysroot)
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 09/11] expand-on-first-boot: Preserve MBR on expansion of GPT disks
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (7 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 08/11] wic: Add hybrid-boot bootloader source plugin Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 10/11] Add support for the BeaglePlay board Jan Kiszka
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
In order to keep potential hybrid partition setups intact, preserve the
legacy MBR when a GPT disk is being expanded. This is needed because we
rewrite the partitioning via sfdisk which overwrites the MBR. In the
hypbrid setup, the legacy MBR plays no role regarding the expanded
partition, thus can be simply left untouched.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
.../files/expand-last-partition.sh | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/meta/recipes-support/expand-on-first-boot/files/expand-last-partition.sh b/meta/recipes-support/expand-on-first-boot/files/expand-last-partition.sh
index 7d658864..e6dbd62e 100755
--- a/meta/recipes-support/expand-on-first-boot/files/expand-last-partition.sh
+++ b/meta/recipes-support/expand-on-first-boot/files/expand-last-partition.sh
@@ -38,6 +38,11 @@ if [ "$DISK_SIZE" -lt "$MINIMAL_SIZE" ]; then
exit 0
fi
+IS_GPT="$(sfdisk -d "${BOOT_DEV}" 2>/dev/null | grep -q "label: gpt" && echo 1)"
+if [ "$IS_GPT" = "1" ]; then
+ dd if="${BOOT_DEV}" of=/dev/shm/__mbr__.bak count=1
+fi
+
LAST_PART="$(sfdisk -d "${BOOT_DEV}" 2>/dev/null | tail -1 | cut -d ' ' -f 1)"
# Transform the partition table as follows:
@@ -54,6 +59,11 @@ sfdisk -d "${BOOT_DEV}" 2>/dev/null | \
sed 's|^\('"${LAST_PART}"' .*, \)size=[^,]*, |\1|' | \
sfdisk --force "${BOOT_DEV}"
+if [ "$IS_GPT" = "1" ]; then
+ dd if=/dev/shm/__mbr__.bak of="${BOOT_DEV}"
+ rm /dev/shm/__mbr__.bak
+fi
+
# Inform the kernel about the partitioning change
partx -u "${LAST_PART}"
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 10/11] Add support for the BeaglePlay board
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (8 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 09/11] expand-on-first-boot: Preserve MBR on expansion of GPT disks Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-01-14 13:39 ` [PATCH v2 11/11] ci: Add beagleplay to full CI test Jan Kiszka
2024-03-20 15:17 ` [PATCH v2 00/11] Add support for BeaglePlay Uladzimir Bely
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
This creates a minimal image for the BeaglePlay board [1], using UEFI as
boot method.
That is requiring some extra work so that the image can also be used on
SD cards: The ROM loader only supports legacy DOS partition tables, but
UEFI needs GPT. We address this by creating a hybrid image with both
partition tables in place using the new hybrid-boot bootloader source
plugin.
[1] https://www.beagleboard.org/boards/beagleplay
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
kas/machine/Kconfig | 5 +++++
kas/machine/beagleplay.yaml | 9 +++++++++
meta-isar/conf/machine/beagleplay.conf | 20 +++++++++++++++++++
meta-isar/conf/mc.conf | 1 +
.../conf/multiconfig/beagleplay-bookworm.conf | 7 +++++++
.../lib/wic/canned-wks/beagleplay.wks.in | 11 ++++++++++
6 files changed, 53 insertions(+)
create mode 100644 kas/machine/beagleplay.yaml
create mode 100644 meta-isar/conf/machine/beagleplay.conf
create mode 100644 meta-isar/conf/multiconfig/beagleplay-bookworm.conf
create mode 100644 meta-isar/scripts/lib/wic/canned-wks/beagleplay.wks.in
diff --git a/kas/machine/Kconfig b/kas/machine/Kconfig
index d0e3963a..b06cddf1 100644
--- a/kas/machine/Kconfig
+++ b/kas/machine/Kconfig
@@ -14,6 +14,10 @@ config MACHINE_BANANAPI
bool "bananapi"
depends on DEBIAN_BUSTER || DEBIAN_BULLSEYE || DEBIAN_BOOKWORM
+config MACHINE_BEAGLEPLAY
+ bool "beagleplay"
+ depends on DEBIAN_BOOKWORM
+
config MACHINE_CONTAINER_AMD64
bool "container-amd64"
depends on DEBIAN_BUSTER || DEBIAN_BULLSEYE || DEBIAN_BOOKWORM
@@ -111,6 +115,7 @@ endchoice
config KAS_INCLUDE_MACHINE
string
default "kas/machine/bananapi.yaml" if MACHINE_BANANAPI
+ default "kas/machine/beagleplay.yaml" if MACHINE_BEAGLEPLAY
default "kas/machine/container-amd64.yaml" if MACHINE_CONTAINER_AMD64
default "kas/machine/de0-nano-soc.yaml" if MACHINE_DE0_NANO_SOC
default "kas/machine/hikey.yaml" if MACHINE_HIKEY
diff --git a/kas/machine/beagleplay.yaml b/kas/machine/beagleplay.yaml
new file mode 100644
index 00000000..7c4ecfe7
--- /dev/null
+++ b/kas/machine/beagleplay.yaml
@@ -0,0 +1,9 @@
+# This software is a part of ISAR.
+# Copyright (c) Siemens AG, 2023-2024
+#
+# SPDX-License-Identifier: MIT
+
+header:
+ version: 14
+
+machine: beagleplay
diff --git a/meta-isar/conf/machine/beagleplay.conf b/meta-isar/conf/machine/beagleplay.conf
new file mode 100644
index 00000000..d030256d
--- /dev/null
+++ b/meta-isar/conf/machine/beagleplay.conf
@@ -0,0 +1,20 @@
+#
+# Copyright (c) Siemens AG, 2023-2024
+#
+# SPDX-License-Identifier: MIT
+
+DISTRO_ARCH ?= "arm64"
+
+KERNEL_NAME ?= "mainline"
+
+IMAGE_FSTYPES ?= "wic"
+WKS_FILE ?= "beagleplay.wks.in"
+IMAGER_INSTALL += "${SYSTEMD_BOOTLOADER_INSTALL} u-boot-beagleplay"
+IMAGER_BUILD_DEPS += "u-boot-beagleplay"
+
+IMAGE_BOOT_FILES = " \
+ /usr/lib/u-boot/beagleplay/tiboot3-am62x-gp-evm.bin;tiboot3.bin \
+ /usr/lib/u-boot/beagleplay/tispl.bin_unsigned;tispl.bin \
+ /usr/lib/u-boot/beagleplay/u-boot.img_unsigned;u-boot.img"
+
+IMAGE_PREINSTALL += "firmware-ti-connectivity"
diff --git a/meta-isar/conf/mc.conf b/meta-isar/conf/mc.conf
index d16f54b5..f1fb50c6 100644
--- a/meta-isar/conf/mc.conf
+++ b/meta-isar/conf/mc.conf
@@ -28,6 +28,7 @@ BBMULTICONFIG = " \
qemuriscv64-sid \
bananapi-buster \
bananapi-bullseye \
+ beagleplay-bookworm \
de0-nano-soc-buster \
de0-nano-soc-bullseye \
hikey-bullseye \
diff --git a/meta-isar/conf/multiconfig/beagleplay-bookworm.conf b/meta-isar/conf/multiconfig/beagleplay-bookworm.conf
new file mode 100644
index 00000000..2edd96d6
--- /dev/null
+++ b/meta-isar/conf/multiconfig/beagleplay-bookworm.conf
@@ -0,0 +1,7 @@
+#
+# Copyright (c) Siemens AG, 2023-2024
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "beagleplay"
+DISTRO ?= "debian-bookworm"
diff --git a/meta-isar/scripts/lib/wic/canned-wks/beagleplay.wks.in b/meta-isar/scripts/lib/wic/canned-wks/beagleplay.wks.in
new file mode 100644
index 00000000..930db25c
--- /dev/null
+++ b/meta-isar/scripts/lib/wic/canned-wks/beagleplay.wks.in
@@ -0,0 +1,11 @@
+#
+# Copyright (c) Siemens AG, 2023-2024
+#
+# SPDX-License-Identifier: MIT
+
+part /boot/firmware --source bootimg-partition --fstype=vfat --label firmware --active --align 1024 --size 16M --overhead-factor 1 --extra-space 0 --use-uuid --part-type E3C9E316-0B5C-4DB8-817D-F92DF00215AE
+part /boot --source bootimg-efi-isar --sourceparams "loader=systemd-boot" --label efi --part-type EF00 --align 1024 --use-uuid
+
+part / --source rootfs --fstype ext4 --mkfs-extraopts "-T default" --label platform --align 1024 --use-uuid --exclude-path boot/
+
+bootloader --ptable gpt --source hybrid-boot --timeout=0 --append "rootwait rw"
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 11/11] ci: Add beagleplay to full CI test
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (9 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 10/11] Add support for the BeaglePlay board Jan Kiszka
@ 2024-01-14 13:39 ` Jan Kiszka
2024-03-20 15:17 ` [PATCH v2 00/11] Add support for BeaglePlay Uladzimir Bely
11 siblings, 0 replies; 13+ messages in thread
From: Jan Kiszka @ 2024-01-14 13:39 UTC (permalink / raw)
To: isar-users; +Cc: Nishanth Menon
From: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
testsuite/citest.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/testsuite/citest.py b/testsuite/citest.py
index 7be2b86b..472af549 100755
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -206,6 +206,7 @@ class NoCrossTest(CIBaseTest):
'mc:qemui386-bookworm:isar-image-base',
'mc:qemumipsel-bookworm:isar-image-ci',
'mc:hikey-bookworm:isar-image-base',
+ 'mc:beagleplay-bookworm:isar-image-base',
]
self.init()
--
2.35.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 00/11] Add support for BeaglePlay
2024-01-14 13:39 [PATCH v2 00/11] Add support for BeaglePlay Jan Kiszka
` (10 preceding siblings ...)
2024-01-14 13:39 ` [PATCH v2 11/11] ci: Add beagleplay to full CI test Jan Kiszka
@ 2024-03-20 15:17 ` Uladzimir Bely
11 siblings, 0 replies; 13+ messages in thread
From: Uladzimir Bely @ 2024-03-20 15:17 UTC (permalink / raw)
To: Jan Kiszka, isar-users
On Sun, 2024-01-14 at 14:39 +0100, 'Jan Kiszka' via isar-users wrote:
> This adds basic support for the BeaglePlay, a TI AM62x based ARM64
> board (https://www.beagleboard.org/boards/beagleplay). The
> integration
> is upstream-based: U-Boot 2024.01-rc6, TF-A 2.10, OP-TEE 4.0.0 and
> kernel 6.6.11. Major features are working but others may not
> (upstream-based integrations are still uncommon...).
>
> Patch 1 obsoletes patch 7 from the recent RISC-V series v2
> (
> https://groups.google.com/g/isar-users/c/0QBjhzcs3ac/m/KKPN9k8QAgAJ).
>
> Still on my todo list is demoing RPMB and fTPM on this board, altough
> it
> does not support real security (GP variant only).
>
> Changes in v2:
> - fix and simplify the hybrid partition table generation
> (previous approach caused bmap corruptions)
> - hook into CI
> - update to 6.6.11
>
> Jan
>
> Jan Kiszka (11):
> meta-isar: linux-mainline: Update to 6.6.11
> optee-os: Switch default binary to tee-raw.bin
> u-boot-custom: Allow to set BL31 and TEE from recipes
> u-boot-custom: Allow to define different installation binaries
> beagleplay: Add TF-A recipe
> beagleplay: Add OP-TEE recipe
> beagleplay: Add U-Boot recipe
> wic: Add hybrid-boot bootloader source plugin
> expand-on-first-boot: Preserve MBR on expansion of GPT disks
> Add support for the BeaglePlay board
> ci: Add beagleplay to full CI test
>
> RECIPE-API-CHANGELOG.md | 5 ++
> kas/machine/Kconfig | 5 ++
> kas/machine/beagleplay.yaml | 9 +++
> meta-isar/conf/machine/beagleplay.conf | 20 +++++
> meta-isar/conf/mc.conf | 1 +
> .../conf/multiconfig/beagleplay-bookworm.conf | 7 ++
> .../optee-os/optee-os-beagleplay_4.0.0.bb | 18 +++++
> .../trusted-firmware-a-beagleplay_2.10.bb | 15 ++++
> ...2x-Add-basic-initialization-for-usb-.patch | 80
> +++++++++++++++++++
> .../recipes-bsp/u-boot/files/rules-beagleplay | 16 ++--
> .../u-boot/u-boot-beagleplay_2024.01.bb | 41 ++++++++++
> ...ne_5.4.203.bb => linux-mainline_6.6.11.bb} | 6 +-
> .../lib/wic/canned-wks/beagleplay.wks.in | 11 +++
> meta/recipes-bsp/optee-os/optee-os.inc | 2 +-
> .../u-boot/files/debian/rules.tmpl | 2 +-
> meta/recipes-bsp/u-boot/u-boot-custom.inc | 12 ++-
> .../files/expand-last-partition.sh | 10 +++
> .../lib/wic/plugins/source/hybrid-boot.py | 38 +++++++++
> testsuite/citest.py | 1 +
> 19 files changed, 283 insertions(+), 16 deletions(-)
> create mode 100644 kas/machine/beagleplay.yaml
> create mode 100644 meta-isar/conf/machine/beagleplay.conf
> create mode 100644 meta-isar/conf/multiconfig/beagleplay-
> bookworm.conf
> create mode 100644 meta-isar/recipes-bsp/optee-os/optee-os-
> beagleplay_4.0.0.bb
> create mode 100644 meta-isar/recipes-bsp/trusted-firmware-a/trusted-
> firmware-a-beagleplay_2.10.bb
> create mode 100644 meta-isar/recipes-bsp/u-boot/files/0001-TMP-
> board-ti-am62x-Add-basic-initialization-for-usb-.patch
> copy meta/recipes-bsp/u-boot/files/debian/rules.tmpl => meta-
> isar/recipes-bsp/u-boot/files/rules-beagleplay (55%)
> create mode 100644 meta-isar/recipes-bsp/u-boot/u-boot-
> beagleplay_2024.01.bb
> rename meta-isar/recipes-kernel/linux/{linux-mainline_5.4.203.bb =>
> linux-mainline_6.6.11.bb} (85%)
> create mode 100644 meta-isar/scripts/lib/wic/canned-
> wks/beagleplay.wks.in
> create mode 100644 meta/scripts/lib/wic/plugins/source/hybrid-
> boot.py
>
> --
> 2.35.3
>
Applied to next.
Additionally, checked the images built with the patchset together with
hardware targets we have in the lab that also use linux-mainline this
patchset updates to 6.6.11.
^ permalink raw reply [flat|nested] 13+ messages in thread