fit: Load DTO into temporary buffer and ignore load address
authorMarek Vasut <marex@denx.de>
Fri, 11 Jun 2021 02:09:56 +0000 (04:09 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 15 Jul 2021 23:06:37 +0000 (19:06 -0400)
commit4c531d9f58b19442780f9b209ab4ec23addd044a
tree2cbd78713617afebeabe75ebd246e34b24fc3d46
parent23b542aa3f9c663c98e1baa2732cce99c333f030
fit: Load DTO into temporary buffer and ignore load address

The current fitImage DTO implementation expects each fitImage image
subnode containing DTO to have 'load' property, pointing somewhere
into memory where the DTO will be loaded. The address in the 'load'
property must be different then the base DT load address and there
must be sufficient amount of space between those two addresses.
Selecting and using such hard-coded addresses is fragile, error
prone and difficult to port even across devices with the same SoC
and different DRAM sizes.

The DTO cannot be applied in-place because fdt_overlay_apply_verbose()
modifies the DTO when applying it onto the base DT, so if the DTO was
used in place within the fitImage, call to fdt_overlay_apply_verbose()
would corrupt the fitImage.

Instead of copying the DTO to a specific hard-coded load address,
allocate a buffer, copy the DTO into that buffer, apply the DTO onto
the base DT, and free the buffer.

The upside of this approach is that it is no longer necessary to
select and hard-code specific DTO load address into the DTO. The
slight downside is the new malloc()/free() overhead for each DTO,
but that is negligible (*).

(*) on iMX8MM/MN and STM32MP1

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Cc: Simon Glass <sjg@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
[trini: Add <linux/sizes.h>]
Signed-off-by: Tom Rini <trini@konsulko.com>
common/image-fit.c