[PATCH 03/13] env: tq: add shareable environment settings

Max Merchel Max.Merchel at ew.tq-group.com
Thu Mar 12 10:56:59 CET 2026


From: Markus Niebel <Markus.Niebel at ew.tq-group.com>

Prepares moving boiler plate code out of board confguration header and
prepare to share a lot of things between boards.

Signed-off-by: Markus Niebel <Markus.Niebel at ew.tq-group.com>
Signed-off-by: Max Merchel <Max.Merchel at ew.tq-group.com>
---
 include/env/tq/mmc.env           | 82 ++++++++++++++++++++++++++++++++
 include/env/tq/nfs.env           | 51 ++++++++++++++++++++
 include/env/tq/spi.env           | 23 +++++++++
 include/env/tq/tq-imx-shared.env | 38 +++++++++++++++
 include/env/tq/ubi.env           | 47 ++++++++++++++++++
 5 files changed, 241 insertions(+)
 create mode 100644 include/env/tq/mmc.env
 create mode 100644 include/env/tq/nfs.env
 create mode 100644 include/env/tq/spi.env
 create mode 100644 include/env/tq/tq-imx-shared.env
 create mode 100644 include/env/tq/ubi.env

diff --git a/include/env/tq/mmc.env b/include/env/tq/mmc.env
new file mode 100644
index 00000000000..abf561f8467
--- /dev/null
+++ b/include/env/tq/mmc.env
@@ -0,0 +1,82 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2024-2026 TQ-Systems GmbH <u-boot at ew.tq-group.com>,
+ * D-82229 Seefeld, Germany.
+ * Author: Max Merchel
+ *
+ * shared mmc environment for TQ boards
+ */
+
+addmmc=
+	setenv bootargs "${bootargs}"
+	root=/dev/mmcblk"${mmcblkdev}"p"${mmcrootpart}" "${rootfsmode}" rootwait;
+
+get_blockcount=
+	setexpr blkc "${filesize}" + 0x1ff;
+	setexpr blkc "${blkc}" / 0x200;
+
+load_mmc=
+	mmc dev "${mmcdev}"; mmc rescan;
+	load mmc "${mmcdev}":"${mmcpart}" "${kernel_addr_r}" /boot/"${image}";
+	load mmc "${mmcdev}":"${mmcpart}" "${fdt_addr_r}" /boot/"${fdtfile}";
+	fdt address "${fdt_addr_r}";
+        fdt resize 0x100000;
+	for overlay in "${fdt_overlays}"; do
+		load mmc "${mmcdev}":"${mmcpart}" "${fdtoverlay_addr_r}"
+                        /boot/"${overlay}" && fdt apply "${fdtoverlay_addr_r}";
+	done;
+
+mmcargs=run addtty addmmc
+
+mmcboot=
+	echo "Booting from mmc ...";
+	setenv bootargs && run mmcargs &&
+	if run load_mmc; then
+		run boot_os;
+	else
+		echo "ERROR: loading from mmc";
+	fi;
+
+mmcpart=2
+
+mmc_finish_update_uboot=
+	mmc write "${loadaddr}" "${update_start_blk}" "${blkc}";
+	mmc dev "${mmcdev}" 0;
+	setenv update_part;
+	setenv update_start_blk;
+	setenv blkc;
+
+mmc_prepare_update_uboot=
+	echo "Write U-Boot to mmc "${mmcdev}" ...";
+	mmc dev "${mmcdev}"; mmc rescan;
+	run get_blockcount;
+	setenv update_start_blk "${uboot_mmc_start}";
+	setenv update_part 0;
+
+mmc_switch_part=
+	mmc partconf "${mmcdev}" update_part;
+	mmc dev "${mmcdev}" "${update_part}";
+
+mmcrootpart=2
+
+update_uboot_mmc=
+	run check_ipaddr;
+	if tftp "${uboot}"; then
+		run mmc_prepare_update_uboot;
+		if itest "${blkc}" >= "${uboot_mmc_size}"; then
+			echo "ERROR: size to large ...";
+			exit;
+		fi;
+		if itest "${mmcdev}" == "${emmc_dev}"; then
+			run mmc_switch_part;
+			if itest "${update_part}" > 0 ; then
+				if env exists emmc_bootp_start; then
+					setenv update_start_blk "${emmc_bootp_start}";
+				else
+					echo "ERROR: eMMC boot partition block unset";
+					exit;
+				fi;
+			fi;
+		fi;
+		run mmc_finish_update_uboot;
+	fi;
diff --git a/include/env/tq/nfs.env b/include/env/tq/nfs.env
new file mode 100644
index 00000000000..53fcbd0d152
--- /dev/null
+++ b/include/env/tq/nfs.env
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2024-2026 TQ-Systems GmbH <u-boot at ew.tq-group.com>,
+ * D-82229 Seefeld, Germany.
+ * Author: Max Merchel
+ *
+ * shared nfs environment for TQ boards
+ */
+
+addnfs=
+	setenv bootargs "${bootargs}" root=/dev/nfs rw
+        nfsroot="${serverip}":"${rootpath}",v3,tcp
+
+load_nfs=
+	nfs "${kernel_addr_r}" "${serverip}":"${rootpath}"/boot/"${image}";
+	nfs "${fdt_addr_r}" "${serverip}":"${rootpath}"/boot/"${fdtfile}";
+	fdt address "${fdt_addr_r}";
+	fdt resize 0x100000;
+	for overlay in "${fdt_overlays}"; do
+		nfs "${fdtoverlay_addr_r}"
+		        "${serverip}":"${rootpath}"/boot/"${overlay}" &&
+			fdt apply "${fdtoverlay_addr_r}";
+	done;
+
+load_tftp=
+	tftp "${kernel_addr_r}" "${image}";
+	tftp "${fdt_addr_r}" "${fdtfile}";
+	fdt address "${fdt_addr_r}";
+	fdt resize 0x100000;
+	for overlay in "${fdt_overlays}"; do
+		if tftp "${fdtoverlay_addr_r}" "${overlay}"; then
+			fdt apply "${fdtoverlay_addr_r}";
+		else
+			exit;
+		fi;
+	done;
+
+netargs=run addnfs addip addtty
+
+netloadcmd=load_tftp
+
+nfsboot=
+	echo "Booting from NFS ...";
+	setenv bootargs;
+	run netargs;
+	run check_ipaddr;
+	if run ${netloadcmd}; then
+		run boot_os;
+	else
+		echo "ERROR: loading from NFS";
+	fi;
diff --git a/include/env/tq/spi.env b/include/env/tq/spi.env
new file mode 100644
index 00000000000..47dcfea7d3f
--- /dev/null
+++ b/include/env/tq/spi.env
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2024-2026 TQ-Systems GmbH <u-boot at ew.tq-group.com>,
+ * D-82229 Seefeld, Germany.
+ * Author: Max Merchel
+ *
+ * shared spi environment for TQ boards
+ */
+
+update_uboot_spi=
+	run check_ipaddr;
+	if tftp ${uboot}; then
+		if itest "${filesize}" >= "${uboot_spi_size}"; then
+			echo "ERROR: size to large ...";
+			exit;
+		fi;
+		echo "Write u-boot image to SPI NOR ...";
+		if sf probe; then
+			run write_uboot_spi;
+		fi;
+	fi;
+
+write_uboot_spi=sf update "${loadaddr}" "${uboot_spi_start}" "${filesize}"
diff --git a/include/env/tq/tq-imx-shared.env b/include/env/tq/tq-imx-shared.env
new file mode 100644
index 00000000000..d4e42f8b536
--- /dev/null
+++ b/include/env/tq/tq-imx-shared.env
@@ -0,0 +1,38 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2024-2026 TQ-Systems GmbH <u-boot at ew.tq-group.com>,
+ * D-82229 Seefeld, Germany.
+ * Author: Max Merchel
+ *
+ * shared environment for TQ imx boards
+ */
+
+#ifdef CONFIG_CMD_SF
+#include "spi.env"
+#ifdef CONFIG_CMD_UBIFS
+#include "ubi.env"
+#endif /* CONFIG_CMD_UBIFS */
+#endif /* CONFIG_CMD_SF */
+
+#ifdef CONFIG_CMD_MMC
+#include "mmc.env"
+#endif
+
+#ifdef CONFIG_CMD_NFS
+#include "nfs.env"
+#endif
+
+addip=
+	run check_ipaddr;
+	setenv bootargs "${bootargs}"
+	ip="${ipaddr}":"${serverip}":"${gatewayip}":"${netmask}":"${hostname}":"${netdev}":off
+
+addtty=setenv bootargs "${bootargs}" "${console}"
+
+check_ipaddr=
+	if test -z "${ipaddr}" || test -z "${serverip}"; then
+		echo "ipaddr or serverip unset, falling back to DHCP...";
+		dhcp;
+	fi;
+
+rootfsmode=ro
diff --git a/include/env/tq/ubi.env b/include/env/tq/ubi.env
new file mode 100644
index 00000000000..01243d2eb53
--- /dev/null
+++ b/include/env/tq/ubi.env
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/*
+ * Copyright (c) 2024-2026 TQ-Systems GmbH <u-boot at ew.tq-group.com>,
+ * D-82229 Seefeld, Germany.
+ * Author: Max Merchel
+ *
+ * shared ubi environment for TQ boards
+ */
+
+addubi=
+	setenv bootargs "${bootargs}" rootfstype=ubifs ubi.mtd="${ubimtdname}"
+        root=ubi0:"${ubirootfsvol}" "${rootfsmode}" rootwait;
+
+load_spi=
+	if sf probe; then
+                if ubi part "${ubirootfspart}"; then
+			if ubifsmount ubi0:"${ubirootfsvol}"; then
+				ubifsload "${kernel_addr_r}" /boot/"${image}";
+				ubifsload "${fdt_addr_r}" /boot/"${fdtfile}";
+                                fdt address "${fdt_addr_r}";
+				fdt resize 0x100000;
+				for overlay in "${fdt_overlays}"; do
+					ubifsload "${fdtoverlay_addr_r}"
+					/boot/"${overlay}" &&
+					fdt apply "${fdtoverlay_addr_r}";
+				done;
+				ubifsumount;
+			fi;
+			ubi detach;
+		fi;
+	fi
+
+ubiargs=run addubi addtty
+
+ubiboot=
+	echo "Booting from UBI ...";
+	setenv bootargs;
+	run ubiargs;
+	if run load_spi; then
+		run boot_os;
+	else
+		echo "ERROR: loading kernel";
+	fi;
+
+ubimtdname=mtdname
+ubirootfspart=ubi
+ubirootfsvol=root
-- 
2.43.0



More information about the U-Boot mailing list