Message ID | 20231103143426.3643712-1-loic.poulain@linaro.org |
---|---|
State | New |
Headers | show |
Series | [1/3] spl: fit: Discard decompression if not supported | expand |
On 11/3/23 10:34, Loic Poulain wrote: > And simplify further decompression testing. > > Signed-off-by: Loic Poulain <loic.poulain@linaro.org> > --- > common/spl/spl_fit.c | 27 +++++++++++++++++++++------ > 1 file changed, 21 insertions(+), 6 deletions(-) > > diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c > index 70d8d5942d..1d42cb1d10 100644 > --- a/common/spl/spl_fit.c > +++ b/common/spl/spl_fit.c > @@ -208,6 +208,20 @@ static int get_aligned_image_size(struct spl_load_info *info, int data_size, > return (data_size + info->bl_len - 1) / info->bl_len; > } > > +static inline bool spl_fit_decompression_supported(uint8_t comp) > +{ > + switch (comp) { > + case IH_COMP_GZIP: > + return IS_ENABLED(CONFIG_SPL_GZIP); > + case IH_COMP_LZMA: > + return IS_ENABLED(CONFIG_SPL_LZMA); > + case IH_COMP_NONE: > + return true; > + } > + > + return false; > +} > + > /** > * load_simple_fit(): load the image described in a certain FIT node > * @info: points to information about the device to load data from > @@ -235,7 +249,7 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector, > void *src; > ulong overhead; > int nr_sectors; > - uint8_t image_comp = -1, type = -1; > + uint8_t image_comp, type = -1; > const void *data; > const void *fit = ctx->fit; > bool external_data = false; > @@ -248,9 +262,11 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector, > debug("%s ", genimg_get_type_name(type)); > } > > - if (spl_decompression_enabled()) { > - fit_image_get_comp(fit, node, &image_comp); > - debug("%s ", genimg_get_comp_name(image_comp)); > + fit_image_get_comp(fit, node, &image_comp); > + if (!spl_fit_decompression_supported(image_comp)) { > + debug("Discard unsupported compression %s ", > + genimg_get_comp_name(image_comp)); > + image_comp = IH_COMP_NONE; > } > > if (fit_image_get_load(fit, node, &load_addr)) { > @@ -283,8 +299,7 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector, > return 0; > } > > - if (spl_decompression_enabled() && > - (image_comp == IH_COMP_GZIP || image_comp == IH_COMP_LZMA)) > + if (image_comp != IH_COMP_NONE) > src_ptr = map_sysmem(ALIGN(CONFIG_SYS_LOAD_ADDR, ARCH_DMA_MINALIGN), len); > else > src_ptr = map_sysmem(ALIGN(load_addr, ARCH_DMA_MINALIGN), len); Why doesn't spl_decompression_enabled work here? --Sean
diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index 70d8d5942d..1d42cb1d10 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -208,6 +208,20 @@ static int get_aligned_image_size(struct spl_load_info *info, int data_size, return (data_size + info->bl_len - 1) / info->bl_len; } +static inline bool spl_fit_decompression_supported(uint8_t comp) +{ + switch (comp) { + case IH_COMP_GZIP: + return IS_ENABLED(CONFIG_SPL_GZIP); + case IH_COMP_LZMA: + return IS_ENABLED(CONFIG_SPL_LZMA); + case IH_COMP_NONE: + return true; + } + + return false; +} + /** * load_simple_fit(): load the image described in a certain FIT node * @info: points to information about the device to load data from @@ -235,7 +249,7 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector, void *src; ulong overhead; int nr_sectors; - uint8_t image_comp = -1, type = -1; + uint8_t image_comp, type = -1; const void *data; const void *fit = ctx->fit; bool external_data = false; @@ -248,9 +262,11 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector, debug("%s ", genimg_get_type_name(type)); } - if (spl_decompression_enabled()) { - fit_image_get_comp(fit, node, &image_comp); - debug("%s ", genimg_get_comp_name(image_comp)); + fit_image_get_comp(fit, node, &image_comp); + if (!spl_fit_decompression_supported(image_comp)) { + debug("Discard unsupported compression %s ", + genimg_get_comp_name(image_comp)); + image_comp = IH_COMP_NONE; } if (fit_image_get_load(fit, node, &load_addr)) { @@ -283,8 +299,7 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector, return 0; } - if (spl_decompression_enabled() && - (image_comp == IH_COMP_GZIP || image_comp == IH_COMP_LZMA)) + if (image_comp != IH_COMP_NONE) src_ptr = map_sysmem(ALIGN(CONFIG_SYS_LOAD_ADDR, ARCH_DMA_MINALIGN), len); else src_ptr = map_sysmem(ALIGN(load_addr, ARCH_DMA_MINALIGN), len);
And simplify further decompression testing. Signed-off-by: Loic Poulain <loic.poulain@linaro.org> --- common/spl/spl_fit.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-)