From: Marek Szyprowski Date: Wed, 25 Mar 2026 09:00:17 +0000 (+0100) Subject: of: reserved_mem: remove fdt node from the structure X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=abdd23c8849d45c6bdef0ab6facbbc63bddebbe1;p=thirdparty%2Fkernel%2Fstable.git of: reserved_mem: remove fdt node from the structure FDT node is not needed for anything besides the initialization, so it can be simply passed as an argument to the reserved memory region init function. Signed-off-by: Marek Szyprowski Link: https://patch.msgid.link/20260325090023.3175348-2-m.szyprowski@samsung.com Signed-off-by: Rob Herring (Arm) --- diff --git a/drivers/memory/tegra/tegra210-emc-table.c b/drivers/memory/tegra/tegra210-emc-table.c index 34a8785d2861a..ac1d1e13482a3 100644 --- a/drivers/memory/tegra/tegra210-emc-table.c +++ b/drivers/memory/tegra/tegra210-emc-table.c @@ -75,7 +75,8 @@ static const struct reserved_mem_ops tegra210_emc_table_ops = { .device_release = tegra210_emc_table_device_release, }; -static int tegra210_emc_table_init(struct reserved_mem *rmem) +static int tegra210_emc_table_init(unsigned long node, + struct reserved_mem *rmem) { pr_debug("Tegra210 EMC table at %pa, size %lu bytes\n", &rmem->base, (unsigned long)rmem->size); diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index 1fd28f8056108..6705b7afebf00 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -104,7 +104,8 @@ static void __init alloc_reserved_mem_array(void) reserved_mem = new_array; } -static void __init fdt_init_reserved_mem_node(struct reserved_mem *rmem); +static void __init fdt_init_reserved_mem_node(struct reserved_mem *rmem, + unsigned long node); /* * fdt_reserved_mem_save_node() - save fdt node for second pass initialization */ @@ -118,13 +119,12 @@ static void __init fdt_reserved_mem_save_node(unsigned long node, const char *un return; } - rmem->fdt_node = node; rmem->name = uname; rmem->base = base; rmem->size = size; /* Call the region specific initialization function */ - fdt_init_reserved_mem_node(rmem); + fdt_init_reserved_mem_node(rmem, node); reserved_mem_count++; } @@ -483,7 +483,8 @@ static const struct of_device_id __rmem_of_table_sentinel /* * __reserved_mem_init_node() - call region specific reserved memory init code */ -static int __init __reserved_mem_init_node(struct reserved_mem *rmem) +static int __init __reserved_mem_init_node(struct reserved_mem *rmem, + unsigned long node) { extern const struct of_device_id __reservedmem_of_table[]; const struct of_device_id *i; @@ -493,10 +494,10 @@ static int __init __reserved_mem_init_node(struct reserved_mem *rmem) reservedmem_of_init_fn initfn = i->data; const char *compat = i->compatible; - if (!of_flat_dt_is_compatible(rmem->fdt_node, compat)) + if (!of_flat_dt_is_compatible(node, compat)) continue; - ret = initfn(rmem); + ret = initfn(node, rmem); if (ret == 0) { pr_info("initialized node %s, compatible id %s\n", rmem->name, compat); @@ -526,11 +527,6 @@ static int __init __rmem_cmp(const void *a, const void *b) if (ra->size > rb->size) return 1; - if (ra->fdt_node < rb->fdt_node) - return -1; - if (ra->fdt_node > rb->fdt_node) - return 1; - return 0; } @@ -564,19 +560,20 @@ static void __init __rmem_check_for_overlap(void) /** * fdt_init_reserved_mem_node() - Initialize a reserved memory region * @rmem: reserved_mem struct of the memory region to be initialized. + * @node: fdt node of the initialized region * * This function is used to call the region specific initialization * function for a reserved memory region. */ -static void __init fdt_init_reserved_mem_node(struct reserved_mem *rmem) +static void __init fdt_init_reserved_mem_node(struct reserved_mem *rmem, + unsigned long node) { - unsigned long node = rmem->fdt_node; int err = 0; bool nomap; nomap = of_get_flat_dt_prop(node, "no-map", NULL) != NULL; - err = __reserved_mem_init_node(rmem); + err = __reserved_mem_init_node(rmem, node); if (err != 0 && err != -ENOENT) { pr_info("node %s compatible matching fail\n", rmem->name); if (nomap) diff --git a/include/linux/of_reserved_mem.h b/include/linux/of_reserved_mem.h index f573423359f48..5159938bfe03c 100644 --- a/include/linux/of_reserved_mem.h +++ b/include/linux/of_reserved_mem.h @@ -11,7 +11,6 @@ struct resource; struct reserved_mem { const char *name; - unsigned long fdt_node; const struct reserved_mem_ops *ops; phys_addr_t base; phys_addr_t size; @@ -25,7 +24,8 @@ struct reserved_mem_ops { struct device *dev); }; -typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem); +typedef int (*reservedmem_of_init_fn)(unsigned long node, + struct reserved_mem *rmem); #ifdef CONFIG_OF_RESERVED_MEM diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c index 1147497bc512c..34621acbd3c59 100644 --- a/kernel/dma/coherent.c +++ b/kernel/dma/coherent.c @@ -367,10 +367,8 @@ static const struct reserved_mem_ops rmem_dma_ops = { .device_release = rmem_dma_device_release, }; -static int __init rmem_dma_setup(struct reserved_mem *rmem) +static int __init rmem_dma_setup(unsigned long node, struct reserved_mem *rmem) { - unsigned long node = rmem->fdt_node; - if (of_get_flat_dt_prop(node, "reusable", NULL)) return -EINVAL; diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c index c56004d314dc2..81a2fa4971ee3 100644 --- a/kernel/dma/contiguous.c +++ b/kernel/dma/contiguous.c @@ -475,9 +475,8 @@ static const struct reserved_mem_ops rmem_cma_ops = { .device_release = rmem_cma_device_release, }; -static int __init rmem_cma_setup(struct reserved_mem *rmem) +static int __init rmem_cma_setup(unsigned long node, struct reserved_mem *rmem) { - unsigned long node = rmem->fdt_node; bool default_cma = of_get_flat_dt_prop(node, "linux,cma-default", NULL); struct cma *cma; int err; diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c index d8e6f1d889d55..f3a12e15a9517 100644 --- a/kernel/dma/swiotlb.c +++ b/kernel/dma/swiotlb.c @@ -1860,10 +1860,9 @@ static const struct reserved_mem_ops rmem_swiotlb_ops = { .device_release = rmem_swiotlb_device_release, }; -static int __init rmem_swiotlb_setup(struct reserved_mem *rmem) +static int __init rmem_swiotlb_setup(unsigned long node, + struct reserved_mem *rmem) { - unsigned long node = rmem->fdt_node; - if (of_get_flat_dt_prop(node, "reusable", NULL) || of_get_flat_dt_prop(node, "linux,cma-default", NULL) || of_get_flat_dt_prop(node, "linux,dma-default", NULL) ||