MIPS: cmdline: Add support for 'memmap' parameter
Implement support for parsing 'memmap' kernel command line parameter.
This patch covers parsing of the following two formats for 'memmap'
parameter values:
- nn[KMG]@ss[KMG]
- nn[KMG]$ss[KMG]
([KMG] = K M or G (kilo, mega, giga))
These two allowed formats for parameter value are already documented
in file kernel-parameters.txt in Documentation/admin-guide folder.
Some architectures already support them, but Mips did not prior to
this patch.
Excerpt from Documentation/admin-guide/kernel-parameters.txt:
memmap=nn[KMG]@ss[KMG]
[KNL] Force usage of a specific region of memory.
Region of memory to be used is from ss to ss+nn.
memmap=nn[KMG]$ss[KMG]
Mark specific memory as reserved.
Region of memory to be reserved is from ss to ss+nn.
Example: Exclude memory from 0x18690000-0x1869ffff
memmap=64K$0x18690000
or
memmap=0x10000$0x18690000
There is no need to update this documentation file with respect to
this patch.
Signed-off-by: Miodrag Dinic <miodrag.dinic@imgtec.com>
Signed-off-by: Goran Ferenc <goran.ferenc@imgtec.com>
Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Cc: James.Hogan@imgtec.com
Cc: Paul.Burton@imgtec.com
Cc: Raghu.Gandham@imgtec.com
Cc: Leonid.Yegoshin@imgtec.com
Cc: Douglas.Leung@imgtec.com
Cc: Petar.Jovanovic@imgtec.com
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/16508/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
b9c4dc2cf9
commit
296a7624f5
@@ -670,6 +670,46 @@ static int __init early_parse_mem(char *p)
|
|||||||
}
|
}
|
||||||
early_param("mem", early_parse_mem);
|
early_param("mem", early_parse_mem);
|
||||||
|
|
||||||
|
static int __init early_parse_memmap(char *p)
|
||||||
|
{
|
||||||
|
char *oldp;
|
||||||
|
u64 start_at, mem_size;
|
||||||
|
|
||||||
|
if (!p)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (!strncmp(p, "exactmap", 8)) {
|
||||||
|
pr_err("\"memmap=exactmap\" invalid on MIPS\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
oldp = p;
|
||||||
|
mem_size = memparse(p, &p);
|
||||||
|
if (p == oldp)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (*p == '@') {
|
||||||
|
start_at = memparse(p+1, &p);
|
||||||
|
add_memory_region(start_at, mem_size, BOOT_MEM_RAM);
|
||||||
|
} else if (*p == '#') {
|
||||||
|
pr_err("\"memmap=nn#ss\" (force ACPI data) invalid on MIPS\n");
|
||||||
|
return -EINVAL;
|
||||||
|
} else if (*p == '$') {
|
||||||
|
start_at = memparse(p+1, &p);
|
||||||
|
add_memory_region(start_at, mem_size, BOOT_MEM_RESERVED);
|
||||||
|
} else {
|
||||||
|
pr_err("\"memmap\" invalid format!\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*p == '\0') {
|
||||||
|
usermem = 1;
|
||||||
|
return 0;
|
||||||
|
} else
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
early_param("memmap", early_parse_memmap);
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_VMCORE
|
#ifdef CONFIG_PROC_VMCORE
|
||||||
unsigned long setup_elfcorehdr, setup_elfcorehdr_size;
|
unsigned long setup_elfcorehdr, setup_elfcorehdr_size;
|
||||||
static int __init early_parse_elfcorehdr(char *p)
|
static int __init early_parse_elfcorehdr(char *p)
|
||||||
|
|||||||
Reference in New Issue
Block a user