diff options
author | Petr Štetiar <ynezz@true.cz> | 2020-06-10 16:01:06 +0200 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2020-06-16 23:36:26 +0200 |
commit | 014c101e0b4c50c13f3c64e6c716827095afa46e (patch) | |
tree | 5e8b3d6109ee4b21ea1ea92c132f610134d35667 | |
parent | c4037a5b9eee09c96e5c8108f1b7aa439f96cb6b (diff) | |
download | upstream-014c101e0b4c50c13f3c64e6c716827095afa46e.tar.gz upstream-014c101e0b4c50c13f3c64e6c716827095afa46e.tar.bz2 upstream-014c101e0b4c50c13f3c64e6c716827095afa46e.zip |
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 <ynezz@true.cz>
-rw-r--r-- | target/linux/mvebu/patches-5.4/006-mvebu-Mangle-bootloader-s-kernel-arguments.patch | 61 |
1 files changed, 34 insertions, 27 deletions
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 <michael.gray@lantisproject.com> --- - 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 <michael.gray@lantisproject.com> #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 <michael.gray@lantisproject.com> + 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 <michael.gray@lantisproject.com> + + /* 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 <michael.gray@lantisproject.com> 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 <michael.gray@lantisproject.com> } *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 <michael.gray@lantisproject.com> 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); } |