Hi George,

On Wed, Jul 16, 2025 at 19:55, george chan <gchan9...@gmail.com> wrote:

> Hi Mattijs,
>
> Thx for reply.
>
> 在 2025年7月16日週三 17:05,Mattijs Korpershoek <mkorpersh...@kernel.org> 寫道:
>
>> Hi George,
>>
>> Thank you for the patch.
>>
> ...
>
>>
>> > -     ret = env_set("bootargs", cmdline);
>> > +     ret = android_image_modify_bootargs_env(cmdline, NULL);
>>
>> I don't think it can be done this way. bootm_boot_start() is used in the
>> ChromeOS bootmethod as well (boot/bootmeth_cros.c)
>>
>
> I got your point. I have 3 ideas come out.
>
> (1) The logic purposely empty the env bootargs, either developer don't use
> env bootargs or those use cases touched bootargs in some early step. And
> then wanna disregard previous u-boot bootmeth operation, and empty bootargs
> for that ongoing bootmeth stage...well that's not congruent behavior; I
> have a gut feeling this is a bug or band-aid anyway, it closed the door for

Simon, is it *intentional* that override the bootargs variable in
commit daffb0be2c83 ("bootstd: cros: Add ARM support") ?

Shouldn't we get the bootargs from the environment, and append cmdline
to the existing bootargs instead ?


> people (potentially abootimg) inject needed boot param between bootmeth
> stage. Perhaps, either clean up bootargs before bootmeth load stage, or add
> kconfig to check and enable this logic, a better representation.
>
> (2) One more thing, the vendor_boot cmdline is not handle neither in
> original logic nor in url from you provided. So I can say the url one is
> not capable for extended with Android boot img version > 2 since
> vendor_boot cmdline not handled.

What do you mean by the vendor_boot cmdline is not handled?

When parsing the vendor_boot image, we go through
android_vendor_boot_image_v3_v4_parse_hdr()

That function copies the vendor_boot cmdline with:

        data->kcmdline_extra = hdr->cmdline;

(to the struct andr_image_data).

Later on, in android_image_get_kernel(), this gets copied to the
bootargs:

        if (img_data.kcmdline_extra && *img_data.kcmdline_extra) {
                if (*newbootargs) /* If there is something in newbootargs, a 
space is needed */
                        strcat(newbootargs, " ");
                strcat(newbootargs, img_data.kcmdline_extra);
        }

        env_set("bootargs", newbootargs);

>
> (3) I don't think it is very much different between your mentioned url with
> my patch. There is nothing advanced, but just existing code logic reuse and
> that logic handled vendor_cmdline in other path. I prefer code logic reuse.

The difference is that in the patch I've linked is that we only change
Android specific boot behaviour. So less risk to impact ChromeOS.

>
> And I believe above are not the important thing....
>
>>
>> Changing this would potentially break ChromeOS boot behaviour so I'd
>> prefer to find another solution.
>>
>> I know that TI has a downstream patch that changes bootmeth_android.c
>> instead:
>>
>>
>> https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04-next&id=9d802d798ac143e06ffe545606aa657a6c32cc63
>
>
> ...
>
>
>> Would that work for you?
>>
>>
> Well, the one from url also fine with me.
>
> The important thing is here. So as to ease the change with "minimal impact"
> gets in. I can add one extra check to maintain original behavior in case
> people have concern of breakage. Code example as below:
>
> + If (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE_PREPEND_ENV_BOOTARGS))
> +   ret = android_image_modify_bootargs_env(cmdline, NULL);
> + else
>       ret = env_set("bootargs", cmdline);
>
> This logic eliminated the concern, but it also limited those potential use
> cases for Android boot header version > 2, unless the newly introduced
> CONFIG_ANDROID_BOOT_IMAGE_PREPEND_ENV_BOOTARGS is defined.

I'm not sure about why this is better, as from what I understand we
handle vendor_boot cmdline properly already.

Can you provide me with a test case or some example commands that show
that vendor_boot cmdline is not handled properly?

>
> Or this one with good extendible.
> + /* Clean up bootargs purposely */
> + if (IS_ENABLED(SOME_FLAG))
> +    env_set("bootargs", "");
> + ret = android_image_modify_bootargs_env(cmdline, NULL);
>
> Either way. I prefer first one and can blindly apply without afford. I
> leave the idea above to people more concern with it. Please let me know
> your decision, I can provide one more revision later.

I'm sorry there is so much back and forth on this series. I hope we can
come to a common agreement and get something merged.

Thanks
Mattijs

>
> Regards,
> George
>
>>

Reply via email to