[U-Boot] [PATCH] spl: fit: Enable GZIP compression also for no kernel partitions

Simon Goldschmidt sgoldschmidt at de.pepperl-fuchs.com
Mon Jul 30 11:28:17 UTC 2018



On 30.07.2018 10:54, Michal Simek wrote:
> On 26.7.2018 19:16, Tom Rini wrote:
>> On Thu, Jul 26, 2018 at 04:23:14PM +0000, York Sun wrote:
>>> On 07/25/2018 11:52 PM, Michal Simek wrote:
>>>> On 25.7.2018 23:18, York Sun wrote:
>>>>> On 07/24/2018 10:58 PM, Michal Simek wrote:
>>>>>> On 24.7.2018 18:26, York Sun wrote:
>>>>>>> On 07/24/2018 06:07 AM, Michal Simek wrote:
>>>>>>>> There is no reason to limit gzip usage only for OS_BOOT and kernel image
>>>>>>>> type.
>>>>>>>>
>>>>>>>> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
>>>>>>>> ---
>>>>>>>>
>>>>>>>>   common/spl/spl_fit.c | 5 +----
>>>>>>>>   1 file changed, 1 insertion(+), 4 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
>>>>>>>> index 9eabb1c1058b..dbf5ac33a845 100644
>>>>>>>> --- a/common/spl/spl_fit.c
>>>>>>>> +++ b/common/spl/spl_fit.c
>>>>>>>> @@ -257,10 +257,7 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
>>>>>>>>   	board_fit_image_post_process(&src, &length);
>>>>>>>>   #endif
>>>>>>>>   
>>>>>>>> -	if (IS_ENABLED(CONFIG_SPL_OS_BOOT)	&&
>>>>>>>> -	    IS_ENABLED(CONFIG_SPL_GZIP)		&&
>>>>>>>> -	    image_comp == IH_COMP_GZIP		&&
>>>>>>>> -	    type == IH_TYPE_KERNEL) {
>>>>>>>> +	if (IS_ENABLED(CONFIG_SPL_GZIP) && image_comp == IH_COMP_GZIP) {
>>>>>>>>   		size = length;
>>>>>>>>   		if (gunzip((void *)load_addr, CONFIG_SYS_BOOTM_LEN,
>>>>>>>>   			   src, &size)) {
>>>>>>>>
>>>>>>>
>>>>>>> This will uncompress ramdisk unnecessarily.
>>>>>>
>>>>>> Can you please share your its fragment? Also is there any other image
>>>>>> which should be exclude?
>>>>>
>>>>> I used it for falcon boot. I guess the executable image should have "entry". In
>>>>> my setup, only kernel image has "entry". Here is my its file.
>>>>>
>>>>> /dts-v1/;
>>>>>
>>>>> / {
>>>>> 	description = "Image file for the LS1046A Linux Kernel";
>>>>> 	#address-cells = <1>;
>>>>>
>>>>> 	images {
>>>>> 		kernel at 1 {
>>>>> 			description = "ARM64 Linux kernel";
>>>>> 			data = /incbin/("./arch/arm64/boot/Image.gz");
>>>>> 			type = "kernel";
>>>>> 			arch = "arm64";
>>>>> 			os = "linux";
>>>>> 			compression = "gzip";
>>>>> 			load = <0x80080000>;
>>>>> 			entry = <0x80080000>;
>>>>> 		};
>>>>> 		fdt at 1 {
>>>>> 			description = "Flattened Device Tree blob";
>>>>> 			data = /incbin/("./fsl-ls1046ardb.dtb");
>>>>> 			type = "flat_dt";
>>>>> 			arch = "arm64";
>>>>> 			compression = "none";
>>>>> 			load = <0x90000000>;
>>>>> 		};
>>>>> 		ramdisk at 1 {
>>>>> 			description = "Buildroot initramfs";
>>>>>                          data = /incbin/("./rootfs.cpio.gz");
>>>>> 			type = "ramdisk";
>>>>> 			arch = "arm64";
>>>>> 			os = "linux";
>>>>> 			compression = "gzip";
>>>>
>>>> I have tested full u-boot and there is also no uncompression for ramdisk
>>>> when you put gzip compress there.
>>>> I have even tried gzip compression for fdt with expectation that u-boot
>>>> will uncompress it.
>>>>
>>>> Based on doc/uImage.FIT/source_file_format.txt:
>>>> 165  - compression : Compression used by included data. Supported
>>>> compressions
>>>> 166     are "gzip" and "bzip2". If no compression is used compression
>>>> property
>>>> 167     should be set to "none".
>>>>
>>>>
>>>> Based on me this means that data inside fit are compressed and you are
>>>> asking u-boot in boot to uncompress it. If you are not asking for that
>>>> you should put none there.
>>>> But it doesn't look like this is supported at all for fdt/ramdisk and it
>>>> is only handled for OS.
>>>> I see here two cases.
>>>> 1. I want u-boot to uncompress my data in fit image (whatever it is)
>>>> before passing control to OS that's why I putting there compression method.
>>>> 2. I want OS to uncompress data but I want pass this data unchanged from
>>>> u-boot to OS that's why I am putting compression method at "none"
>>>>
>>>> I am expecting when you put "none" there than you will boot in falcon
>>>> mode without any issue.
>>>
>>> That will work. I can put "none" for the images I don't want U-Boot to
>>> uncompress.
>>
>> Please also update the document to be clear that "none" for "don't touch
>> my compressed data!" is expected.  The existing language isn't clear but
>> I agree it makes sense (and follows the long standing practice of "-C
>> none" on compressed ramdisks for legacy style images).
>>
>> And per Simon Goldschmidt's suggestion, after we've made the docs
>> clearer, making it so that U-Boot does decompress things would be good,
>> but we may also need to make that behavior configurable as I can see
>> people having put the correct compression in and not wanting it to be
>> uncompressed as we have examples of both none and gzip for ramdisks
>> today.  It's also possible (and if someone wants to dig back /
>> experiment and confirm) that long ago it did auto-decompress the data
>> and now doesn't, it would be a bugfix and no we don't need to make it
>> configurable.
> 
> Simon Goldschmidt: Can you please update that doc?

Done here:
https://lists.denx.de/pipermail/u-boot/2018-July/336438.html

Are you planning to implement fpga uncompression in U-Boot proper? I 
don't know when I would find the time to do so...

Thanks,
Simon


More information about the U-Boot mailing list