From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: rcz@pengutronix.de, Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH 05/10] of: reserved-mem: reserve regions prior to mmu_initcall()
Date: Mon, 15 Aug 2022 17:32:04 +0200 [thread overview]
Message-ID: <20220815153209.2422662-6-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20220815153209.2422662-1-a.fatoum@pengutronix.de>
Now that we both have a way to mark SDRAM regions requested as reserved
and an postmem_initcall() to do this add, change device tree memory
reservation parsing code to use them instead of requesting them as
normal memory at coredevice_initcall() level. This allows us to
reuse this information for MMU setup in the follow-up commit.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
common/memory.c | 15 +++------------
drivers/of/reserved-mem.c | 34 +++++++++++++++++++++++-----------
include/of.h | 7 -------
3 files changed, 26 insertions(+), 30 deletions(-)
diff --git a/common/memory.c b/common/memory.c
index 40c795d2cde1..7e24ecb2bd03 100644
--- a/common/memory.c
+++ b/common/memory.c
@@ -56,17 +56,6 @@ void mem_malloc_init(void *start, void *end)
mem_malloc_initialized = 1;
}
-static int request_reservation(const struct resource *res)
-{
- if (!(res->flags & IORESOURCE_EXCLUSIVE))
- return 0;
-
- pr_debug("region %s %pa-%pa\n", res->name, &res->start, &res->end);
-
- request_sdram_region(res->name, res->start, resource_size(res));
- return 0;
-}
-
static int mem_malloc_resource(void)
{
#if !defined __SANDBOX__
@@ -96,7 +85,7 @@ static int mem_malloc_resource(void)
request_sdram_region("stack", STACK_BASE, STACK_SIZE);
#endif
- return of_reserved_mem_walk(request_reservation);
+ return 0;
}
coredevice_initcall(mem_malloc_resource);
@@ -173,6 +162,8 @@ int barebox_add_memory_bank(const char *name, resource_size_t start,
if (IS_ERR(res))
return PTR_ERR(res);
+ res->flags = IORESOURCE_MEM;
+
bank = xzalloc(sizeof(*bank));
bank->res = res;
diff --git a/drivers/of/reserved-mem.c b/drivers/of/reserved-mem.c
index 34e61dfea343..f50a0bd8374d 100644
--- a/drivers/of/reserved-mem.c
+++ b/drivers/of/reserved-mem.c
@@ -4,16 +4,31 @@
#include <stdio.h>
#include <of.h>
#include <of_address.h>
+#include <memory.h>
+#include <linux/ioport.h>
#define MEMRESERVE_NCELLS 2
-#define MEMRESERVE_FLAGS (IORESOURCE_MEM | IORESOURCE_EXCLUSIVE)
-int of_reserved_mem_walk(int (*handler)(const struct resource *res))
+static void request_region(struct resource *r)
+{
+ struct memory_bank *bank;
+
+ for_each_memory_bank(bank) {
+ if (!resource_contains(bank->res, r))
+ continue;
+
+ if (!reserve_sdram_region(r->name, r->start, resource_size(r)))
+ pr_warn("couldn't request reserved sdram region %pa-%pa\n",
+ &r->start, &r->end);
+ break;
+ }
+}
+
+static int of_reserved_mem_walk(void)
{
struct device_node *node, *child;
int ncells = 0;
const __be32 *reg;
- int ret;
node = of_find_node_by_path("/reserved-memory");
if (node) {
@@ -27,11 +42,9 @@ int of_reserved_mem_walk(int (*handler)(const struct resource *res))
of_address_to_resource(child, 0, &resource);
resource.name = child->name;
- resource.flags = MEMRESERVE_FLAGS;
+ resource.flags = IORESOURCE_MEM;
- ret = handler(&resource);
- if (ret)
- return ret;
+ request_region(&resource);
}
}
@@ -48,7 +61,7 @@ int of_reserved_mem_walk(int (*handler)(const struct resource *res))
snprintf(name, sizeof(name), "fdt-memreserve-%u", n++);
resource.name = name;
- resource.flags = MEMRESERVE_FLAGS;
+ resource.flags = IORESOURCE_MEM;
resource.start = of_read_number(reg + i, MEMRESERVE_NCELLS);
i += MEMRESERVE_NCELLS;
@@ -61,11 +74,10 @@ int of_reserved_mem_walk(int (*handler)(const struct resource *res))
resource.end = resource.start + size - 1;
- ret = handler(&resource);
- if (ret)
- return ret;
+ request_region(&resource);
}
}
return 0;
}
+postmem_initcall(of_reserved_mem_walk);
diff --git a/include/of.h b/include/of.h
index 223c634bc88a..91c3766992aa 100644
--- a/include/of.h
+++ b/include/of.h
@@ -325,8 +325,6 @@ int of_autoenable_device_by_path(char *path);
int of_autoenable_i2c_by_component(char *path);
int of_prepend_machine_compatible(struct device_node *root, const char *compat);
-int of_reserved_mem_walk(int (*handler)(const struct resource *res));
-
#else
static inline struct of_reserve_map *of_get_reserve_map(void)
{
@@ -868,11 +866,6 @@ static inline int of_prepend_machine_compatible(struct device_node *root,
return -ENODEV;
}
-static inline int of_reserved_mem_walk(int (*handler)(const struct resource *res))
-{
- return 0;
-}
-
#endif
#define for_each_property_of_node(dn, pp) \
--
2.30.2
next prev parent reply other threads:[~2022-08-15 15:40 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-15 15:31 [PATCH 00/10] ARM: mmu: inhibit speculation into secure memory Ahmad Fatoum
2022-08-15 15:32 ` [PATCH 01/10] resource: add flags parameter to __request_region Ahmad Fatoum
2022-08-15 15:32 ` [PATCH 02/10] common: allow requesting SDRAM regions with custom flags Ahmad Fatoum
2022-08-16 7:35 ` Ulrich Ölmann
2022-08-15 15:32 ` [PATCH 03/10] memory: define reserve_sdram_region helper Ahmad Fatoum
2022-08-16 8:46 ` Sascha Hauer
2022-08-15 15:32 ` [PATCH 04/10] init: define new postmem_initcall() Ahmad Fatoum
2022-08-15 15:32 ` Ahmad Fatoum [this message]
2022-08-15 15:32 ` [PATCH 06/10] ARM: mmu64: map reserved regions uncached Ahmad Fatoum
2022-08-15 15:32 ` [PATCH 07/10] ARM: mmu: define attrs_uncached_mem() helper Ahmad Fatoum
2022-08-15 15:32 ` [PATCH 08/10] ARM: mmu: use reserve mem entries to modify maps Ahmad Fatoum
2022-08-15 15:32 ` [PATCH 09/10] ARM: early-mmu: don't cache/prefetch OPTEE_SIZE bytes from end of memory Ahmad Fatoum
2022-08-15 15:32 ` [PATCH 10/10] commands: iomem: point out [R]eserved regions Ahmad Fatoum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220815153209.2422662-6-a.fatoum@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=rcz@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox