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>,
Alexey Charkov <alchark@flipper.net>,
"Lucien.Jheng" <lucienzx159@gmail.com>,
Daniel Golle <daniel@makrotopia.org>,
Neil Armstrong <neil.armstrong@linaro.org>,
Christian Marangi <ansuelsmth@gmail.com>,
Mehmet Fide <mehmet.fide@screeningeagle.com>,
Casey Connolly <casey.connolly@linaro.org>,
Michal Simek <michal.simek@amd.com>,
Aristo Chen <aristo.chen@canonical.com>,
Quentin Schulz <quentin.schulz@cherry.de>,
Anshul Dalal <anshuld@ti.com>, Johan Jonker <jbx6244@gmail.com>,
Neha Malcom Francis <n-francis@ti.com>,
Marcello Sylvester Bauer <marcello.bauer@9elements.com>,
Mateus Lima Alves <mateuslima.ti@gmail.com>,
Tan Siewert <tan.siewert@9elements.com>, Yao Zi <me@ziyao.cc>,
Patrice Chotard <patrice.chotard@foss.st.com>,
Peng Fan <peng.fan@nxp.com>, Randolph Sapp <rs@ti.com>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Martin Schwan <m.schwan@phytec.de>,
u-boot@lists.u-boot-project.org
Subject: [PATCH v9 8/8] test: dm: Add test for FW Loader feature
Date: Fri, 23 Oct 2026 21:00:29 +0200 [thread overview]
Message-ID: <20261023190034.911023-9-ansuelsmth@gmail.com> (raw)
In-Reply-To: <20261023190034.911023-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/test_ut.py | 58 ++++++++
10 files changed, 326 insertions(+)
create mode 100644 test/dm/fw_loader.c
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..751792e818e1
--- /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 mmc 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(-EINVAL, 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/test_ut.py b/test/py/tests/test_ut.py
index 2a5acc18c612..eee5be621f37 100644
--- a/test/py/tests/test_ut.py
+++ b/test/py/tests/test_ut.py
@@ -14,6 +14,7 @@ import struct
import os.path
import re
import pytest
+import uuid
import utils
# pylint: disable=E0611
@@ -685,6 +686,61 @@ def test_ut_dm_init(ubman):
with open(fn, 'wb') as fh:
fh.write(data)
+def setup_fw_loader_fs_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}')
+
+
+def setup_fw_loader_fip_image(ubman):
+ """Create a 2MB disk image with a FIP blob on it"""
+ mmc_dev = 13
+ fname, mnt = fs_helper.setup_image(ubman, mmc_dev, 0x83, img_size=2)
+
+ fw_name = 'test'
+ data = b'test\n'
+
+ fip_toc_header_size = struct.calcsize('<IIQ')
+ fip_toc_entry_uuid = uuid.uuid3(uuid.NAMESPACE_DNS, fw_name)
+ fip_toc_entry_size = len(fip_toc_entry_uuid.bytes) + struct.calcsize('<QQQ')
+
+ fipfile = 'test.fip'
+ with open(fipfile, 'wb') as fh:
+ # TOC Header: name, serial, flags
+ fh.write(struct.pack('<IIQ', 0xaa640001, 0x12345678, 0))
+
+ # TOC Entry: UUID, offset, size, flags
+ fh.write(fip_toc_entry_uuid.bytes +
+ struct.pack('<QQQ',
+ fip_toc_header_size + 2 * fip_toc_entry_size,
+ len(data), 0))
+
+ # TOC Entry End Marker: Zero UUID + size set to size of entire FIP
+ # Assume alignment as 1
+ fh.write(uuid.UUID(int=0).bytes +
+ struct.pack('<QQQ',
+ fip_toc_header_size + 2 * fip_toc_entry_size + len(data),
+ 0, 0))
+
+ # Append data
+ fh.write(data)
+
+ copy_partition(ubman, fipfile, fname)
+ utils.run_and_log(ubman, f'rm -rf {mnt}')
+ utils.run_and_log(ubman, f'rm -f {fipfile}')
def setup_efi_image(ubman):
"""Create a 20MB disk image with an EFI app on it"""
@@ -752,6 +808,8 @@ def test_ut_dm_init_bootstd(ubman):
setup_cedit_file(ubman)
setup_cros_image(ubman)
setup_android_image(ubman)
+ setup_fw_loader_fs_image(ubman)
+ setup_fw_loader_fip_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-23 19:01 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 19:00 [PATCH v9 0/8] misc: fs_loader: reorg and split to FS and FW loader + FIP loader Christian Marangi
2026-10-23 19:00 ` [PATCH v9 1/8] misc: fs_loader: fix ubifs not unmounted on dev_get_priv error Christian Marangi
2026-10-23 19:00 ` [PATCH v9 2/8] misc: fs_loader: reorganize and split to FS loader and FW UCLASS Christian Marangi
2026-10-26 12:37 ` Simon Glass
2026-10-23 19:00 ` [PATCH v9 3/8] misc: fw_loader: implement generic get_fw_loader_from_node() Christian Marangi
2026-10-23 19:00 ` [PATCH v9 4/8] misc: fs_loader: validate requested offset on reading file Christian Marangi
2026-10-26 12:37 ` Simon Glass
2026-10-23 19:00 ` [PATCH v9 5/8] misc: fw_loader: implement request_firmware_size() OP Christian Marangi
2026-10-26 12:37 ` Simon Glass
2026-10-23 19:00 ` [PATCH v9 6/8] doc: dtbinding: Update documentation for Generic Firmware loader Christian Marangi
2026-10-26 12:37 ` Simon Glass
2026-10-23 19:00 ` [PATCH v9 7/8] misc: fw_loader: introduce FIP loader driver Christian Marangi
2026-10-26 12:37 ` Simon Glass
2026-10-26 13:36 ` Christian Marangi
2026-10-23 19:00 ` Christian Marangi [this message]
2026-10-26 15:08 ` [PATCH v9 8/8] test: dm: Add test for FW Loader feature Simon Glass
2026-10-26 15:12 ` Christian Marangi (Ansuel)
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=20261023190034.911023-9-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=n-francis@ti.com \
--cc=neil.armstrong@linaro.org \
--cc=patrice.chotard@foss.st.com \
--cc=peng.fan@nxp.com \
--cc=quentin.schulz@cherry.de \
--cc=rs@ti.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.