diff options
author | Rob Herring <robh@kernel.org> | 2018-01-05 15:32:33 -0600 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2018-01-08 08:24:34 -0600 |
commit | 0fa1c579349fdd90173381712ad78aa99c09d38b (patch) | |
tree | 75cb0dbfbfad3df504ed14d52cca36a84683478b /drivers | |
parent | af6074fc9aa4b29517375634189ada1869eea598 (diff) | |
download | linux-stable-0fa1c579349fdd90173381712ad78aa99c09d38b.tar.gz linux-stable-0fa1c579349fdd90173381712ad78aa99c09d38b.tar.bz2 linux-stable-0fa1c579349fdd90173381712ad78aa99c09d38b.zip |
of/fdt: use memblock_virt_alloc for early alloc
memblock_virt_alloc() works for both memblock and bootmem, so use it and
make early_init_dt_alloc_memory_arch a static function. The arches using
bootmem define early_init_dt_alloc_memory_arch as either:
__alloc_bootmem(size, align, __pa(MAX_DMA_ADDRESS))
or:
alloc_bootmem_align(size, align)
Both of these evaluate to the same thing as does memblock_virt_alloc for
bootmem. So we can disable the arch specific functions by making
early_init_dt_alloc_memory_arch static and they can be removed in
subsequent commits.
Cc: Frank Rowand <frowand.list@gmail.com>
Signed-off-by: Rob Herring <robh@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/of/fdt.c | 16 | ||||
-rw-r--r-- | drivers/of/unittest.c | 11 |
2 files changed, 12 insertions, 15 deletions
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 7db5353a24c0..84aa9d676375 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -11,6 +11,7 @@ #include <linux/crc32.h> #include <linux/kernel.h> #include <linux/initrd.h> +#include <linux/bootmem.h> #include <linux/memblock.h> #include <linux/mutex.h> #include <linux/of.h> @@ -1180,14 +1181,6 @@ int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base, return memblock_reserve(base, size); } -/* - * called from unflatten_device_tree() to bootstrap devicetree itself - * Architectures can override this definition if memblock isn't used - */ -void * __init __weak early_init_dt_alloc_memory_arch(u64 size, u64 align) -{ - return __va(memblock_alloc(size, align)); -} #else void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size) { @@ -1206,13 +1199,12 @@ int __init __weak early_init_dt_reserve_memory_arch(phys_addr_t base, &base, &size, nomap ? " (nomap)" : ""); return -ENOSYS; } +#endif -void * __init __weak early_init_dt_alloc_memory_arch(u64 size, u64 align) +static void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align) { - WARN_ON(1); - return NULL; + return memblock_virt_alloc(size, align); } -#endif bool __init early_init_dt_verify(void *params) { diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 0f8052f1355c..7a9abaae874d 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -5,6 +5,7 @@ #define pr_fmt(fmt) "### dt-test ### " fmt +#include <linux/bootmem.h> #include <linux/clk.h> #include <linux/err.h> #include <linux/errno.h> @@ -2053,6 +2054,11 @@ static struct overlay_info overlays[] = { static struct device_node *overlay_base_root; +static void * __init dt_alloc_memory(u64 size, u64 align) +{ + return memblock_virt_alloc(size, align); +} + /* * Create base device tree for the overlay unittest. * @@ -2092,8 +2098,7 @@ void __init unittest_unflatten_overlay_base(void) return; } - info->data = early_init_dt_alloc_memory_arch(size, - roundup_pow_of_two(FDT_V17_SIZE)); + info->data = dt_alloc_memory(size, roundup_pow_of_two(FDT_V17_SIZE)); if (!info->data) { pr_err("alloc for dtb 'overlay_base' failed"); return; @@ -2102,7 +2107,7 @@ void __init unittest_unflatten_overlay_base(void) memcpy(info->data, info->dtb_begin, size); __unflatten_device_tree(info->data, NULL, &info->np_overlay, - early_init_dt_alloc_memory_arch, true); + dt_alloc_memory, true); overlay_base_root = info->np_overlay; } |