And simplify further decompression testing.

Signed-off-by: Loic Poulain <loic.poul...@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);
-- 
2.34.1

Reply via email to