| From 2df3f70135941bda49c7355d4ae43e34c8fa73ab Mon Sep 17 00:00:00 2001 |
| From: Rob Herring <robh@kernel.org> |
| Date: Fri, 5 Jan 2018 15:32:33 -0600 |
| Subject: [PATCH 0934/1795] 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> |
| (cherry picked from commit 0fa1c579349fdd90173381712ad78aa99c09d38b) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/of/fdt.c | 16 ++++------------ |
| drivers/of/unittest.c | 11 ++++++++--- |
| include/linux/of_fdt.h | 1 - |
| 3 files changed, 12 insertions(+), 16 deletions(-) |
| |
| diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c |
| index 6337c394bfe3..13df2aeb9ac7 100644 |
| --- a/drivers/of/fdt.c |
| +++ b/drivers/of/fdt.c |
| @@ -14,6 +14,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> |
| @@ -1217,14 +1218,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) |
| { |
| @@ -1243,13 +1236,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 842097fe4064..f71a222a6654 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; |
| } |
| |
| diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h |
| index 013c5418aeec..f3d34619bd26 100644 |
| --- a/include/linux/of_fdt.h |
| +++ b/include/linux/of_fdt.h |
| @@ -77,7 +77,6 @@ extern void early_init_dt_add_memory_arch(u64 base, u64 size); |
| extern int early_init_dt_mark_hotplug_memory_arch(u64 base, u64 size); |
| extern int early_init_dt_reserve_memory_arch(phys_addr_t base, phys_addr_t size, |
| bool no_map); |
| -extern void * early_init_dt_alloc_memory_arch(u64 size, u64 align); |
| extern u64 dt_mem_next_cell(int s, const __be32 **cellp); |
| |
| /* Early flat tree scan hooks */ |
| -- |
| 2.19.0 |
| |