mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
of/fdt: mark hotpluggable memory
When movable nodes are enabled, any node containing only hotpluggable memory is made movable at boot time. On x86, hotpluggable memory is discovered by parsing the ACPI SRAT, making corresponding calls to memblock_mark_hotplug(). If we introduce a dt property to describe memory as hotpluggable, configs supporting early fdt may then also do this marking and use movable nodes. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Reza Arbab <[email protected]> Tested-by: Balbir Singh <[email protected]> Acked-by: Balbir Singh <[email protected]> Cc: "Aneesh Kumar K.V" <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: Alistair Popple <[email protected]> Cc: Aneesh Kumar K.V <[email protected]> Cc: Benjamin Herrenschmidt <[email protected]> Cc: Bharata B Rao <[email protected]> Cc: Frank Rowand <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Nathan Fontenot <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Rob Herring <[email protected]> Cc: Stewart Smith <[email protected]> Cc: Thomas Gleixner <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
114cf3cc55
commit
41a9ada3e6
3 changed files with 21 additions and 1 deletions
|
|
@ -1015,6 +1015,7 @@ int __init early_init_dt_scan_memory(unsigned long node, const char *uname,
|
|||
const char *type = of_get_flat_dt_prop(node, "device_type", NULL);
|
||||
const __be32 *reg, *endp;
|
||||
int l;
|
||||
bool hotpluggable;
|
||||
|
||||
/* We are scanning "memory" nodes only */
|
||||
if (type == NULL) {
|
||||
|
|
@ -1034,6 +1035,7 @@ int __init early_init_dt_scan_memory(unsigned long node, const char *uname,
|
|||
return 0;
|
||||
|
||||
endp = reg + (l / sizeof(__be32));
|
||||
hotpluggable = of_get_flat_dt_prop(node, "hotpluggable", NULL);
|
||||
|
||||
pr_debug("memory scan node %s, reg size %d,\n", uname, l);
|
||||
|
||||
|
|
@ -1049,6 +1051,13 @@ int __init early_init_dt_scan_memory(unsigned long node, const char *uname,
|
|||
(unsigned long long)size);
|
||||
|
||||
early_init_dt_add_memory_arch(base, size);
|
||||
|
||||
if (!hotpluggable)
|
||||
continue;
|
||||
|
||||
if (early_init_dt_mark_hotplug_memory_arch(base, size))
|
||||
pr_warn("failed to mark hotplug range 0x%llx - 0x%llx\n",
|
||||
base, base + size);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -1146,6 +1155,11 @@ void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size)
|
|||
memblock_add(base, size);
|
||||
}
|
||||
|
||||
int __init __weak early_init_dt_mark_hotplug_memory_arch(u64 base, u64 size)
|
||||
{
|
||||
return memblock_mark_hotplug(base, size);
|
||||
}
|
||||
|
||||
int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base,
|
||||
phys_addr_t size, bool nomap)
|
||||
{
|
||||
|
|
@ -1168,6 +1182,11 @@ void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size)
|
|||
WARN_ON(1);
|
||||
}
|
||||
|
||||
int __init __weak early_init_dt_mark_hotplug_memory_arch(u64 base, u64 size)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base,
|
||||
phys_addr_t size, bool nomap)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue