From: George Chan <[email protected]> Old logic wipe bootargs env with cmdline, new logic maintain the value by prepending cmdline value to bootargs.
Signed-off-by: George Chan <[email protected]> --- boot/bootm.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/boot/bootm.c b/boot/bootm.c index f6aa32746b7..888684a91f5 100644 --- a/boot/bootm.c +++ b/boot/bootm.c @@ -1152,11 +1152,38 @@ int bootm_boot_start(ulong addr, const char *cmdline) snprintf(addr_str, sizeof(addr_str), "%lx", addr); - ret = env_set("bootargs", cmdline); + if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE_PREPEND_ENV_BOOTARGS)) { + char *bootargs; + char *newbootargs; + bootargs = env_get("bootargs"); + ret = strlen(bootargs) + strlen(cmdline) + 2; + + newbootargs = malloc(ret); + + *newbootargs = '\0'; + + if (*newbootargs) /* If there is something in newbootargs, a space is needed */ + strcat(newbootargs, " "); + strcat(newbootargs, cmdline); + + if (*newbootargs) /* If there is something in newbootargs, a space is needed */ + strcat(newbootargs, " "); + strcat(newbootargs, bootargs); + + /* force to terminate the string */ + memset(newbootargs + MAX_CMDLINE_SIZE - 2, '\0', 1); + + ret = env_set("bootargs", newbootargs); + + free(newbootargs); + } else + ret = env_set("bootargs", cmdline); + if (ret) { printf("Failed to set cmdline\n"); return ret; } + bootm_init(&bmi); bmi.addr_img = addr_str; bmi.cmd_name = "bootm"; -- 2.43.0

