From: Petr Štetiar Date: Wed, 10 Jun 2020 14:01:06 +0000 (+0200) Subject: mvebu: fix bootloader kernel commandline mangling X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=014c101e0b4c50c13f3c64e6c716827095afa46e;p=openwrt%2Fstaging%2Flinusw.git mvebu: fix bootloader kernel commandline mangling Currently I'm unable to boot initramfs image with `console=ttyS0,115200` kernel commandline as the kernel commandline mangling resets kernel commandline if there is no `root=` option provided, efectively clearing whatever I pass to the kernel, making the `root=` option mandatory. So if the kernel commandline mangling is not appropriate just leave the kernel commandline as it is. Signed-off-by: Petr Štetiar --- diff --git a/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch b/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch index 2f942ea3af..5969a10a86 100644 --- a/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch +++ b/target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch @@ -21,10 +21,10 @@ was found, resulting in blank cmdline and failure to boot. Signed-off-by: Michael Gray --- - arch/arm/Kconfig | 11 +++++ - arch/arm/boot/compressed/atags_to_fdt.c | 72 ++++++++++++++++++++++++++++++++- - init/main.c | 16 ++++++++ - 3 files changed, 98 insertions(+), 1 deletion(-) + arch/arm/Kconfig | 11 ++++ + arch/arm/boot/compressed/atags_to_fdt.c | 85 ++++++++++++++++++++++++- + init/main.c | 16 +++++ + 3 files changed, 111 insertions(+), 1 deletion(-) --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -57,7 +57,7 @@ Signed-off-by: Michael Gray #else #define do_extend_cmdline 0 #endif -@@ -67,6 +69,65 @@ static uint32_t get_cell_size(const void +@@ -67,6 +69,72 @@ static uint32_t get_cell_size(const void return cell_size; } @@ -78,7 +78,8 @@ Signed-off-by: Michael Gray + do { + ptr++; + ptr = strchr(ptr, 'r'); -+ if(!ptr) return dest; ++ if (!ptr) ++ goto no_append; + + } while (ptr != str && *(ptr-1) != ' '); + @@ -97,25 +98,31 @@ Signed-off-by: Michael Gray + + /* if append-rootblock property is set use it to append to command line */ + rootblock = getprop(fdt, "/chosen", "append-rootblock", &l); -+ if(rootblock != NULL) { -+ if(*dest != ' ') { -+ *dest = ' '; -+ dest++; -+ len++; -+ } -+ if (len + l + i <= COMMAND_LINE_SIZE) { -+ memcpy(dest, rootblock, l); -+ dest += l - 1; -+ memcpy(dest, ptr, i); -+ dest += i; -+ } -+ } else { -+ len = strlen(str); -+ if (len + 1 < COMMAND_LINE_SIZE) { -+ memcpy(dest, str, len); -+ dest += len; -+ } ++ if (rootblock == NULL) ++ goto no_append; ++ ++ if (*dest != ' ') { ++ *dest = ' '; ++ dest++; ++ len++; ++ } ++ ++ if (len + l + i <= COMMAND_LINE_SIZE) { ++ memcpy(dest, rootblock, l); ++ dest += l - 1; ++ memcpy(dest, ptr, i); ++ dest += i; + } ++ ++ return dest; ++ ++no_append: ++ len = strlen(str); ++ if (len + 1 < COMMAND_LINE_SIZE) { ++ memcpy(dest, str, len); ++ dest += len; ++ } ++ + return dest; +} +#endif @@ -123,7 +130,7 @@ Signed-off-by: Michael Gray static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline) { char cmdline[COMMAND_LINE_SIZE]; -@@ -86,12 +147,21 @@ static void merge_fdt_bootargs(void *fdt +@@ -86,12 +154,21 @@ static void merge_fdt_bootargs(void *fdt /* and append the ATAG_CMDLINE */ if (fdt_cmdline) { @@ -145,7 +152,7 @@ Signed-off-by: Michael Gray } *ptr = '\0'; -@@ -166,7 +236,9 @@ int atags_to_fdt(void *atag_list, void * +@@ -166,7 +243,9 @@ int atags_to_fdt(void *atag_list, void * else setprop_string(fdt, "/chosen", "bootargs", atag->u.cmdline.cmdline); @@ -156,7 +163,7 @@ Signed-off-by: Michael Gray if (memcount >= sizeof(mem_reg_property)/4) continue; if (!atag->u.mem.size) -@@ -210,6 +282,10 @@ int atags_to_fdt(void *atag_list, void * +@@ -210,6 +289,10 @@ int atags_to_fdt(void *atag_list, void * setprop(fdt, "/memory", "reg", mem_reg_property, 4 * memcount * memsize); }