--- /dev/null
+++ b/configs/mt7988a_bananapi_bpi-r4-emmc_defconfig
-@@ -0,0 +1,144 @@
+@@ -0,0 +1,145 @@
+CONFIG_ARM=y
+CONFIG_ARM_SMCCC=y
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_ERASEENV=y
+CONFIG_CMD_ENV_FLAGS=y
++CONFIG_CMD_MEMINFO=y
++CONFIG_CMD_MEMSIZE=y
+CONFIG_CMD_RNG=y
+CONFIG_CMD_STRINGS=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_FS_UUID=y
+CONFIG_CMD_UBI=y
+CONFIG_CMD_UBI_RENAME=y
-+CONFIG_CMD_MEMSIZE=y
+CONFIG_OF_EMBED=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_HEXDUMP=y
--- /dev/null
+++ b/configs/mt7988a_bananapi_bpi-r4-snand_defconfig
-@@ -0,0 +1,144 @@
+@@ -0,0 +1,145 @@
+CONFIG_ARM=y
+CONFIG_ARM_SMCCC=y
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_ERASEENV=y
+CONFIG_CMD_ENV_FLAGS=y
++CONFIG_CMD_MEMINFO=y
++CONFIG_CMD_MEMSIZE=y
+CONFIG_CMD_RNG=y
+CONFIG_CMD_STRINGS=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_FS_UUID=y
+CONFIG_CMD_UBI=y
+CONFIG_CMD_UBI_RENAME=y
-+CONFIG_CMD_MEMSIZE=y
+CONFIG_OF_EMBED=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_UBI=y
+emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol
+_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv
+_firstboot=setenv _firstboot ; run _select_bl2 ; run _switch_to_menu ; run _init_env ; run boot_first
-+_select_bl2=setenv _select_bl2 ; msize g ramsize; if test ${ramsize} = 8; then setenv bootfile_bl2 openwrt-mediatek-filogic-bananapi_bpi-r4-snand-preloader-8g.bin;fi
++_select_bl2=setenv _select_bl2 ; memsize ramsize; if test ${ramsize} = 8192; then setenv bootfile_bl2 openwrt-mediatek-filogic-bananapi_bpi-r4-snand-preloader-8g.bin;fi
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title \e[33m$ver\e[0m"
--- /dev/null
+emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol
+_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv
+_firstboot=setenv _firstboot ; run _select_bl2 ; run _switch_to_menu ; run _init_env ; run boot_first
-+_select_bl2=setenv _select_bl2 ; msize g ramsize; if test ${ramsize} = 8; then setenv bootfile_bl2 openwrt-mediatek-filogic-bananapi_bpi-r4-emmc-preloader-8g.bin;fi
++_select_bl2=setenv _select_bl2 ; memsize ramsize; if test ${ramsize} = 8192; then setenv bootfile_bl2 openwrt-mediatek-filogic-bananapi_bpi-r4-emmc-preloader-8g.bin;fi
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title \e[33m$ver\e[0m"
--- /dev/null
+};
--- /dev/null
+++ b/configs/mt7988a_bananapi_bpi-r4-poe-emmc_defconfig
-@@ -0,0 +1,144 @@
+@@ -0,0 +1,145 @@
+CONFIG_ARM=y
+CONFIG_ARM_SMCCC=y
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_ERASEENV=y
+CONFIG_CMD_ENV_FLAGS=y
++CONFIG_CMD_MEMINFO=y
++CONFIG_CMD_MEMSIZE=y
+CONFIG_CMD_RNG=y
+CONFIG_CMD_STRINGS=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_FS_UUID=y
+CONFIG_CMD_UBI=y
+CONFIG_CMD_UBI_RENAME=y
-+CONFIG_CMD_MEMSIZE=y
+CONFIG_OF_EMBED=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_HEXDUMP=y
--- /dev/null
+++ b/configs/mt7988a_bananapi_bpi-r4-poe-snand_defconfig
-@@ -0,0 +1,144 @@
+@@ -0,0 +1,145 @@
+CONFIG_ARM=y
+CONFIG_ARM_SMCCC=y
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_ERASEENV=y
+CONFIG_CMD_ENV_FLAGS=y
++CONFIG_CMD_MEMINFO=y
++CONFIG_CMD_MEMSIZE=y
+CONFIG_CMD_RNG=y
+CONFIG_CMD_STRINGS=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_FS_UUID=y
+CONFIG_CMD_UBI=y
+CONFIG_CMD_UBI_RENAME=y
-+CONFIG_CMD_MEMSIZE=y
+CONFIG_OF_EMBED=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_UBI=y
+emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol
+_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv
+_firstboot=setenv _firstboot ; run _select_bl2 ; run _switch_to_menu ; run _init_env ; run boot_first
-+_select_bl2=setenv _select_bl2 ; msize g ramsize ; if test ${ramsize} = 8 ; then setenv bootfile_bl2 openwrt-mediatek-filogic-bananapi_bpi-r4-poe-emmc-preloader-8g.bin ; fi
++_select_bl2=setenv _select_bl2 ; memsize ramsize ; if test ${ramsize} = 8192 ; then setenv bootfile_bl2 openwrt-mediatek-filogic-bananapi_bpi-r4-poe-emmc-preloader-8g.bin ; fi
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title \e[33m$ver\e[0m"
--- /dev/null
+emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol
+_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv
+_firstboot=setenv _firstboot ; run _select_bl2 ; run _switch_to_menu ; run _init_env ; run boot_first
-+_select_bl2=setenv _select_bl2 ; msize g ramsize; if test ${ramsize} = 8; then setenv bootfile_bl2 openwrt-mediatek-filogic-bananapi_bpi-r4-poe-snand-preloader-8g.bin ; fi
++_select_bl2=setenv _select_bl2 ; memsize ramsize; if test ${ramsize} = 8192; then setenv bootfile_bl2 openwrt-mediatek-filogic-bananapi_bpi-r4-poe-snand-preloader-8g.bin ; fi
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title \e[33m$ver\e[0m"
+++ /dev/null
-From 83c596f12349fdc77fa76e1d017b4fc8882744ef Mon Sep 17 00:00:00 2001
-From: Frank Wunderlich <frank-w@public-files.de>
-Date: Sat, 17 Jan 2026 12:38:40 +0100
-To: Tom Rini <trini@konsulko.com>
-Cc: u-boot@lists.denx.de,
- Daniel Golle <daniel@makrotopia.org>
-Subject: [PATCH v4] cmd: mem: add function for getting ram size for use in
- scripts
-
-Add a command for getting detected ram size with possibility to write
-to environment variable.
-
-example usage:
-
-BPI-R4> msize
-4294967296
-BPI-R4> msize m
-4096m
-BPI-R4> msize g
-4g
-BPI-R4> msize g ramsize
-BPI-R4> printenv ramsize
-ramsize=4
-BPI-R4>
-
-board with 8GB ram:
-
-BPI-R4> msize
-8589934592
-BPI-R4> msize m
-8192m
-BPI-R4> msize g
-8g
-BPI-R4> msize g ramsize
-BPI-R4> printenv ramsize
-ramsize=8
-BPI-R4>
-
-Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
----
-v4: drop rounding to full MB/GB as it leads to wrong display
-v3: add missing ifdefs
-v2: add Kconfig entry
----
- cmd/Kconfig | 5 +++++
- cmd/mem.c | 32 ++++++++++++++++++++++++++++++++
- 2 files changed, 37 insertions(+)
-
---- a/cmd/Kconfig
-+++ b/cmd/Kconfig
-@@ -1003,6 +1003,11 @@ config CMD_RANDOM
- help
- random - fill memory with random data
-
-+config CMD_MEMSIZE
-+ bool "memsize"
-+ help
-+ Get RAM via command for use in scripts.
-+
- config CMD_MEMTEST
- bool "memtest"
- help
---- a/cmd/mem.c
-+++ b/cmd/mem.c
-@@ -33,6 +33,7 @@
- #include <linux/compiler.h>
- #include <linux/ctype.h>
- #include <linux/delay.h>
-+#include <linux/sizes.h>
-
- DECLARE_GLOBAL_DATA_PTR;
-
-@@ -711,6 +712,29 @@ static int do_mem_loopw(struct cmd_tbl *
- }
- #endif /* CONFIG_LOOPW */
-
-+#ifdef CONFIG_CMD_MEMSIZE
-+static int do_mem_size(struct cmd_tbl *cmdtp, int flag, int argc,
-+ char *const argv[])
-+{
-+ u64 memsize = gd->ram_size;
-+
-+ if (argc > 1) {
-+ if (!strcmp(argv[1], "m"))
-+ memsize = memsize / SZ_1M;
-+ else if (!strcmp(argv[1], "g"))
-+ memsize = memsize / SZ_1G;
-+ if (argc > 2)
-+ env_set_ulong(argv[2], memsize);
-+ else
-+ printf("%lld%s\n", memsize, argv[1]);
-+ } else {
-+ printf("%lld\n", memsize);
-+ }
-+
-+ return 0;
-+}
-+#endif /* CONFIG_CMD_MEMSIZE */
-+
- #ifdef CONFIG_CMD_MEMTEST
- static ulong mem_test_alt(volatile ulong *buf, ulong start_addr, ulong end_addr,
- volatile ulong *dummy)
-@@ -1404,6 +1428,14 @@ U_BOOT_CMD(
- );
- #endif /* CONFIG_LOOPW */
-
-+#ifdef CONFIG_CMD_MEMSIZE
-+U_BOOT_CMD(
-+ msize, 3, 1, do_mem_size,
-+ "get detected ram size, optional set env variable with value",
-+ "[m, g] [envvar]"
-+);
-+#endif /* CONFIG_CMD_MEMSIZE */
-+
- #ifdef CONFIG_CMD_MEMTEST
- U_BOOT_CMD(
- mtest, 5, 1, do_mem_mtest,