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 <m.szyprowski@samsung.com>
Link: https://patch.msgid.link/20260325090023.3175348-2-m.szyprowski@samsung.com
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
This commit is contained in:
Marek Szyprowski
2026-03-25 10:00:17 +01:00
committed by Rob Herring (Arm)
parent 6de23f81a5
commit abdd23c884
6 changed files with 19 additions and 25 deletions

View File

@@ -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);

View File

@@ -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)

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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) ||