From: Michael Trimarchi <michael@amarulasolutions.com>
To: u-boot@lists.denx.de
Subject: [RFC PATCH 1/2] common: fdt: Add a function for reserving memory without kernel linear mapping
Date: Wed, 19 Feb 2020 19:43:41 +0100 [thread overview]
Message-ID: <20200219184342.15974-2-michael@amarulasolutions.com> (raw)
In-Reply-To: <20200219184342.15974-1-michael@amarulasolutions.com>
We need to reserve memory and not put in kernel linear mapping.
This avoid problem during memory remapping from the simple
frame buffer in linux kernel
Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
---
common/fdt_support.c | 40 ++++++++++++++++++++++++++++++++++++++++
include/fdt_support.h | 11 +++++++++++
2 files changed, 51 insertions(+)
diff --git a/common/fdt_support.c b/common/fdt_support.c
index 02cf5c6241..a3662f4358 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -410,6 +410,46 @@ static int fdt_pack_reg(const void *fdt, void *buf, u64 *address, u64 *size,
return p - (char *)buf;
}
+int fdt_fixup_reserved_memory(void *blob, const char *area, u64 start[], u64 size[])
+{
+ int offs, len;
+ const char *subpath;
+ const char *path = "/reserved-memory";
+ fdt32_t address_cells = cpu_to_fdt32(fdt_address_cells(blob, 0));
+ fdt32_t size_cells = cpu_to_fdt32(fdt_size_cells(blob, 0));
+ u8 temp[16]; /* Up to 64-bit address + 64-bit size */
+
+ offs = fdt_path_offset(blob, path);
+ if (offs < 0) {
+ debug("Node %s not found\n", path);
+ path = "/";
+ subpath = "reserved-memory";
+ offs = fdt_path_offset(blob, path);
+ offs = fdt_add_subnode(blob, offs, subpath);
+ if (offs < 0) {
+ printf("Could not create %s%s node.\n", path, subpath);
+ return -1;
+ }
+ path = "/reserved-memory";
+ offs = fdt_path_offset(blob, path);
+
+ fdt_setprop(blob, offs, "#address-cells", &address_cells, sizeof(address_cells));
+ fdt_setprop(blob, offs, "#size-cells", &size_cells, sizeof(size_cells));
+ fdt_setprop(blob, offs, "ranges", NULL, 0);
+ }
+
+ offs = fdt_add_subnode(blob, offs, area ? : "private");
+ if (offs < 0) {
+ printf("Could not create %s%s node.\n", path, subpath);
+ return -1;
+ }
+
+ fdt_setprop(blob, offs, "no-map", NULL, 0);
+ len = fdt_pack_reg(blob, temp, start, size, 1);
+ fdt_setprop(blob, offs, "reg", temp, len);
+ return 0;
+}
+
#if CONFIG_NR_DRAM_BANKS > 4
#define MEMORY_BANKS_MAX CONFIG_NR_DRAM_BANKS
#else
diff --git a/include/fdt_support.h b/include/fdt_support.h
index ba14acd7f6..7c8a280f53 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -93,6 +93,17 @@ void do_fixup_by_compat_u32(void *fdt, const char *compat,
*/
int fdt_fixup_memory(void *blob, u64 start, u64 size);
+/**
+ * Setup the memory reserved node in the DT. Creates one if none was existing before.
+ *
+ * @param blob FDT blob to update
+ * @param area Reserved area name
+ * @param start Begin of DRAM mapping in physical memory
+ * @param size Size of the single memory bank
+ * @return 0 if ok, or -1 or -FDT_ERR_... on error
+ */
+int fdt_fixup_reserved_memory(void *blob, const char *area, u64 start[], u64 size[]);
+
/**
* Fill the DT memory node with multiple memory banks.
* Creates the node if none was existing before.
--
2.17.1
next prev parent reply other threads:[~2020-02-19 18:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-19 18:43 [RFC PATCH 0/2] Update reserved memory for simple framebuffer Michael Trimarchi
2020-02-19 18:43 ` Michael Trimarchi [this message]
2020-02-20 3:05 ` [RFC PATCH 1/2] common: fdt: Add a function for reserving memory without kernel linear mapping Simon Glass
2020-02-19 18:43 ` [RFC PATCH 2/2] video: meson: Use reserving memory function " Michael Trimarchi
2020-02-20 3:05 ` Simon Glass
2020-02-20 6:07 ` Michael Nazzareno Trimarchi
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=20200219184342.15974-2-michael@amarulasolutions.com \
--to=michael@amarulasolutions.com \
--cc=u-boot@lists.denx.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