From e202eca183b0f1d6747b934482dc6249abdd742b Mon Sep 17 00:00:00 2001 From: Frank Wunderlich Date: Wed, 4 Feb 2026 19:40:42 +0100 Subject: [PATCH 1/3] cmd: mem: add command for getting ram size for use in scripts Add a command for getting detected ram size with possibility to assign it to an environment variable. example usage: BPI-R4> memsize 4096 MiB BPI-R4> memsize memsz BPI-R4> printenv memsz memsz=4096 BPI-R4> board with 8GB ram: BPI-R4> memsize 8192 MiB BPI-R4> memsize memsz BPI-R4> printenv memsz memsz=8192 BPI-R4> Signed-off-by: Frank Wunderlich --- cmd/Kconfig | 7 +++++++ cmd/meminfo.c | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/cmd/Kconfig b/cmd/Kconfig index 595ac49da41..f12fcf6631e 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -940,6 +940,13 @@ config CMD_MEMINFO_MAP See doc/usage/cmd/meminfo.rst for more information. +config CMD_MEMSIZE + bool "memsize" + depends on CMD_MEMINFO + help + Get RAM via command for use in scripts. Print or assign decimal value + in MiB to environment variable. + config CMD_MEMORY bool "md, mm, nm, mw, cp, cmp, base, loop" default y diff --git a/cmd/meminfo.c b/cmd/meminfo.c index aa3b5bafe17..e7db9d065f5 100644 --- a/cmd/meminfo.c +++ b/cmd/meminfo.c @@ -8,10 +8,12 @@ #include #include #include +#include #include #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -98,8 +100,31 @@ static int do_meminfo(struct cmd_tbl *cmdtp, int flag, int argc, return 0; } +#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 / SZ_1M; + + if (argc > 1) + return env_set_ulong(argv[1], memsize); + else + printf("%lld MiB\n", memsize); + + return 0; +} +#endif /* CONFIG_CMD_MEMSIZE */ + U_BOOT_CMD( meminfo, 1, 1, do_meminfo, "display memory information", "" ); + +#ifdef CONFIG_CMD_MEMSIZE +U_BOOT_CMD( + memsize, 2, 1, do_mem_size, + "get detected ram size in MiB, optional set env variable with value", + "[envvar]" +); +#endif /* CONFIG_CMD_MEMSIZE */ From 8acc8a654643ca26b0bdd4af37010da7cc796753 Mon Sep 17 00:00:00 2001 From: Frank Wunderlich Date: Wed, 4 Feb 2026 19:40:43 +0100 Subject: [PATCH 2/3] test: cmd: add test for memsize Add a test for memsize command in same way as meminfo. Signed-off-by: Frank Wunderlich --- cmd/Kconfig | 1 + test/cmd/meminfo.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/cmd/Kconfig b/cmd/Kconfig index f12fcf6631e..8bdd04f348f 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -942,6 +942,7 @@ config CMD_MEMINFO_MAP config CMD_MEMSIZE bool "memsize" + default y if SANDBOX depends on CMD_MEMINFO help Get RAM via command for use in scripts. Print or assign decimal value diff --git a/test/cmd/meminfo.c b/test/cmd/meminfo.c index 40c3520496e..af2c19fa67d 100644 --- a/test/cmd/meminfo.c +++ b/test/cmd/meminfo.c @@ -7,6 +7,7 @@ */ #include +#include #include #include @@ -39,4 +40,23 @@ static int cmd_test_meminfo(struct unit_test_state *uts) return 0; } + CMD_TEST(cmd_test_meminfo, UTF_CONSOLE); + +/* Test 'memsize' command */ +#ifdef CONFIG_CMD_MEMSIZE +static int cmd_test_memsize(struct unit_test_state *uts) +{ + ut_assertok(run_command("memsize", 0)); + ut_assert_nextline("256 MiB"); + ut_assert_console_end(); + + ut_assertok(run_command("memsize memsz", 0)); + ut_asserteq_str("256", env_get("memsz")); + ut_assert_console_end(); + + return 0; +} + +CMD_TEST(cmd_test_memsize, UTF_CONSOLE); +#endif From b4842032d542cfde271aab61b80ab870b27b07b2 Mon Sep 17 00:00:00 2001 From: Frank Wunderlich Date: Wed, 4 Feb 2026 19:40:44 +0100 Subject: [PATCH 3/3] doc: cmd: add usage doc for memsize Add documentation for memsize command. Signed-off-by: Frank Wunderlich --- doc/usage/cmd/memsize.rst | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 doc/usage/cmd/memsize.rst diff --git a/doc/usage/cmd/memsize.rst b/doc/usage/cmd/memsize.rst new file mode 100644 index 00000000000..6e99d7c1d33 --- /dev/null +++ b/doc/usage/cmd/memsize.rst @@ -0,0 +1,43 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +.. index:: + single: memsize (command) + +memsize command +=============== + +Synopsis +-------- + +:: + + memsize [name] + +Description +----------- + +The memsize command shows the amount of RAM in MiB in decimal notation. +Optionally same value can be assigned to an environment variable. + +Examples +-------- + +This first example shows printing of ram size: + +:: + + => memsize + 8192 MiB + +This second example shows assign ram size to environment variable: + +:: + + => memsize memsz + => printenv memsz + memsz=8192 + +Return value +------------ + +The return value is always 0 except error happens on setting environment variable.