From: Frank Wunderlich <[email protected]> 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 <[email protected]> --- cmd/mem.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/cmd/mem.c b/cmd/mem.c index d5d7ca2790bd..a1cf4eef0701 100644 --- 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,27 @@ static int do_mem_loopw(struct cmd_tbl *cmdtp, int flag, int argc, } #endif /* CONFIG_LOOPW */ +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 - 1) / SZ_1M; + else if (!strcmp(argv[1], "g")) + memsize = (memsize + SZ_1G - 1) / 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; +} + #ifdef CONFIG_CMD_MEMTEST static ulong mem_test_alt(volatile ulong *buf, ulong start_addr, ulong end_addr, volatile ulong *dummy) @@ -1404,6 +1426,12 @@ U_BOOT_CMD( ); #endif /* CONFIG_LOOPW */ +U_BOOT_CMD( + msize, 3, 1, do_mem_size, + "get detected ram size, optional set env variable with value", + "[m, g] [envvar]" +); + #ifdef CONFIG_CMD_MEMTEST U_BOOT_CMD( mtest, 5, 1, do_mem_mtest, -- 2.43.0

