Hi Frank,

On 1/20/26 5:09 PM, Frank Wunderlich wrote:
Hi Quentin,

Am 20. Januar 2026 13:47:00 MEZ schrieb Quentin Schulz 
<[email protected]>:
Hi Frank,

On 1/20/26 1:09 PM, Frank Wunderlich wrote:
Hi

Thank you for your review

Am 19. Januar 2026 11:22:07 MEZ schrieb Quentin Schulz 
<[email protected]>:
Hi Frank,

On 1/18/26 11:50 AM, Frank Wunderlich wrote:


[...]
- what if I want to save the byte size in a variable? With the current 
implementation, only mebibyte or gibibyte sizes can be stored. I would suggest to 
argc-- if m or g is passed, and then compare against argc > 1 in which case 
you'd use this third (in case m or g is passed) or second (if they aren't) 
argument to store the value.

Good idea, thinking about how to implement this the correct way :) as varname could be 
"g" or "b" too.


You could also force the use of the first argument to be able to dump to a 
variable.

memsize
memsize b|m|g [varname]

memsize would be an alias to memsize b.
memsize b var stores the byte size in var.
memsize m var stores the (truncated) mebibyte size in var.
memsize g var stores the (truncated) gibibyte size in var.

I could also drop the first param and always handle as MiB...uboot also prints 
ram as MiB and not GiB on initialization.


It does print GiB on Rockchip SoCs, so there doesn't seem to be a "standard" for that.

So only choose between print or set variable and no "floating point" 
calculation needs to be
done...and result is simply an int. Afaik there should be no more boards with 
less than 1MB
ram,or am i wrong?

Not aware but that would be quite the headache (you need to load *some* stuff in RAM, e.g. U-Boot itself (well maybe it could be in SRAM only?), the kernel). I would say, it's fine to truncate at MiB level.

I think this makes most sense..and keeps code small and clean.

You could also decide the prefix your size argument with a dash and if no 
argument with a dash is passed, it means it's a variable name and the default 
is in byte size.

- missing documentation on the base for the environment variable. We have some 
commands setting hex digits in variables, some others in decimal, so this needs 
to be made explicit so that people know if they need to translate stuff before 
using it (or how to compare two numbers against each other). Here it's decimal 
according to the code (maybe we should have it in hex instead? I am not sure 
what is the expected base for variables :/).

As i want to use it in scripts to choose correct bl2 file for bananapi r4. Imho 
decimal is better to read here,but it should be mentioned in doc.


OK. Considering test 
(https://docs.u-boot.org/en/latest/usage/cmd/test.html#numbers) compares 
numbers assuming they're decimal if they don't start with 0x, this is fine to 
do (we would need to prefix the number with 0x if we were to store it as an hex 
value).

But this means numbers can be no fload and filesize is wrong as it returns hex 
value without 0x prefix.


Yes to both. I was actually agreeing with your implementation (using decimal) being the best option because we can directly use it with the test command.

Can you tell us more about the initial issue and how you plan on fixing it here?

That sounds like a board file (board/....) would be potentially more 
appropriate for this? What is this bl2, why does it need to be different based 
on DRAM size, isn't there anyway for U-boot to pass the DRAM size to bl2 and 
only have one bl2 binary for example?

BL2 is bootloader after bootrom (ATF). The board can have 2 different ram hw

Is this a typo? You say later that you want U-Boot to select the proper BL2, so necessarily U-Boot is loaded before BL2 by the BootROM?

Do you mean ATF to be "bootrom" or bl2 here? (I'm assuming the latter).

configurations which require BL2 compiled with different options set. The 
purpose for uboot
command is checking available ram for updating the BL2 via tftp and picking the 
right
file based on current installed bl2 via detected ramsize.

The issue is that 4gb board does not boot with 8gb ram bl2, 8gb board boots 
with 4gb bl2,but
cannot use the 8gb (only 4gb). So i tried to make a detection mechanism to 
select the right
file (tftp,usb,...) for current ram configuration.


If BL2 is TF-A, do you have an open-source implementation for your board (maybe https://github.com/mtk-openwrt/arm-trusted-firmware?)? Would it be possible to pass e.g. a Device Tree to TF-A to pass some information? I'm assuming we must be configuring somewhere the DRAM address ranges so the kernel knows where to put stuff. On Rockchip, we use the Device Tree in TF-A (ATF) to know to which serial controller to write to and at which baudrate (downstream TF-A blob from Rockchip doesn't support that), wondering if we can do something similar for Mediatek? This way you don't need to know at runtime what to do, it'll automagically do it, and that for every board with the SoC supported in TF-A.

+
+       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]"

Explain m and g so the user knows when typing help msize.

We need tests in test/cmd/ and a new entry in doc/usage/cmd/ for this new 
command.

I see this note in checkpatch,but as i rely on dynamic value and i saw no test 
for mem yet.


There's one for meminfo, but honestly I'm not sure it's a test that makes sense 
(just checking whether some fixed strings are printed and not associated values 
that are printed afterwards). I haven't written a C unit test in U-Boot so far 
so won't be able to help there. But we really do want docs in doc/usage/cmd for 
any new command.

Not sure if such test makes sense except checking if function returns a string 
based on unknown gd->ram_size (which depends on the host running the test i 
guess),or can it set before runing the test so that i can just check the 
formatting/calculation of the string?


I don't know. It's fine for me if you don't write a test for this, I'm not sure if you can mock the DRAM size for example. The point would have been to check you're properly truncating and reporting the right size as well as writing to the specified variable the appropriate value in decimal.

Cheers,
Quentin

Reply via email to