[U-Boot] [PATCH] cmd/fdt: add possibilty to have 'extrasize' on fdt resize
Simon Glass
sjg at chromium.org
Mon Sep 19 02:57:09 CEST 2016
Hi Hannes,
On 5 September 2016 at 02:00, Hannes Schmelzer
<hannes.schmelzer at 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.schmelzer at 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 <sjg at 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
More information about the U-Boot
mailing list