mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 08:50:54 +07:00
ARM: 5880/1: arm: use generic infrastructure for early params
The ARM setup code includes its own parser for early params, there's also one in the generic init code. This patch removes __early_init (and related code) from arch/arm/kernel/setup.c, and changes users to the generic early_init macro instead. The generic macro takes a char * argument, rather than char **, so we need to update the parser functions a little. Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
e119bfff1f
commit
2b0d8c251b
@ -223,18 +223,6 @@ extern struct meminfo meminfo;
|
|||||||
#define bank_phys_end(bank) ((bank)->start + (bank)->size)
|
#define bank_phys_end(bank) ((bank)->start + (bank)->size)
|
||||||
#define bank_phys_size(bank) (bank)->size
|
#define bank_phys_size(bank) (bank)->size
|
||||||
|
|
||||||
/*
|
|
||||||
* Early command line parameters.
|
|
||||||
*/
|
|
||||||
struct early_params {
|
|
||||||
const char *arg;
|
|
||||||
void (*fn)(char **p);
|
|
||||||
};
|
|
||||||
|
|
||||||
#define __early_param(name,fn) \
|
|
||||||
static struct early_params __early_##fn __used \
|
|
||||||
__attribute__((__section__(".early_param.init"))) = { name, fn }
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -418,10 +418,11 @@ static int __init arm_add_memory(unsigned long start, unsigned long size)
|
|||||||
* Pick out the memory size. We look for mem=size@start,
|
* Pick out the memory size. We look for mem=size@start,
|
||||||
* where start and size are "size[KkMm]"
|
* where start and size are "size[KkMm]"
|
||||||
*/
|
*/
|
||||||
static void __init early_mem(char **p)
|
static int __init early_mem(char *p)
|
||||||
{
|
{
|
||||||
static int usermem __initdata = 0;
|
static int usermem __initdata = 0;
|
||||||
unsigned long size, start;
|
unsigned long size, start;
|
||||||
|
char *endp;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the user specifies memory size, we
|
* If the user specifies memory size, we
|
||||||
@ -434,52 +435,15 @@ static void __init early_mem(char **p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
start = PHYS_OFFSET;
|
start = PHYS_OFFSET;
|
||||||
size = memparse(*p, p);
|
size = memparse(p, &endp);
|
||||||
if (**p == '@')
|
if (*endp == '@')
|
||||||
start = memparse(*p + 1, p);
|
start = memparse(endp + 1, NULL);
|
||||||
|
|
||||||
arm_add_memory(start, size);
|
arm_add_memory(start, size);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
__early_param("mem=", early_mem);
|
early_param("mem", early_mem);
|
||||||
|
|
||||||
/*
|
|
||||||
* Initial parsing of the command line.
|
|
||||||
*/
|
|
||||||
static void __init parse_cmdline(char **cmdline_p, char *from)
|
|
||||||
{
|
|
||||||
char c = ' ', *to = command_line;
|
|
||||||
int len = 0;
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
if (c == ' ') {
|
|
||||||
extern struct early_params __early_begin, __early_end;
|
|
||||||
struct early_params *p;
|
|
||||||
|
|
||||||
for (p = &__early_begin; p < &__early_end; p++) {
|
|
||||||
int arglen = strlen(p->arg);
|
|
||||||
|
|
||||||
if (memcmp(from, p->arg, arglen) == 0) {
|
|
||||||
if (to != command_line)
|
|
||||||
to -= 1;
|
|
||||||
from += arglen;
|
|
||||||
p->fn(&from);
|
|
||||||
|
|
||||||
while (*from != ' ' && *from != '\0')
|
|
||||||
from++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
c = *from++;
|
|
||||||
if (!c)
|
|
||||||
break;
|
|
||||||
if (COMMAND_LINE_SIZE <= ++len)
|
|
||||||
break;
|
|
||||||
*to++ = c;
|
|
||||||
}
|
|
||||||
*to = '\0';
|
|
||||||
*cmdline_p = command_line;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init
|
static void __init
|
||||||
setup_ramdisk(int doload, int prompt, int image_start, unsigned int rd_sz)
|
setup_ramdisk(int doload, int prompt, int image_start, unsigned int rd_sz)
|
||||||
@ -740,9 +704,15 @@ void __init setup_arch(char **cmdline_p)
|
|||||||
init_mm.end_data = (unsigned long) _edata;
|
init_mm.end_data = (unsigned long) _edata;
|
||||||
init_mm.brk = (unsigned long) _end;
|
init_mm.brk = (unsigned long) _end;
|
||||||
|
|
||||||
memcpy(boot_command_line, from, COMMAND_LINE_SIZE);
|
/* parse_early_param needs a boot_command_line */
|
||||||
boot_command_line[COMMAND_LINE_SIZE-1] = '\0';
|
strlcpy(boot_command_line, from, COMMAND_LINE_SIZE);
|
||||||
parse_cmdline(cmdline_p, from);
|
|
||||||
|
/* populate command_line too for later use, preserving boot_command_line */
|
||||||
|
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
|
||||||
|
*cmdline_p = command_line;
|
||||||
|
|
||||||
|
parse_early_param();
|
||||||
|
|
||||||
paging_init(mdesc);
|
paging_init(mdesc);
|
||||||
request_standard_resources(&meminfo, mdesc);
|
request_standard_resources(&meminfo, mdesc);
|
||||||
|
|
||||||
|
@ -43,10 +43,6 @@ SECTIONS
|
|||||||
|
|
||||||
INIT_SETUP(16)
|
INIT_SETUP(16)
|
||||||
|
|
||||||
__early_begin = .;
|
|
||||||
*(.early_param.init)
|
|
||||||
__early_end = .;
|
|
||||||
|
|
||||||
INIT_CALLS
|
INIT_CALLS
|
||||||
CON_INITCALL
|
CON_INITCALL
|
||||||
SECURITY_INITCALL
|
SECURITY_INITCALL
|
||||||
|
@ -32,12 +32,13 @@ unsigned int mem_fclk_21285 = 50000000;
|
|||||||
|
|
||||||
EXPORT_SYMBOL(mem_fclk_21285);
|
EXPORT_SYMBOL(mem_fclk_21285);
|
||||||
|
|
||||||
static void __init early_fclk(char **arg)
|
static int __init early_fclk(char *arg)
|
||||||
{
|
{
|
||||||
mem_fclk_21285 = simple_strtoul(*arg, arg, 0);
|
mem_fclk_21285 = simple_strtoul(arg, NULL, 0);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__early_param("mem_fclk_21285=", early_fclk);
|
early_param("mem_fclk_21285", early_fclk);
|
||||||
|
|
||||||
static int __init parse_tag_memclk(const struct tag *tag)
|
static int __init parse_tag_memclk(const struct tag *tag)
|
||||||
{
|
{
|
||||||
|
@ -32,19 +32,21 @@
|
|||||||
static unsigned long phys_initrd_start __initdata = 0;
|
static unsigned long phys_initrd_start __initdata = 0;
|
||||||
static unsigned long phys_initrd_size __initdata = 0;
|
static unsigned long phys_initrd_size __initdata = 0;
|
||||||
|
|
||||||
static void __init early_initrd(char **p)
|
static int __init early_initrd(char *p)
|
||||||
{
|
{
|
||||||
unsigned long start, size;
|
unsigned long start, size;
|
||||||
|
char *endp;
|
||||||
|
|
||||||
start = memparse(*p, p);
|
start = memparse(p, &endp);
|
||||||
if (**p == ',') {
|
if (*endp == ',') {
|
||||||
size = memparse((*p) + 1, p);
|
size = memparse(endp + 1, NULL);
|
||||||
|
|
||||||
phys_initrd_start = start;
|
phys_initrd_start = start;
|
||||||
phys_initrd_size = size;
|
phys_initrd_size = size;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
__early_param("initrd=", early_initrd);
|
early_param("initrd", early_initrd);
|
||||||
|
|
||||||
static int __init parse_tag_initrd(const struct tag *tag)
|
static int __init parse_tag_initrd(const struct tag *tag)
|
||||||
{
|
{
|
||||||
|
@ -100,18 +100,17 @@ static struct cachepolicy cache_policies[] __initdata = {
|
|||||||
* writebuffer to be turned off. (Note: the write
|
* writebuffer to be turned off. (Note: the write
|
||||||
* buffer should not be on and the cache off).
|
* buffer should not be on and the cache off).
|
||||||
*/
|
*/
|
||||||
static void __init early_cachepolicy(char **p)
|
static int __init early_cachepolicy(char *p)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(cache_policies); i++) {
|
for (i = 0; i < ARRAY_SIZE(cache_policies); i++) {
|
||||||
int len = strlen(cache_policies[i].policy);
|
int len = strlen(cache_policies[i].policy);
|
||||||
|
|
||||||
if (memcmp(*p, cache_policies[i].policy, len) == 0) {
|
if (memcmp(p, cache_policies[i].policy, len) == 0) {
|
||||||
cachepolicy = i;
|
cachepolicy = i;
|
||||||
cr_alignment &= ~cache_policies[i].cr_mask;
|
cr_alignment &= ~cache_policies[i].cr_mask;
|
||||||
cr_no_alignment &= ~cache_policies[i].cr_mask;
|
cr_no_alignment &= ~cache_policies[i].cr_mask;
|
||||||
*p += len;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,36 +129,37 @@ static void __init early_cachepolicy(char **p)
|
|||||||
}
|
}
|
||||||
flush_cache_all();
|
flush_cache_all();
|
||||||
set_cr(cr_alignment);
|
set_cr(cr_alignment);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
__early_param("cachepolicy=", early_cachepolicy);
|
early_param("cachepolicy", early_cachepolicy);
|
||||||
|
|
||||||
static void __init early_nocache(char **__unused)
|
static int __init early_nocache(char *__unused)
|
||||||
{
|
{
|
||||||
char *p = "buffered";
|
char *p = "buffered";
|
||||||
printk(KERN_WARNING "nocache is deprecated; use cachepolicy=%s\n", p);
|
printk(KERN_WARNING "nocache is deprecated; use cachepolicy=%s\n", p);
|
||||||
early_cachepolicy(&p);
|
early_cachepolicy(p);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
__early_param("nocache", early_nocache);
|
early_param("nocache", early_nocache);
|
||||||
|
|
||||||
static void __init early_nowrite(char **__unused)
|
static int __init early_nowrite(char *__unused)
|
||||||
{
|
{
|
||||||
char *p = "uncached";
|
char *p = "uncached";
|
||||||
printk(KERN_WARNING "nowb is deprecated; use cachepolicy=%s\n", p);
|
printk(KERN_WARNING "nowb is deprecated; use cachepolicy=%s\n", p);
|
||||||
early_cachepolicy(&p);
|
early_cachepolicy(p);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
__early_param("nowb", early_nowrite);
|
early_param("nowb", early_nowrite);
|
||||||
|
|
||||||
static void __init early_ecc(char **p)
|
static int __init early_ecc(char *p)
|
||||||
{
|
{
|
||||||
if (memcmp(*p, "on", 2) == 0) {
|
if (memcmp(p, "on", 2) == 0)
|
||||||
ecc_mask = PMD_PROTECTION;
|
ecc_mask = PMD_PROTECTION;
|
||||||
*p += 2;
|
else if (memcmp(p, "off", 3) == 0)
|
||||||
} else if (memcmp(*p, "off", 3) == 0) {
|
|
||||||
ecc_mask = 0;
|
ecc_mask = 0;
|
||||||
*p += 3;
|
return 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
__early_param("ecc=", early_ecc);
|
early_param("ecc", early_ecc);
|
||||||
|
|
||||||
static int __init noalign_setup(char *__unused)
|
static int __init noalign_setup(char *__unused)
|
||||||
{
|
{
|
||||||
@ -670,9 +670,9 @@ static unsigned long __initdata vmalloc_reserve = SZ_128M;
|
|||||||
* bytes. This can be used to increase (or decrease) the vmalloc
|
* bytes. This can be used to increase (or decrease) the vmalloc
|
||||||
* area - the default is 128m.
|
* area - the default is 128m.
|
||||||
*/
|
*/
|
||||||
static void __init early_vmalloc(char **arg)
|
static int __init early_vmalloc(char *arg)
|
||||||
{
|
{
|
||||||
vmalloc_reserve = memparse(*arg, arg);
|
vmalloc_reserve = memparse(arg, NULL);
|
||||||
|
|
||||||
if (vmalloc_reserve < SZ_16M) {
|
if (vmalloc_reserve < SZ_16M) {
|
||||||
vmalloc_reserve = SZ_16M;
|
vmalloc_reserve = SZ_16M;
|
||||||
@ -687,8 +687,9 @@ static void __init early_vmalloc(char **arg)
|
|||||||
"vmalloc area is too big, limiting to %luMB\n",
|
"vmalloc area is too big, limiting to %luMB\n",
|
||||||
vmalloc_reserve >> 20);
|
vmalloc_reserve >> 20);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
__early_param("vmalloc=", early_vmalloc);
|
early_param("vmalloc", early_vmalloc);
|
||||||
|
|
||||||
#define VMALLOC_MIN (void *)(VMALLOC_END - vmalloc_reserve)
|
#define VMALLOC_MIN (void *)(VMALLOC_END - vmalloc_reserve)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user