diff options
author | Ahmad Fatoum <a.fatoum@pengutronix.de> | 2022-08-09 11:19:46 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2022-08-11 08:26:12 +0200 |
commit | 2ab6780b80e35796cbfd95bc8bbc0993f1df0bcd (patch) | |
tree | 5a86108bbb8d8f3d80a07c1f9bd51f7a9175004c /drivers/of | |
parent | f64e6124b4666f347524841d2bb2036d5897c299 (diff) | |
download | barebox-2ab6780b80e35796cbfd95bc8bbc0993f1df0bcd.tar.gz |
FIT: add first support for compressed images
FIT image contents are often compressed, but we got by so far, because
a compressed initramfs is usually meant to be decompressed by the kernel
(and so has compression = "none") and arm32 kernels had their own
decompresser embedded. On ARM64, bootloader is responsible for
uncompressing kernel, so we should properly process the compression
property we so far ignored.
The decompression isn't as efficient as one would hope for, because
the FIT format only describes length of the compressed data. We thus
have two options:
- define an output size up-front, e.g. by guessing the uncompressed
buffer size for decompression or hardcoding it (e.g. U-Boot's
CONFIG_SYS_BOOTM_LEN).
- Uncompress to a file descriptor
We choose the second one to play it safe, but it comes with worse
performance because of extra memory copies. Intention is to go with
first option for the kernel image: We know how much size we can spare
for the kernel image and can have bootm_load_os uncompress there
directly without intermittent memory copies. This would involve slight
change to the barebox decompresser API to align it with the kernel's,
which allows to have it accept and observe an output buffer size.
So far, we had the kernel PREBOOT API, which lacks such a parameter,
but that's an optimization for another day.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.barebox.org/20220809091946.3906847-1-a.fatoum@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/base.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c index 2247b5a1a3..37c94d00bf 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -2221,8 +2221,8 @@ struct device_node *of_new_node(struct device_node *parent, const char *name) return node; } -static struct property *__of_new_property(struct device_node *node, const char *name, - void *data, int len) +struct property *__of_new_property(struct device_node *node, const char *name, + void *data, int len) { struct property *prop; |