The way we use IORESOURCE_BUSY in barebox is different than in Linux and was only done to have a bit that doesn't sound too off-topic.
Now that we have proper memory type and attributes, let's make use of them and retire IORESOURCE_BUSY. Signed-off-by: Ahmad Fatoum <a.fat...@barebox.org> --- commands/iomemport.c | 2 +- common/memory.c | 22 ++++++---------------- common/oftree.c | 2 +- drivers/tee/optee/of_fixup.c | 2 +- include/memory.h | 6 +++--- 5 files changed, 12 insertions(+), 22 deletions(-) diff --git a/commands/iomemport.c b/commands/iomemport.c index f2baa0e29397..bbe41f571b48 100644 --- a/commands/iomemport.c +++ b/commands/iomemport.c @@ -18,7 +18,7 @@ static void __print_resources(struct resource *res, int indent) printf("%pa - %pa (size %pa) %s%s\n", &res->start, &res->end, &size, - res->flags & IORESOURCE_BUSY ? "[R] " : "", + is_reserved_resource(res) ? "[R] " : "", res->name); list_for_each_entry(r, &res->children, sibling) { diff --git a/common/memory.c b/common/memory.c index 684907e8e933..8c9f29ca71b2 100644 --- a/common/memory.c +++ b/common/memory.c @@ -251,25 +251,18 @@ postmem_initcall(add_mem_devices); /* * Request a region from the registered sdram */ -struct resource *__request_sdram_region(const char *name, unsigned flags, - resource_size_t start, resource_size_t size, - enum resource_memtype memtype, unsigned memattrs) +struct resource *__request_sdram_region(const char *name, + resource_size_t start, resource_size_t size) { struct memory_bank *bank; - flags |= IORESOURCE_MEM; - for_each_memory_bank(bank) { struct resource *res; res = __request_region(bank->res, start, start + size - 1, - name, flags); - if (!IS_ERR(res)) { - res->type = memtype; - res->attrs = memattrs; - res->flags |= IORESOURCE_TYPE_VALID; + name, IORESOURCE_MEM); + if (!IS_ERR(res)) return res; - } } return NULL; @@ -291,14 +284,11 @@ struct resource *reserve_sdram_region(const char *name, resource_size_t start, size = ALIGN(size, PAGE_SIZE); } - res = __request_sdram_region(name, IORESOURCE_BUSY, start, size); + res = request_sdram_region(name, start, size, + MEMTYPE_RESERVED, MEMATTRS_RW_DEVICE); if (!res) return NULL; - res->type = MEMTYPE_RESERVED; - res->attrs = MEMATTRS_RW_DEVICE; - res->flags |= IORESOURCE_TYPE_VALID; - remap_range((void *)start, size, MAP_UNCACHED); return res; diff --git a/common/oftree.c b/common/oftree.c index b9a854c786f6..a7479164e288 100644 --- a/common/oftree.c +++ b/common/oftree.c @@ -304,7 +304,7 @@ int of_fixup_reserved_memory(struct device_node *root, void *_res) child = of_get_child_by_name(node, res->name) ?: of_new_node(node, res->name); - if (res->flags & IORESOURCE_BUSY) + if (is_reserved_resource(res)) of_property_write_bool(child, "no-map", true); of_write_number(reg, res->start, addr_n_cells); diff --git a/drivers/tee/optee/of_fixup.c b/drivers/tee/optee/of_fixup.c index 223f67e872aa..f3ccff31e68a 100644 --- a/drivers/tee/optee/of_fixup.c +++ b/drivers/tee/optee/of_fixup.c @@ -37,7 +37,7 @@ int of_optee_fixup(struct device_node *root, void *_data) res_core.start = arm_mem_endmem_get() - OPTEE_SIZE; res_core.end = arm_mem_endmem_get() - fixup_data->shm_size - 1; } - res_core.flags = IORESOURCE_MEM | IORESOURCE_BUSY; + res_core.flags = IORESOURCE_MEM; reserve_resource(&res_core); res_core.name = "optee_core"; diff --git a/include/memory.h b/include/memory.h index b7736b1a4c0e..0d175807bf88 100644 --- a/include/memory.h +++ b/include/memory.h @@ -30,9 +30,9 @@ int barebox_add_memory_bank(const char *name, resource_size_t start, #define for_each_memory_bank(mem) list_for_each_entry(mem, &memory_banks, list) #define for_each_reserved_region(mem, rsv) \ list_for_each_entry(rsv, &(mem)->res->children, sibling) \ - if (((rsv)->flags & IORESOURCE_BUSY)) + if (is_reserved_resource(rsv)) -struct resource *__request_sdram_region(const char *name, unsigned flags, +struct resource *__request_sdram_region(const char *name, resource_size_t start, resource_size_t size); static inline struct resource *request_sdram_region(const char *name, @@ -44,7 +44,7 @@ static inline struct resource *request_sdram_region(const char *name, struct resource *res; /* IORESOURCE_MEM is implicit for all SDRAM regions */ - res = __request_sdram_region(name, 0, start, size); + res = __request_sdram_region(name, start, size); if (IS_ENABLED(CONFIG_MEMORY_ATTRIBUTES) && !IS_ERR(res)) { res->type = memtype; res->attrs = memattrs; -- 2.39.5