From f15d27f9c90ede4b16eb37f9ae573ef81c2b6996 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 31 Dec 2020 18:49:12 +0100 Subject: [PATCH] MIPS: add bootargs-override property Add support for the bootargs-override property to the chosen node similar to the one used on ipq806x or mpc85xx. This is necessary, as the U-Boot used on some boards, notably the Ubiquiti UniFi 6 Lite, overwrite the bootargs property of the chosen node leading to a kernel panic when loading OpenWrt. Signed-off-by: David Bauer --- arch/mips/kernel/setup.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) --- a/arch/mips/kernel/setup.c +++ b/arch/mips/kernel/setup.c @@ -563,8 +563,28 @@ static int __init bootcmdline_scan_chose #endif /* CONFIG_OF_EARLY_FLATTREE */ +static int __init bootcmdline_scan_chosen_override(unsigned long node, const char *uname, + int depth, void *data) +{ + bool *dt_bootargs = data; + const char *p; + int l; + + if (depth != 1 || !data || strcmp(uname, "chosen") != 0) + return 0; + + p = of_get_flat_dt_prop(node, "bootargs-override", &l); + if (p != NULL && l > 0) { + strlcpy(boot_command_line, p, COMMAND_LINE_SIZE); + *dt_bootargs = true; + } + + return 1; +} + static void __init bootcmdline_init(void) { + bool dt_bootargs_override = false; bool dt_bootargs = false; /* @@ -578,6 +598,14 @@ static void __init bootcmdline_init(void } /* + * If bootargs-override in the chosen node is set, use this as the + * command line + */ + of_scan_flat_dt(bootcmdline_scan_chosen_override, &dt_bootargs_override); + if (dt_bootargs_override) + return; + + /* * If the user specified a built-in command line & * MIPS_CMDLINE_BUILTIN_EXTEND, then the built-in command line is * prepended to arguments from the bootloader or DT so we'll copy them