DT: consolidate bootmem support
Subsystems (2)
Rob Herring
maintainercover DT: consolidate bootmem support
This series adds support for bootmem to the DT core code and removes the remaining arch specific early_init_dt_alloc_memory_arch implementations.
Compile tested only on arm64, mips, x86, and xtensa.
Rob
Rob Herring (7):
of/fdt: use memblock_virt_alloc for early alloc
cris: remove arch specific early DT functions
metag: remove arch specific early DT functions
mips: remove arch specific early_init_dt_alloc_memory_arch
nios2: remove arch specific early_init_dt_alloc_memory_arch
x86: remove arch specific early_init_dt_alloc_memory_arch
xtensa: remove arch specific early DT functions
arch/cris/kernel/Makefile | 19 ------------------- arch/cris/kernel/devicetree.c | 15 --------------- arch/metag/kernel/devtree.c | 14 -------------- arch/mips/kernel/prom.c | 5 ----- arch/nios2/kernel/prom.c | 5 ----- arch/x86/kernel/devicetree.c | 6 ------ arch/xtensa/kernel/setup.c | 12 ------------ drivers/of/fdt.c | 16 ++++------------ drivers/of/unittest.c | 11 ++++++++--- include/linux/of_fdt.h | 1 - 10 files changed, 12 insertions(+), 92 deletions(-) delete mode 100644 arch/cris/kernel/devicetree.c
Signature · 1 line
2.14.1
Rob Herring
maintainerPATCH 1/7 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.
--- drivers/of/fdt.c | 16 ++++------------ drivers/of/unittest.c | 11 ++++++++--- include/linux/of_fdt.h | 1 - 3 files changed, 12 insertions(+), 16 deletions(-)
drivers/of/fdt.c +4 -12
@@ -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>
@@ -1183,14 +1184,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) {
@@ -1209,13 +1202,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) {
drivers/of/unittest.c +8 -3
@@ -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; }
include/linux/of_fdt.h +0 -1
@@ -83,7 +83,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 */
Signature · 6 lines
2.14.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Rob Herring
maintainerPATCH 2/7 cris: remove arch specific early DT functions
In reply to Rob HerringNow that the DT core code handles bootmem arches, we can remove the cris specific early_init_dt_alloc_memory_arch function. As the default early_init_dt_add_memory_arch just does a WARN, we can just remove the entire devicetree.c file.
---
This is dependent on patch 1. Please ack and I'll take or apply after 4.16-rc1.
arch/cris/kernel/Makefile | 19 ------------------- arch/cris/kernel/devicetree.c | 15 --------------- 2 files changed, 34 deletions(-) delete mode 100644 arch/cris/kernel/devicetree.c
arch/cris/kernel/Makefile +0 -19
@@ -1,19 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# $Id: Makefile,v 1.12 2004/10/19 13:07:43 starvik Exp $ -# -# Makefile for the linux kernel. -# - -CPPFLAGS_vmlinux.lds := -DDRAM_VIRTUAL_BASE=0x$(CONFIG_ETRAX_DRAM_VIRTUAL_BASE) -extra-y := vmlinux.lds - -obj-y := process.o traps.o irq.o ptrace.o setup.o time.o sys_cris.o -obj-y += devicetree.o -obj-y += stacktrace.o - -obj-$(CONFIG_MODULES) += crisksyms.o -obj-$(CONFIG_MODULES) += module.o -obj-$(CONFIG_SYSTEM_PROFILER) += profile.o - -clean: -
arch/cris/kernel/devicetree.c deleted +0 -15
@@ -1,15 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -#include <linux/init.h> -#include <linux/bootmem.h> -#include <linux/printk.h> - -void __init early_init_dt_add_memory_arch (u64 base,u64 size) -{ -pr_err ("%s(%llx, %llx)\n" , - __func__, base, size); -} - -void *__init early_init_dt_alloc_memory_arch (u64 size,u64 align) -{ -return alloc_bootmem_align (size, align); -}
Signature · 1 line
2.14.1
Rob Herring
maintainerPATCH 3/7 metag: remove arch specific early DT functions
In reply to Rob HerringNow that the DT core code handles bootmem arches, we can remove the metag specific early_init_dt_alloc_memory_arch function. As the default early_init_dt_add_memory_arch just does a WARN, we can remove it too.
---
This is dependent on patch 1. Please ack and I'll take or apply after 4.16-rc1.
arch/metag/kernel/devtree.c | 14 -------------- 1 file changed, 14 deletions(-)
arch/metag/kernel/devtree.c +0 -14
@@ -14,26 +14,12 @@#include <linux/init.h> #include <linux/export.h> #include <linux/types.h> -#include <linux/bootmem.h> -#include <linux/memblock.h> -#include <linux/of.h> #include <linux/of_fdt.h> #include <asm/setup.h> #include <asm/page.h> #include <asm/mach/arch.h> -void __init early_init_dt_add_memory_arch (u64 base,u64 size) -{ -pr_err ("%s(%llx, %llx)\n" , - __func__, base, size); -} - -void *__init early_init_dt_alloc_memory_arch (u64 size,u64 align) -{ -return alloc_bootmem_align (size, align); -} -static const void *__init arch_get_next_mach (const char *const **match) {static const struct machine_desc *mdesc = __arch_info_begin;
Signature · 1 line
2.14.1
Rob Herring
maintainerPATCH 4/7 mips: remove arch specific early_init_dt_alloc_memory_arch
In reply to Rob HerringNow that the DT core code handles bootmem arches, we can remove the MIPS specific early_init_dt_alloc_memory_arch function.
---
This is dependent on patch 1. Please ack and I'll take or apply after 4.16-rc1.
arch/mips/kernel/prom.c | 5 ----- 1 file changed, 5 deletions(-)
arch/mips/kernel/prom.c +0 -5
@@ -44,11 +44,6 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)return add_memory_region (base, size,BOOT_MEM_RAM ); } -void *__init early_init_dt_alloc_memory_arch (u64 size,u64 align) -{ -return __alloc_bootmem (size, align,__pa (MAX_DMA_ADDRESS )); -} -int __init early_init_dt_reserve_memory_arch (phys_addr_t base,phys_addr_t size,bool nomap) {
Signature · 1 line
2.14.1