[PATCH v2 1/5] boot: android: import addBootConfigParameters() from AOSP
Mattijs Korpershoek
mkorpershoek at kernel.org
Fri Oct 31 16:39:22 CET 2025
Hi Guillaume,
Thank you for the patch.
On Fri, Oct 17, 2025 at 15:19, "Guillaume La Roque (TI.com)" <glaroque at baylibre.com> wrote:
> From: "Mattijs Korpershoek (TI.com)" <mkorpershoek at kernel.org>
>
> To properly implement Android boot image v4, U-Boot must be able to
> add additional entries to the bootconfig.
>
> Add `add_bootconfig_parameters()` to do so.
>
> This has been imported from Google's U-Boot source[1]
> The variables/function names have been reworked to be
> compliant with U-Boot's coding style.
>
> [1] https://android.googlesource.com/platform/external/u-boot/+/7af0a0506d4de6f5ea147d10fb0664a8af07d326
> Signed-off-by: Mattijs Korpershoek (TI.com) <mkorpershoek at kernel.org>
> Signed-off-by: Guillaume La Roque (TI.com) <glaroque at baylibre.com>
Reviewed-by: Mattijs Korpershoek <mkorpershoek at kernel.org>
> ---
> boot/image-android.c | 38 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/boot/image-android.c b/boot/image-android.c
> index e46dee0d9b3..3a0a934acc7 100644
> --- a/boot/image-android.c
> +++ b/boot/image-android.c
> @@ -57,6 +57,44 @@ static ulong add_trailer(ulong bootconfig_start_addr, ulong bootconfig_size)
> return BOOTCONFIG_TRAILER_SIZE;
> }
>
> +/*
> + * Add a string of boot config parameters to memory appended by the trailer.
> + * NOTE: This function expects bootconfig_start_addr to be already mapped.
> + * It works directly with the mapped pointer, not a physical address.
> + */
> +u32 add_bootconfig_parameters(char *params, ulong params_size,
> + ulong bootconfig_start_addr, u32 bootconfig_size)
> +{
> + if (!params || !bootconfig_start_addr)
> + return -1;
> +
> + if (params_size == 0)
> + return 0;
> +
> + u32 applied_bytes = 0;
> + u32 new_size = 0;
> + ulong end = bootconfig_start_addr + bootconfig_size;
> +
> + if (is_trailer_present(end)) {
> + end -= BOOTCONFIG_TRAILER_SIZE;
> + applied_bytes -= BOOTCONFIG_TRAILER_SIZE;
> + memcpy(&new_size, (void *)end, BOOTCONFIG_SIZE_SIZE);
> + } else {
> + /*
> + * When no trailer is present, the bootconfig_size includes the actual content.
> + * We should write new parameters right after the existing content.
> + */
> + end = bootconfig_start_addr + bootconfig_size;
> + new_size = bootconfig_size;
> + }
> +
> + memcpy((void *)end, params, params_size);
> + applied_bytes += params_size;
> + applied_bytes += add_trailer(bootconfig_start_addr,
> + bootconfig_size + applied_bytes);
> + return applied_bytes;
> +}
> +
> __weak ulong get_avendor_bootimg_addr(void)
> {
> return -1;
>
> --
> 2.34.1
More information about the U-Boot
mailing list