@@ -1068,8 +1068,16 @@ int __init early_init_dt_scan_chosen(char *cmdline)
fdt_totalsize(initial_boot_params));
}
- /* Retrieve command line */
- p = of_get_flat_dt_prop(node, "bootargs", &l);
+ /*
+ * Retrieve command line
+ * bootargs might be hardcoded and overwrite by bootloader on
+ * kernel load.
+ * Check if alternative bootargs-override is present instead
+ * first.
+ */
+ p = of_get_flat_dt_prop(node, "bootargs-override", &l);
+ if (p == NULL || l == 0)
+ p = of_get_flat_dt_prop(node, "bootargs", &l);
if (p != NULL && l > 0)
strscpy(cmdline, p, min(l, COMMAND_LINE_SIZE));
On some devices bootloader may hardcoded and overwrite the bootargs DT property passed in "/chosen" when the kernel is loaded resulting in the value dropped. While CMDLINE_FORCE can be used, this is not a good option for kernels that are shared across devices. This setting enables using "/chosen/bootargs-override" as the cmdline if it exists in the device tree. This broken behaviour was found in various devices from ipq806x Soc, to Mediatek and even PowerPC. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> --- drivers/of/fdt.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)