From: Christian Marangi <ansuelsmth@gmail.com>
To: Simon Glass <sjg@chromium.org>, Tom Rini <trini@konsulko.com>,
Mattijs Korpershoek <mkorpershoek@kernel.org>,
Marek Vasut <marek.vasut+renesas@mailbox.org>,
Heiko Schocher <hs@nabladev.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Alexey Charkov <alchark@flipper.net>,
Daniel Golle <daniel@makrotopia.org>,
Aristo Chen <aristo.chen@canonical.com>,
Christian Marangi <ansuelsmth@gmail.com>,
"Lucien.Jheng" <lucienzx159@gmail.com>,
Mehmet Fide <mehmet.fide@screeningeagle.com>,
Casey Connolly <casey.connolly@linaro.org>,
Michal Simek <michal.simek@amd.com>,
Quentin Schulz <quentin.schulz@cherry.de>,
Johan Jonker <jbx6244@gmail.com>, Anshul Dalal <anshuld@ti.com>,
Romain Gantois <romain.gantois@bootlin.com>,
Mateus Lima Alves <mateuslima.ti@gmail.com>,
Marcello Sylvester Bauer <marcello.bauer@9elements.com>,
Tan Siewert <tan.siewert@9elements.com>,
Peng Fan <peng.fan@nxp.com>,
Patrice Chotard <patrice.chotard@foss.st.com>,
Yao Zi <me@ziyao.cc>, Heinrich Schuchardt <xypron.glpk@gmx.de>,
Martin Schwan <m.schwan@phytec.de>,
u-boot@lists.u-boot-project.org
Subject: [PATCH v8 7/7] test: dm: Add test for FW Loader feature
Date: Thu, 22 Oct 2026 21:40:42 +0200 [thread overview]
Message-ID: <20261022194049.670889-8-ansuelsmth@gmail.com> (raw)
In-Reply-To: <20261022194049.670889-1-ansuelsmth@gmail.com>
Add basic test for FW Loader feature for the Filesystem way and FIP.
Additional MMC testing image are added that loads a dummy firmware.bin in
a fat partition or a simple FIP blob.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
arch/sandbox/dts/test.dts | 38 +++++
configs/sandbox64_defconfig | 2 +
configs/sandbox_defconfig | 2 +
configs/sandbox_flattree_defconfig | 2 +
configs/sandbox_noinst_defconfig | 1 +
configs/sandbox_spl_defconfig | 2 +
configs/sandbox_vpl_defconfig | 2 +
test/dm/Makefile | 1 +
test/dm/fw_loader.c | 218 +++++++++++++++++++++++++++++
test/py/tests/fip/test.fip | Bin 0 -> 101 bytes
test/py/tests/test_ut.py | 26 ++++
11 files changed, 294 insertions(+)
create mode 100644 test/dm/fw_loader.c
create mode 100644 test/py/tests/fip/test.fip
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 25c99ef81472..772d8dd548bc 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -189,6 +189,18 @@
};
};
+ fs_loader: fs-loader {
+ bootph-all;
+ compatible = "u-boot,fs-loader";
+ phandlepart = <&mmc12 1>;
+ };
+
+ fip_loader: fip-loader {
+ bootph-all;
+ compatible = "u-boot,fip-loader";
+ phandlepart = <&mmc13 1>;
+ };
+
cedit: cedit {
};
@@ -1398,6 +1410,20 @@
filename = "mmc11.img";
};
+ /* This is used for FS Loader tests */
+ mmc12: mmc12 {
+ status = "disabled";
+ compatible = "sandbox,mmc";
+ filename = "mmc12.img";
+ };
+
+ /* This is used for FIP Loader tests */
+ mmc13: mmc13 {
+ status = "disabled";
+ compatible = "sandbox,mmc";
+ filename = "mmc13.img";
+ };
+
pch {
compatible = "sandbox,pch";
};
@@ -2143,6 +2169,18 @@
ethphy1: ethernet-phy@1 {
reg = <1>;
};
+
+ ethernet-phy@2 {
+ reg = <2>;
+
+ firmware-loader = <&fs_loader>;
+ };
+
+ ethernet-phy@3 {
+ reg = <3>;
+
+ firmware-loader = <&fip_loader>;
+ };
};
pm-bus-test {
diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
index 59e08d03f776..7d56ab984c1d 100644
--- a/configs/sandbox64_defconfig
+++ b/configs/sandbox64_defconfig
@@ -266,9 +266,11 @@ CONFIG_WDT=y
CONFIG_WDT_GPIO=y
CONFIG_WDT_SANDBOX=y
CONFIG_WDT_ALARM_SANDBOX=y
+CONFIG_FIP_LOADER=y
CONFIG_FS_CBFS=y
CONFIG_FS_EXFAT=y
CONFIG_FS_CRAMFS=y
+CONFIG_FS_LOADER=y
CONFIG_CMD_DHRYSTONE=y
CONFIG_TPM=y
CONFIG_ERRNO_STR=y
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index f307972a762d..cf3c858b4b72 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -383,9 +383,11 @@ CONFIG_WDT_GPIO=y
CONFIG_WDT_SANDBOX=y
CONFIG_WDT_ALARM_SANDBOX=y
CONFIG_WDT_FTWDT010=y
+CONFIG_FIP_LOADER=y
CONFIG_FS_CBFS=y
CONFIG_FS_EXFAT=y
CONFIG_FS_CRAMFS=y
+CONFIG_FS_LOADER=y
CONFIG_ADDR_MAP=y
CONFIG_PANIC_HANG=y
CONFIG_PMBUS=y
diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
index 57f915d4ba9a..3488036ddf8f 100644
--- a/configs/sandbox_flattree_defconfig
+++ b/configs/sandbox_flattree_defconfig
@@ -12,10 +12,12 @@ CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
CONFIG_EFI_CAPSULE_AUTHENTICATE=y
CONFIG_EFI_CAPSULE_CRT_FILE="board/sandbox/capsule_pub_key_good.crt"
CONFIG_BUTTON_CMD=y
+CONFIG_FIP_LOADER=y
CONFIG_FIT=y
CONFIG_FIT_SIGNATURE=y
CONFIG_FIT_VERITY=y
CONFIG_FIT_VERBOSE=y
+CONFIG_FS_LOADER=y
CONFIG_LEGACY_IMAGE_FORMAT=y
CONFIG_BOOTSTAGE=y
CONFIG_BOOTSTAGE_REPORT=y
diff --git a/configs/sandbox_noinst_defconfig b/configs/sandbox_noinst_defconfig
index 7a7550127956..941bf2d69431 100644
--- a/configs/sandbox_noinst_defconfig
+++ b/configs/sandbox_noinst_defconfig
@@ -21,6 +21,7 @@ CONFIG_SYS_MEMTEST_END=0x00101000
CONFIG_FIT=y
CONFIG_FIT_SIGNATURE=y
CONFIG_FIT_VERBOSE=y
+CONFIG_FS_LOADER=y
CONFIG_SPL_LOAD_FIT=y
CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
CONFIG_SPL_LOAD_FIT_ADDRESS=0x0
diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig
index 60b497f48886..183611632ef8 100644
--- a/configs/sandbox_spl_defconfig
+++ b/configs/sandbox_spl_defconfig
@@ -223,8 +223,10 @@ CONFIG_I2C_EDID=y
CONFIG_VIDEO_SANDBOX_SDL=y
CONFIG_OSD=y
CONFIG_SANDBOX_OSD=y
+CONFIG_FIP_LOADER=y
CONFIG_FS_CBFS=y
CONFIG_FS_CRAMFS=y
+CONFIG_FS_LOADER=y
# CONFIG_SPL_USE_TINY_PRINTF is not set
CONFIG_CMD_DHRYSTONE=y
CONFIG_RSA_VERIFY_WITH_PKEY=y
diff --git a/configs/sandbox_vpl_defconfig b/configs/sandbox_vpl_defconfig
index c85bfbfb3b15..445e979915e8 100644
--- a/configs/sandbox_vpl_defconfig
+++ b/configs/sandbox_vpl_defconfig
@@ -231,8 +231,10 @@ CONFIG_CONSOLE_TRUETYPE_CANTORAONE=y
CONFIG_VIDEO_SANDBOX_SDL=y
CONFIG_OSD=y
CONFIG_SANDBOX_OSD=y
+CONFIG_FIP_LOADER=y
CONFIG_FS_CBFS=y
CONFIG_FS_CRAMFS=y
+CONFIG_FS_LOADER=y
# CONFIG_SPL_USE_TINY_PRINTF is not set
CONFIG_CMD_DHRYSTONE=y
CONFIG_RSA_VERIFY_WITH_PKEY=y
diff --git a/test/dm/Makefile b/test/dm/Makefile
index 5dd6b57bbe84..2f095ceedd8c 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -59,6 +59,7 @@ obj-$(CONFIG_EXTCON) += extcon.o
ifneq ($(CONFIG_EFI_PARTITION),)
obj-$(CONFIG_FASTBOOT_FLASH_MMC) += fastboot.o
endif
+obj-$(CONFIG_FW_LOADER_UCLASS) += fw_loader.o
obj-$(CONFIG_FIRMWARE) += firmware.o
obj-$(CONFIG_DM_FPGA) += fpga.o
obj-$(CONFIG_FWU_MDATA_GPT_BLK) += fwu_mdata.o
diff --git a/test/dm/fw_loader.c b/test/dm/fw_loader.c
new file mode 100644
index 000000000000..71065602cb58
--- /dev/null
+++ b/test/dm/fw_loader.c
@@ -0,0 +1,218 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+#include <dm.h>
+#include <dm/device.h>
+#include <dm/lists.h>
+#include <dm/test.h>
+#include <fw_loader.h>
+#include <test/test.h>
+#include <test/ut.h>
+
+static int bind_mmc(struct unit_test_state *uts, const char *mmc)
+{
+ struct udevice *dev;
+ ofnode root, node;
+
+ /* Enable the mmc12 node for this test */
+ root = oftree_root(oftree_default());
+ node = ofnode_find_subnode(root, mmc);
+ ut_assert(ofnode_valid(node));
+ ut_assertok(lists_bind_fdt(gd->dm_root, node, &dev, NULL, false));
+
+ return 0;
+}
+
+static int dm_test_fw_loader_get_dev(struct unit_test_state *uts,
+ const char *name, struct udevice **dev)
+{
+ struct udevice *mdio_dev;
+ ofnode mdio_node, phy_node;
+
+ ut_assertok(uclass_get_device_by_name(UCLASS_MDIO, "mdio-test",
+ &mdio_dev));
+
+ mdio_node = dev_ofnode(mdio_dev);
+ ut_assert(ofnode_valid(mdio_node));
+
+ phy_node = ofnode_find_subnode(mdio_node, name);
+ ut_assert(ofnode_valid(phy_node));
+
+ return get_fw_loader_from_node(phy_node, dev);
+}
+
+static int dm_test_fs_loader_get(struct unit_test_state *uts)
+{
+ struct udevice *fw_loader_dev = NULL;
+ int ret;
+
+ ut_assertok(bind_mmc(uts, "mmc12"));
+
+ ret = dm_test_fw_loader_get_dev(uts, "ethernet-phy@1", &fw_loader_dev);
+ ut_asserteq(-ENODEV, ret);
+ ut_assertnull(fw_loader_dev);
+
+ fw_loader_dev = NULL;
+ ret = dm_test_fw_loader_get_dev(uts, "ethernet-phy@2", &fw_loader_dev);
+ ut_assertok(ret);
+ ut_assertnonnull(fw_loader_dev);
+
+ return 0;
+}
+DM_TEST(dm_test_fs_loader_get, UTF_SCAN_FDT);
+
+static int dm_test_fip_loader_get(struct unit_test_state *uts)
+{
+ struct udevice *fw_loader_dev = NULL;
+ int ret;
+
+ ut_assertok(bind_mmc(uts, "mmc13"));
+
+ ret = dm_test_fw_loader_get_dev(uts, "ethernet-phy@3", &fw_loader_dev);
+ ut_assertok(ret);
+ ut_assertnonnull(fw_loader_dev);
+
+ return 0;
+}
+DM_TEST(dm_test_fip_loader_get, UTF_SCAN_FDT);
+
+static int dm_test_fs_loader_get_fw_size(struct unit_test_state *uts)
+{
+ struct udevice *fw_loader_dev = NULL;
+ int ret;
+
+ ut_assertok(bind_mmc(uts, "mmc12"));
+
+ ret = dm_test_fw_loader_get_dev(uts, "ethernet-phy@2", &fw_loader_dev);
+ ut_assertok(ret);
+ ut_assertnonnull(fw_loader_dev);
+
+ ret = request_firmware_size(fw_loader_dev, "firmware.bin");
+ ut_asserteq(256, ret);
+
+ return 0;
+}
+DM_TEST(dm_test_fs_loader_get_fw_size, UTF_SCAN_FDT);
+
+static int dm_test_fip_loader_get_fw_size(struct unit_test_state *uts)
+{
+ struct udevice *fw_loader_dev = NULL;
+ int ret;
+
+ ut_assertok(bind_mmc(uts, "mmc13"));
+
+ ret = dm_test_fw_loader_get_dev(uts, "ethernet-phy@3", &fw_loader_dev);
+ ut_assertok(ret);
+ ut_assertnonnull(fw_loader_dev);
+
+ ret = request_firmware_size(fw_loader_dev,
+ "45a113ac-c7f2-30b0-90a5-a399ab912716");
+ ut_asserteq(5, ret);
+
+ return 0;
+}
+DM_TEST(dm_test_fip_loader_get_fw_size, UTF_SCAN_FDT);
+
+static int dm_test_fs_loader_get_fw_in_buf(struct unit_test_state *uts)
+{
+ struct udevice *fw_loader_dev = NULL;
+ int firmware_size = 256;
+ char *buf;
+ int ret;
+
+ ut_assertok(bind_mmc(uts, "mmc12"));
+
+ ret = dm_test_fw_loader_get_dev(uts, "ethernet-phy@2", &fw_loader_dev);
+ ut_assertok(ret);
+ ut_assertnonnull(fw_loader_dev);
+
+ ret = request_firmware_size(fw_loader_dev, "firmware.bin");
+ ut_asserteq(firmware_size, ret);
+
+ buf = calloc(firmware_size, sizeof(*buf));
+ ut_assertnonnull(buf);
+
+ ret = request_firmware_into_buf(fw_loader_dev, "firmware.bin",
+ buf, firmware_size, 0);
+ ut_asserteq(firmware_size, ret);
+
+ ret = request_firmware_into_buf(fw_loader_dev, "firmware.bin",
+ buf, firmware_size - 10, 10);
+ ut_asserteq(firmware_size - 10, ret);
+
+ ret = request_firmware_into_buf(fw_loader_dev, "firmware.bin",
+ buf, firmware_size, firmware_size);
+ ut_asserteq(0, ret);
+
+ ret = request_firmware_into_buf(fw_loader_dev, "firmware.bin",
+ buf, firmware_size, firmware_size + 1);
+ ut_asserteq(0, ret);
+
+ ret = request_firmware_into_buf(fw_loader_dev, "firmware2.bin",
+ buf, firmware_size, 0);
+ ut_asserteq(-ENOENT, ret);
+
+ free(buf);
+ return 0;
+}
+DM_TEST(dm_test_fs_loader_get_fw_in_buf, UTF_SCAN_FDT);
+
+static int dm_test_fip_loader_get_fw_in_buf(struct unit_test_state *uts)
+{
+ struct udevice *fw_loader_dev = NULL;
+ int firmware_size = 5;
+ char *buf;
+ int ret;
+
+ ut_assertok(bind_mmc(uts, "mmc13"));
+
+ ret = dm_test_fw_loader_get_dev(uts, "ethernet-phy@3", &fw_loader_dev);
+ ut_assertok(ret);
+ ut_assertnonnull(fw_loader_dev);
+
+ /* uuidgen -n @dns --md5 --name test = 45a113ac-c7f2-30b0-90a5-a399ab912716*/
+ ret = request_firmware_size(fw_loader_dev,
+ "45a113ac-c7f2-30b0-90a5-a399ab912716");
+ ut_asserteq(firmware_size, ret);
+
+ buf = calloc(firmware_size, sizeof(*buf));
+ ut_assertnonnull(buf);
+
+ ret = request_firmware_into_buf(fw_loader_dev,
+ "45a113ac-c7f2-30b0-90a5-a399ab912716",
+ buf, firmware_size, 0);
+ ut_asserteq(firmware_size, ret);
+ ut_asserteq_mem("test\n", buf, firmware_size);
+
+ memset(buf, 0, firmware_size);
+ ret = request_firmware_into_buf(fw_loader_dev,
+ "45a113ac-c7f2-30b0-90a5-a399ab912716",
+ buf, firmware_size - 1, 0);
+ ut_asserteq(firmware_size - 1, ret);
+ ut_asserteq_mem("test", buf, firmware_size - 1);
+
+ memset(buf, 0, firmware_size);
+ ret = request_firmware_into_buf(fw_loader_dev,
+ "45a113ac-c7f2-30b0-90a5-a399ab912716",
+ buf, firmware_size - 2, 2);
+ ut_asserteq(firmware_size - 2, ret);
+ ut_asserteq_mem("st\n", buf, firmware_size - 2);
+
+ ret = request_firmware_into_buf(fw_loader_dev,
+ "45a113ac-c7f2-30b0-90a5-a399ab912716",
+ buf, firmware_size, firmware_size);
+ ut_asserteq(0, ret);
+
+ ret = request_firmware_into_buf(fw_loader_dev,
+ "45a113ac-c7f2-30b0-90a5-a399ab912716",
+ buf, firmware_size, firmware_size + 1);
+ ut_asserteq(-EINVAL, ret);
+
+ ret = request_firmware_into_buf(fw_loader_dev,
+ "300b74d6-cc34-4e68-ba5d-733157f633f7",
+ buf, firmware_size, 0);
+ ut_asserteq(-ENOENT, ret);
+
+ free(buf);
+ return 0;
+}
+DM_TEST(dm_test_fip_loader_get_fw_in_buf, UTF_SCAN_FDT);
diff --git a/test/py/tests/fip/test.fip b/test/py/tests/fip/test.fip
new file mode 100644
index 0000000000000000000000000000000000000000..a793dfd05c016b2bfe693a0b908877689abe8e5b
GIT binary patch
literal 101
zcmZQ%NLf`8W+KD@1+EK)*Bt+3uwlZ|#WPn=R2NHtinGEL;Gk1+h?k@mmv8|9cc={D
literal 0
HcmV?d00001
diff --git a/test/py/tests/test_ut.py b/test/py/tests/test_ut.py
index 2a5acc18c612..f3da9f3ef005 100644
--- a/test/py/tests/test_ut.py
+++ b/test/py/tests/test_ut.py
@@ -685,6 +685,31 @@ def test_ut_dm_init(ubman):
with open(fn, 'wb') as fh:
fh.write(data)
+def setup_fw_loader_image(ubman):
+ """Create a 2MB disk image with a dummy firmware on it"""
+ mmc_dev = 12
+ fname, mnt = fs_helper.setup_image(ubman, mmc_dev, 0xc, img_size=2)
+
+ fw = os.path.join(mnt, 'firmware.bin')
+ data = b'\xaa' * 256
+ with open(fw, 'wb') as fh:
+ fh.write(data)
+
+ fsfile = 'vfat1M.img'
+ utils.run_and_log(ubman, f'fallocate -l 1M {fsfile}')
+ utils.run_and_log(ubman, f'mkfs.vfat {fsfile}')
+ utils.run_and_log(ubman, ['sh', '-c', f'mcopy -i {fsfile} {mnt}/* ::/'])
+ copy_partition(ubman, fsfile, fname)
+ utils.run_and_log(ubman, f'rm -rf {mnt}')
+ utils.run_and_log(ubman, f'rm -f {fsfile}')
+
+ mmc_dev = 13
+ fname, mnt = fs_helper.setup_image(ubman, mmc_dev, 0x83, img_size=2)
+
+ fipfile = os.path.join(ubman.config.source_dir,
+ 'test/py/tests/fip/test.fip')
+ copy_partition(ubman, fipfile, fname)
+ utils.run_and_log(ubman, f'rm -rf {mnt}')
def setup_efi_image(ubman):
"""Create a 20MB disk image with an EFI app on it"""
@@ -752,6 +777,7 @@ def test_ut_dm_init_bootstd(ubman):
setup_cedit_file(ubman)
setup_cros_image(ubman)
setup_android_image(ubman)
+ setup_fw_loader_image(ubman)
setup_efi_image(ubman)
setup_rauc_image(ubman)
setup_bls_prefix_image(ubman)
--
2.55.0
next prev parent reply other threads:[~2026-10-22 19:41 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-22 19:40 [PATCH v8 0/7] misc: fs_loader: reorg and split to FS and FW loader + FIP loader Christian Marangi
2026-10-22 19:40 ` [PATCH v8 1/7] misc: fs_loader: fix ubifs not unmounted on dev_get_priv error Christian Marangi
2026-10-22 19:40 ` [PATCH v8 2/7] misc: fs_loader: reorganize and split to FS loader and FW UCLASS Christian Marangi
2026-10-23 13:12 ` Simon Glass
2026-10-23 16:22 ` Christian Marangi
2026-10-22 19:40 ` [PATCH v8 3/7] misc: fw_loader: implement generic get_fw_loader_from_node() Christian Marangi
2026-10-22 19:40 ` [PATCH v8 4/7] misc: fw_loader: implement request_firmware_size() OP Christian Marangi
2026-10-22 19:40 ` [PATCH v8 5/7] misc: fw_loader: introduce FIP loader driver Christian Marangi
2026-10-23 13:12 ` Simon Glass
2026-10-23 16:22 ` Christian Marangi
2026-10-22 19:40 ` [PATCH v8 6/7] doc: dtbinding: Update documentation for Generic Firmware loader Christian Marangi
2026-10-23 13:12 ` Simon Glass
2026-10-22 19:40 ` Christian Marangi [this message]
2026-10-23 13:12 ` [PATCH v8 7/7] test: dm: Add test for FW Loader feature Simon Glass
2026-10-23 16:27 ` Christian Marangi
2026-10-23 13:12 ` [PATCH v8 0/7] misc: fs_loader: reorg and split to FS and FW loader + FIP loader Simon Glass
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261022194049.670889-8-ansuelsmth@gmail.com \
--to=ansuelsmth@gmail.com \
--cc=alchark@flipper.net \
--cc=anshuld@ti.com \
--cc=aristo.chen@canonical.com \
--cc=casey.connolly@linaro.org \
--cc=daniel@makrotopia.org \
--cc=hs@nabladev.com \
--cc=jbx6244@gmail.com \
--cc=lucienzx159@gmail.com \
--cc=m.schwan@phytec.de \
--cc=marcello.bauer@9elements.com \
--cc=marek.vasut+renesas@mailbox.org \
--cc=mateuslima.ti@gmail.com \
--cc=me@ziyao.cc \
--cc=mehmet.fide@screeningeagle.com \
--cc=michal.simek@amd.com \
--cc=mkorpershoek@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=patrice.chotard@foss.st.com \
--cc=peng.fan@nxp.com \
--cc=quentin.schulz@cherry.de \
--cc=romain.gantois@bootlin.com \
--cc=sjg@chromium.org \
--cc=tan.siewert@9elements.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.u-boot-project.org \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.