* [RFC PATCH 0/2] Update reserved memory for simple framebuffer
@ 2020-02-19 18:43 Michael Trimarchi
2020-02-19 18:43 ` [RFC PATCH 1/2] common: fdt: Add a function for reserving memory without kernel linear mapping Michael Trimarchi
2020-02-19 18:43 ` [RFC PATCH 2/2] video: meson: Use reserving memory function " Michael Trimarchi
0 siblings, 2 replies; 6+ messages in thread
From: Michael Trimarchi @ 2020-02-19 18:43 UTC (permalink / raw)
To: u-boot
Reserved memory for simple frame buffer should be created in a different
way:
+ aliases {
+ display0 = &lcdif;
+ };
+
+ reserved-memory {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ display_reserved: framebuffer at 86fa2000 {
+ reg = <0x86fa2000 0x80000>;
+ no-map;
+ };
+
+ };
We add a function to change the loaded dts and inject those information.
I have added another patch for meson. Right now I'm testing on tinker-s
board
Michael Trimarchi (2):
common: fdt: Add a function for reserving memory without kernel linear
mapping
video: meson: Use reserving memory function without kernel linear
mapping
common/fdt_support.c | 40 +++++++++++++++++++++++++++++++++
drivers/video/meson/meson_vpu.c | 6 ++---
include/fdt_support.h | 11 +++++++++
3 files changed, 54 insertions(+), 3 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [RFC PATCH 1/2] common: fdt: Add a function for reserving memory without kernel linear mapping
2020-02-19 18:43 [RFC PATCH 0/2] Update reserved memory for simple framebuffer Michael Trimarchi
@ 2020-02-19 18:43 ` Michael Trimarchi
2020-02-20 3:05 ` Simon Glass
2020-02-19 18:43 ` [RFC PATCH 2/2] video: meson: Use reserving memory function " Michael Trimarchi
1 sibling, 1 reply; 6+ messages in thread
From: Michael Trimarchi @ 2020-02-19 18:43 UTC (permalink / raw)
To: u-boot
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
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [RFC PATCH 2/2] video: meson: Use reserving memory function without kernel linear mapping
2020-02-19 18:43 [RFC PATCH 0/2] Update reserved memory for simple framebuffer Michael Trimarchi
2020-02-19 18:43 ` [RFC PATCH 1/2] common: fdt: Add a function for reserving memory without kernel linear mapping Michael Trimarchi
@ 2020-02-19 18:43 ` Michael Trimarchi
2020-02-20 3:05 ` Simon Glass
1 sibling, 1 reply; 6+ messages in thread
From: Michael Trimarchi @ 2020-02-19 18:43 UTC (permalink / raw)
To: u-boot
Memory reserved for the simple framebuffer should not be used
and part of memory linear mapping
Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
---
drivers/video/meson/meson_vpu.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/video/meson/meson_vpu.c b/drivers/video/meson/meson_vpu.c
index 4eb66398d0..134e011b82 100644
--- a/drivers/video/meson/meson_vpu.c
+++ b/drivers/video/meson/meson_vpu.c
@@ -173,9 +173,9 @@ static void meson_vpu_setup_simplefb(void *fdt)
* at the end of the RAM and we strip this portion from the kernel
* allowed region
*/
- mem_start = gd->bd->bi_dram[0].start;
- mem_size = gd->bd->bi_dram[0].size - meson_fb.fb_size;
- ret = fdt_fixup_memory_banks(fdt, &mem_start, &mem_size, 1);
+ mem_start = meson_fb.base;
+ mem_size = meson_fb.fb_size;
+ ret = fdt_fixup_reserved_memory(blob, "display_reserved", &mem_start, &mem_size);
if (ret) {
eprintf("Cannot setup simplefb: Error reserving memory\n");
return;
--
2.17.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [RFC PATCH 1/2] common: fdt: Add a function for reserving memory without kernel linear mapping
2020-02-19 18:43 ` [RFC PATCH 1/2] common: fdt: Add a function for reserving memory without kernel linear mapping Michael Trimarchi
@ 2020-02-20 3:05 ` Simon Glass
0 siblings, 0 replies; 6+ messages in thread
From: Simon Glass @ 2020-02-20 3:05 UTC (permalink / raw)
To: u-boot
Hi Michael,
On Wed, 19 Feb 2020 at 11:43, Michael Trimarchi
<michael@amarulasolutions.com> wrote:
>
> 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(+)
Reviewed-by: Simon Glass <sjg@chromium.org>
nits below
>
> 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);
This is always 0 by definition.
> + offs = fdt_add_subnode(blob, offs, subpath);
> + if (offs < 0) {
> + printf("Could not create %s%s node.\n", path, subpath);
> + return -1;
This is -EPERM. I think it would be better to return ofs.
> + }
> + 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;
and here
> + }
> +
> + fdt_setprop(blob, offs, "no-map", NULL, 0);
> + len = fdt_pack_reg(blob, temp, start, size, 1);
> + fdt_setprop(blob, offs, "reg", temp, len);
blank line before return
> + 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
check this
> + */
> +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
>
Regards,
Simon
^ permalink raw reply [flat|nested] 6+ messages in thread
* [RFC PATCH 2/2] video: meson: Use reserving memory function without kernel linear mapping
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
0 siblings, 1 reply; 6+ messages in thread
From: Simon Glass @ 2020-02-20 3:05 UTC (permalink / raw)
To: u-boot
Hi Michael,
On Wed, 19 Feb 2020 at 11:43, Michael Trimarchi
<michael@amarulasolutions.com> wrote:
>
> Memory reserved for the simple framebuffer should not be used
> and part of memory linear mapping
>
> Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> ---
> drivers/video/meson/meson_vpu.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
Is there a binding file for this? Please add it to a patch.
>
> diff --git a/drivers/video/meson/meson_vpu.c b/drivers/video/meson/meson_vpu.c
> index 4eb66398d0..134e011b82 100644
> --- a/drivers/video/meson/meson_vpu.c
> +++ b/drivers/video/meson/meson_vpu.c
> @@ -173,9 +173,9 @@ static void meson_vpu_setup_simplefb(void *fdt)
> * at the end of the RAM and we strip this portion from the kernel
> * allowed region
> */
> - mem_start = gd->bd->bi_dram[0].start;
> - mem_size = gd->bd->bi_dram[0].size - meson_fb.fb_size;
> - ret = fdt_fixup_memory_banks(fdt, &mem_start, &mem_size, 1);
> + mem_start = meson_fb.base;
> + mem_size = meson_fb.fb_size;
> + ret = fdt_fixup_reserved_memory(blob, "display_reserved", &mem_start, &mem_size);
Odd that this uses underscore...normally bindings use hyphen.
> if (ret) {
> eprintf("Cannot setup simplefb: Error reserving memory\n");
> return;
> --
> 2.17.1
>
Regards,
Simon
^ permalink raw reply [flat|nested] 6+ messages in thread
* [RFC PATCH 2/2] video: meson: Use reserving memory function without kernel linear mapping
2020-02-20 3:05 ` Simon Glass
@ 2020-02-20 6:07 ` Michael Nazzareno Trimarchi
0 siblings, 0 replies; 6+ messages in thread
From: Michael Nazzareno Trimarchi @ 2020-02-20 6:07 UTC (permalink / raw)
To: u-boot
Hi
On Thu, Feb 20, 2020 at 4:05 AM Simon Glass <sjg@chromium.org> wrote:
>
> Hi Michael,
>
> On Wed, 19 Feb 2020 at 11:43, Michael Trimarchi
> <michael@amarulasolutions.com> wrote:
> >
> > Memory reserved for the simple framebuffer should not be used
> > and part of memory linear mapping
> >
> > Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> > ---
> > drivers/video/meson/meson_vpu.c | 6 +++---
> > 1 file changed, 3 insertions(+), 3 deletions(-)
>
> Is there a binding file for this? Please add it to a patch.
>
This is an example how to use it. I need to repost it. There is a
compilation issue
later. I need only to have some feedback from Neil because I can not
test this board
> >
> > diff --git a/drivers/video/meson/meson_vpu.c b/drivers/video/meson/meson_vpu.c
> > index 4eb66398d0..134e011b82 100644
> > --- a/drivers/video/meson/meson_vpu.c
> > +++ b/drivers/video/meson/meson_vpu.c
> > @@ -173,9 +173,9 @@ static void meson_vpu_setup_simplefb(void *fdt)
> > * at the end of the RAM and we strip this portion from the kernel
> > * allowed region
> > */
> > - mem_start = gd->bd->bi_dram[0].start;
> > - mem_size = gd->bd->bi_dram[0].size - meson_fb.fb_size;
> > - ret = fdt_fixup_memory_banks(fdt, &mem_start, &mem_size, 1);
> > + mem_start = meson_fb.base;
> > + mem_size = meson_fb.fb_size;
> > + ret = fdt_fixup_reserved_memory(blob, "display_reserved", &mem_start, &mem_size);
>
> Odd that this uses underscore...normally bindings use hyphen.
>
Will fix. There are few things that I need to change here because
sunxi, meson use simpleframe buffer
but they have some code duplication
Micheal
> > if (ret) {
> > eprintf("Cannot setup simplefb: Error reserving memory\n");
> > return;
> > --
> > 2.17.1
> >
>
> Regards,
> Simon
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-02-20 6:07 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-19 18:43 [RFC PATCH 0/2] Update reserved memory for simple framebuffer Michael Trimarchi
2020-02-19 18:43 ` [RFC PATCH 1/2] common: fdt: Add a function for reserving memory without kernel linear mapping Michael Trimarchi
2020-02-20 3:05 ` 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
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.