* [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 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 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 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.