[PATCH] mkimage: allow internalization of data-position

Simon Glass sjg at chromium.org
Mon Oct 2 03:17:21 CEST 2023


Hi Lars,

On Thu, 28 Sept 2023 at 03:45, Lars Feyaerts <lars at bitbiz.be> wrote:
>
> Make it possible for data that was externalized using a static external
> position (-p) to be internalized. Enables the ability to convert
> existing FIT images built with -p to be converted to a FIT image where the
> data is internal, to be converted to a FIT image where the data is
> external relative to the end of the FIT (-E) or change the initial
> static external position to a different static external position (-p).
>
> Removing the original external-data-related properties ensures that
> they're not present after conversion. Without this, they would still be
> present in the resulting FIT even if the FIT has been, for example,
> internalized.
>
> Have checkpatch.pl skip warnings for use of fdtdec_* functions in
> tooling; livetree isn't used there.
>
> Signed-off-by: Lars Feyaerts <lars at bitbiz.be>
> ---
>
>  scripts/checkpatch.pl |  4 ++--
>  tools/fit_image.c     | 26 +++++++++++++++++++++-----
>  2 files changed, 23 insertions(+), 7 deletions(-)
>
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 62b764f6c38..488d73a0ed7 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -2606,8 +2606,8 @@ sub u_boot_line {
>                      "Possible new uclass - make sure to add a sandbox driver, plus a test in test/dm/<name>.c\n" . $herecurr);
>         }
>
> -       # try to get people to use the livetree API
> -       if ($line =~ /^\+.*fdtdec_/) {
> +       # try to get people to use the livetree API, except when changing tooling
> +       if ($line =~ /^\+.*fdtdec_/ && $realfile !~ /^tools\//) {

Please put this in its own patch

>                 WARN("LIVETREE",
>                      "Use the livetree API (dev_read_...)\n" . $herecurr);
>         }
> diff --git a/tools/fit_image.c b/tools/fit_image.c
> index 9fe69ea0d9f..10f36e93422 100644
> --- a/tools/fit_image.c
> +++ b/tools/fit_image.c
> @@ -616,6 +616,8 @@ err:
>  static int fit_import_data(struct image_tool_params *params, const char *fname)
>  {
>         void *fdt, *old_fdt;
> +       void *data = NULL;
> +       const char *ext_data_prop = NULL;
>         int fit_size, new_size, size, data_base;
>         int fd;
>         struct stat sbuf;
> @@ -659,14 +661,28 @@ static int fit_import_data(struct image_tool_params *params, const char *fname)
>                 int buf_ptr;
>                 int len;
>
> -               buf_ptr = fdtdec_get_int(fdt, node, "data-offset", -1);
> -               len = fdtdec_get_int(fdt, node, "data-size", -1);
> -               if (buf_ptr == -1 || len == -1)
> +               /*
> +                * FIT_DATA_OFFSET_PROP and FIT_DATA_POSITION_PROP are never both present,
> +                *  but if they are, prefer FIT_DATA_OFFSET_PROP as it was there first
> +                */
> +               buf_ptr = fdtdec_get_int(fdt, node, FIT_DATA_POSITION_PROP, -1);
> +               if (buf_ptr != -1) {
> +                       ext_data_prop = FIT_DATA_POSITION_PROP;
> +                       data = old_fdt + buf_ptr;
> +               }
> +               buf_ptr = fdtdec_get_int(fdt, node, FIT_DATA_OFFSET_PROP, -1);
> +               if (buf_ptr != -1) {
> +                       ext_data_prop = FIT_DATA_OFFSET_PROP;
> +                       data = old_fdt + data_base + buf_ptr;
> +               }
> +               len = fdtdec_get_int(fdt, node, FIT_DATA_SIZE_PROP, -1);
> +               if (!data || len == -1)
>                         continue;
>                 debug("Importing data size %x\n", len);
>
> -               ret = fdt_setprop(fdt, node, "data",
> -                                 old_fdt + data_base + buf_ptr, len);
> +               ret = fdt_setprop(fdt, node, FIT_DATA_PROP, data, len);
> +               ret = fdt_delprop(fdt, node, ext_data_prop);
> +
>                 if (ret) {
>                         debug("%s: Failed to write property: %s\n", __func__,
>                               fdt_strerror(ret));
> --
> 2.34.1
>

This bit:

Reviewed-by: Simon Glass <sjg at chromium.org>

Can you add some docs about this, e.g. to mkimage.1 ?

Regards,
Simon


More information about the U-Boot mailing list