summaryrefslogtreecommitdiff
path: root/include/memory.h
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2022-08-17 13:42:37 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2022-08-18 14:39:06 +0200
commitaae80db4b58717e42ae8a0c4ad74ed78a31116a8 (patch)
tree41b6fa21a95d099e30ecee4f6a2159eed1ceba1a /include/memory.h
parent66392df8195c669f4f3d969bd8cf90b4e996cf12 (diff)
downloadbarebox-aae80db4b58717e42ae8a0c4ad74ed78a31116a8.tar.gz
memory: define reserve_sdram_region helper
We use request_sdram_regions both for code that barebox wants to use for itself (e.g. barebox stack or initrd) and to reserve regions for secure firmware that barebox shouldn't overwrite. We need to differentiate between them, so we can apply different caching flags depending on region, so add a new reserve_sdram_region helper that may be used and also add an for_each_reserved_region iterator for use in the MMU code that applied the different caching flags later on. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Link: https://lore.barebox.org/20220817114244.1810531-4-a.fatoum@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'include/memory.h')
-rw-r--r--include/memory.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/memory.h b/include/memory.h
index 31da5d74d5..ffd66db02b 100644
--- a/include/memory.h
+++ b/include/memory.h
@@ -4,6 +4,7 @@
#include <linux/types.h>
#include <linux/list.h>
+#include <linux/ioport.h>
void mem_malloc_init(void *start, void *end);
ulong mem_malloc_start(void);
@@ -22,6 +23,9 @@ int barebox_add_memory_bank(const char *name, resource_size_t start,
resource_size_t size);
#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))
struct resource *__request_sdram_region(const char *name, unsigned flags,
resource_size_t start, resource_size_t size);
@@ -34,6 +38,14 @@ static inline struct resource *request_sdram_region(const char *name,
return __request_sdram_region(name, 0, start, size);
}
+/* use for secure firmware to inhibit speculation */
+static inline struct resource *reserve_sdram_region(const char *name,
+ resource_size_t start,
+ resource_size_t size)
+{
+ return __request_sdram_region(name, IORESOURCE_BUSY, start, size);
+}
+
int release_sdram_region(struct resource *res);
void memory_bank_find_space(struct memory_bank *bank, resource_size_t *retstart,