MIPS: Setup boot_command_line before plat_mem_setup
Platforms using DT will typically call __dt_setup_arch from plat_mem_setup. This in turn calls early_init_dt_scan. When CONFIG_CMDLINE is set, this leads to its value being copied into boot_command_line by early_init_dt_scan_chosen. If this happens before the code setting up boot_command_line in arch_mem_init runs, that code will go on to append CONFIG_CMDLINE (via builtin_cmdline) to boot_command_line again, duplicating it. For some command line parameters (eg. earlycon) this can be a problem. Set up boot_command_line before early_init_dt_scan_chosen gets called such that it will not write CONFIG_CMDLINE in this scenario & the arguments aren't duplicated. Signed-off-by: Paul Burton <paul.burton@mips.com> Acked-by: Mathieu Malaterre <malat@debian.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Maarten ter Huurne <maarten@treewalker.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/18483/ Signed-off-by: James Hogan <jhogan@kernel.org>
This commit is contained in:
parent
7a01c19007
commit
8ce355cf2e
1 changed files with 20 additions and 19 deletions
|
@ -826,25 +826,6 @@ static void __init arch_mem_init(char **cmdline_p)
|
||||||
struct memblock_region *reg;
|
struct memblock_region *reg;
|
||||||
extern void plat_mem_setup(void);
|
extern void plat_mem_setup(void);
|
||||||
|
|
||||||
/* call board setup routine */
|
|
||||||
plat_mem_setup();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure all kernel memory is in the maps. The "UP" and
|
|
||||||
* "DOWN" are opposite for initdata since if it crosses over
|
|
||||||
* into another memory section you don't want that to be
|
|
||||||
* freed when the initdata is freed.
|
|
||||||
*/
|
|
||||||
arch_mem_addpart(PFN_DOWN(__pa_symbol(&_text)) << PAGE_SHIFT,
|
|
||||||
PFN_UP(__pa_symbol(&_edata)) << PAGE_SHIFT,
|
|
||||||
BOOT_MEM_RAM);
|
|
||||||
arch_mem_addpart(PFN_UP(__pa_symbol(&__init_begin)) << PAGE_SHIFT,
|
|
||||||
PFN_DOWN(__pa_symbol(&__init_end)) << PAGE_SHIFT,
|
|
||||||
BOOT_MEM_INIT_RAM);
|
|
||||||
|
|
||||||
pr_info("Determined physical RAM map:\n");
|
|
||||||
print_memory_map();
|
|
||||||
|
|
||||||
#if defined(CONFIG_CMDLINE_BOOL) && defined(CONFIG_CMDLINE_OVERRIDE)
|
#if defined(CONFIG_CMDLINE_BOOL) && defined(CONFIG_CMDLINE_OVERRIDE)
|
||||||
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
|
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
|
||||||
#else
|
#else
|
||||||
|
@ -872,6 +853,26 @@ static void __init arch_mem_init(char **cmdline_p)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* call board setup routine */
|
||||||
|
plat_mem_setup();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure all kernel memory is in the maps. The "UP" and
|
||||||
|
* "DOWN" are opposite for initdata since if it crosses over
|
||||||
|
* into another memory section you don't want that to be
|
||||||
|
* freed when the initdata is freed.
|
||||||
|
*/
|
||||||
|
arch_mem_addpart(PFN_DOWN(__pa_symbol(&_text)) << PAGE_SHIFT,
|
||||||
|
PFN_UP(__pa_symbol(&_edata)) << PAGE_SHIFT,
|
||||||
|
BOOT_MEM_RAM);
|
||||||
|
arch_mem_addpart(PFN_UP(__pa_symbol(&__init_begin)) << PAGE_SHIFT,
|
||||||
|
PFN_DOWN(__pa_symbol(&__init_end)) << PAGE_SHIFT,
|
||||||
|
BOOT_MEM_INIT_RAM);
|
||||||
|
|
||||||
|
pr_info("Determined physical RAM map:\n");
|
||||||
|
print_memory_map();
|
||||||
|
|
||||||
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
|
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
|
||||||
|
|
||||||
*cmdline_p = command_line;
|
*cmdline_p = command_line;
|
||||||
|
|
Loading…
Add table
Reference in a new issue