Hi Hannes, On 5 September 2016 at 02:00, Hannes Schmelzer <hannes.schmel...@br-automation.com> wrote: > Sometimes devicetree nodes and or properties are added out of the u-boot > console, maybe through some script or manual interaction. > > The devicetree as loaded or embedded is quite small, so the devicetree > has to be resized to take up those new nodes/properties. > > In original the devicetree was only extended by effective > 4 * add_mem_rsv. > > With this commit we can add an argument to the "fdt resize" command, > which takes the extrasize to be added. > > Signed-off-by: Hannes Schmelzer <hannes.schmel...@br-automation.com> > > --- > > board/compulab/cm_fx6/cm_fx6.c | 2 +- > cmd/fdt.c | 9 +++++++-- > common/fdt_support.c | 3 ++- > common/image-fdt.c | 2 +- > include/fdt_support.h | 2 +- > 5 files changed, 12 insertions(+), 6 deletions(-)
Reviewed-by: Simon Glass <s...@chromium.org> > > diff --git a/board/compulab/cm_fx6/cm_fx6.c b/board/compulab/cm_fx6/cm_fx6.c > index 566c19b..fbd6226 100644 > --- a/board/compulab/cm_fx6/cm_fx6.c > +++ b/board/compulab/cm_fx6/cm_fx6.c > @@ -602,7 +602,7 @@ int ft_board_setup(void *blob, bd_t *bd) > char baseboard_name[16]; > int err; > > - fdt_shrink_to_minimum(blob); /* Make room for new properties */ > + fdt_shrink_to_minimum(blob, 0); /* Make room for new properties */ > > /* MAC addr */ > if (eth_getenv_enetaddr("ethaddr", enetaddr)) { > diff --git a/cmd/fdt.c b/cmd/fdt.c > index 58af772..b503357 100644 > --- a/cmd/fdt.c > +++ b/cmd/fdt.c > @@ -662,7 +662,12 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, > char * const argv[]) > #endif > /* resize the fdt */ > else if (strncmp(argv[1], "re", 2) == 0) { > - fdt_shrink_to_minimum(working_fdt); > + uint extrasize; > + if (argc > 2) > + extrasize = simple_strtoul(argv[2], NULL, 16); > + else > + extrasize = 0; > + fdt_shrink_to_minimum(working_fdt, extrasize); > } > else { > /* Unrecognized command */ > @@ -1056,7 +1061,7 @@ static char fdt_help_text[] = > "fdt systemsetup - Do system-specific set up\n" > #endif > "fdt move <fdt> <newaddr> <length> - Copy the fdt to <addr> and > make it active\n" > - "fdt resize - Resize fdt to size + padding > to 4k addr\n" > + "fdt resize [<extrasize>] - Resize fdt to size + padding > to 4k addr + some optional <extrasize> if needed\n" > "fdt print <path> [<prop>] - Recursive print starting at > <path>\n" > "fdt list <path> [<prop>] - Print one level starting at > <path>\n" > "fdt get value <var> <path> <prop> - Get <property> and store in > <var>\n" > diff --git a/common/fdt_support.c b/common/fdt_support.c > index 2020586..0609470 100644 > --- a/common/fdt_support.c > +++ b/common/fdt_support.c > @@ -523,7 +523,7 @@ void fdt_fixup_ethernet(void *fdt) > } > > /* Resize the fdt to its actual size + a bit of padding */ > -int fdt_shrink_to_minimum(void *blob) > +int fdt_shrink_to_minimum(void *blob, uint extrasize) > { > int i; > uint64_t addr, size; > @@ -551,6 +551,7 @@ int fdt_shrink_to_minimum(void *blob) > actualsize = fdt_off_dt_strings(blob) + > fdt_size_dt_strings(blob) + 5 * sizeof(struct > fdt_reserve_entry); > > + actualsize += extrasize; > /* Make it so the fdt ends on a page boundary */ > actualsize = ALIGN(actualsize + ((uintptr_t)blob & 0xfff), 0x1000); > actualsize = actualsize - ((uintptr_t)blob & 0xfff); > diff --git a/common/image-fdt.c b/common/image-fdt.c > index d6ee225..2ef1253 100644 > --- a/common/image-fdt.c > +++ b/common/image-fdt.c > @@ -503,7 +503,7 @@ int image_setup_libfdt(bootm_headers_t *images, void > *blob, > lmb_free(lmb, (phys_addr_t)(u32)(uintptr_t)blob, > (phys_size_t)fdt_totalsize(blob)); > > - ret = fdt_shrink_to_minimum(blob); > + ret = fdt_shrink_to_minimum(blob, 0); > if (ret < 0) > goto err; > of_size = ret; > diff --git a/include/fdt_support.h b/include/fdt_support.h > index e9f3497..2957fbc 100644 > --- a/include/fdt_support.h > +++ b/include/fdt_support.h > @@ -167,7 +167,7 @@ void ft_pci_setup(void *blob, bd_t *bd); > int ft_system_setup(void *blob, bd_t *bd); > > void set_working_fdt_addr(ulong addr); > -int fdt_shrink_to_minimum(void *blob); > +int fdt_shrink_to_minimum(void *blob, uint extrasize); Can you please add a function comment for this? > int fdt_increase_size(void *fdt, int add_len); > > int fdt_fixup_nor_flash_size(void *blob); > -- > 1.9.1 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot