Hi Charles,

On 06/05/2014 00:46, Charles Manning wrote:
> The crc32 used by pblimgae is NOT the same as zlib crc32.
> 
> The pbl_crc32 is useful for other purposes in mkimage so split it out.
> 
> While we are about it, clean up redundant and confusing code.
> 
> Signed-off-by: Charles Manning <cdhmann...@gmail.com>
> ---
>  tools/Makefile    |    1 +
>  tools/pbl_crc32.c |   56 
> +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tools/pbl_crc32.h |   13 +++++++++++++
>  tools/pblimage.c  |   47 +-------------------------------------------
>  4 files changed, 71 insertions(+), 46 deletions(-)
>  create mode 100644 tools/pbl_crc32.c
>  create mode 100644 tools/pbl_crc32.h
> 
> diff --git a/tools/Makefile b/tools/Makefile
> index c34df4f..2f30749 100644
> --- a/tools/Makefile
> +++ b/tools/Makefile
> @@ -86,6 +86,7 @@ dumpimage-mkimage-objs := aisimage.o \
>                       omapimage.o \
>                       os_support.o \
>                       pblimage.o \
> +                     pbl_crc32.o \
>                       sha1.o \
>                       sha256.o \
>                       ublimage.o \
> diff --git a/tools/pbl_crc32.c b/tools/pbl_crc32.c
> new file mode 100644
> index 0000000..6e6735a
> --- /dev/null
> +++ b/tools/pbl_crc32.c
> @@ -0,0 +1,56 @@
> +/*
> + * Copyright 2012 Freescale Semiconductor, Inc.
> + *
> + * Cleaned up and refactored by Charles Manning.
> + *
> + * SPDX-License-Identifier:  GPL-2.0+
> + */
> +#include "pblimage.h"
> +
> +static uint32_t crc_table[256];
> +static int crc_table_valid;
> +
> +static void make_crc_table(void)
> +{
> +     uint32_t mask;
> +     int i, j;
> +     uint32_t poly; /* polynomial exclusive-or pattern */
> +
> +     if (crc_table_valid)
> +             return;
> +
> +     /*
> +      * the polynomial used by PBL is 1 + x1 + x2 + x4 + x5 + x7 + x8 + x10
> +      * + x11 + x12 + x16 + x22 + x23 + x26 + x32.
> +      */
> +     poly = 0x04c11db7;
> +
> +     for (i = 0; i < 256; i++) {
> +             mask = i << 24;
> +             for (j = 0; j < 8; j++) {
> +                     if (mask & 0x80000000)
> +                             mask = (mask << 1) ^ poly;
> +                     else
> +                             mask <<= 1;
> +             }
> +             crc_table[i] = mask;
> +     }
> +
> +     crc_table_valid = 1;
> +}
> +
> +uint32_t pbl_crc32(uint32_t in_crc, const char *buf, uint32_t len)
> +{
> +     uint32_t crc32_val;
> +     int i;
> +
> +     make_crc_table();
> +
> +     crc32_val = ~in_crc;
> +
> +     for (i = 0; i < len; i++)
> +             crc32_val = (crc32_val << 8) ^
> +                     crc_table[(crc32_val >> 24) ^ (*buf++ & 0xff)];
> +
> +     return crc32_val;
> +}
> diff --git a/tools/pbl_crc32.h b/tools/pbl_crc32.h
> new file mode 100644
> index 0000000..4ab55ee
> --- /dev/null
> +++ b/tools/pbl_crc32.h
> @@ -0,0 +1,13 @@
> +/*
> + * Copyright 2012 Freescale Semiconductor, Inc.
> + *
> + * SPDX-License-Identifier:  GPL-2.0+
> + */
> +
> +#ifndef PBLCRC32_H
> +#define PBLCRC32_H
> +
> +#include <stdint.h>
> +uint32_t pbl_crc32(uint32_t in_crc, const char *buf, uint32_t len);
> +
> +#endif
> diff --git a/tools/pblimage.c b/tools/pblimage.c
> index ef3d7f6..6e6e801 100644
> --- a/tools/pblimage.c
> +++ b/tools/pblimage.c
> @@ -6,6 +6,7 @@
>  #include "imagetool.h"
>  #include <image.h>
>  #include "pblimage.h"
> +#include "pbl_crc32.h"
>  
>  /*
>   * Initialize to an invalid value.
> @@ -137,52 +138,6 @@ static void pbl_parser(char *name)
>       fclose(fd);
>  }
>  
> -static uint32_t crc_table[256];
> -
> -static void make_crc_table(void)
> -{
> -     uint32_t mask;
> -     int i, j;
> -     uint32_t poly; /* polynomial exclusive-or pattern */
> -
> -     /*
> -      * the polynomial used by PBL is 1 + x1 + x2 + x4 + x5 + x7 + x8 + x10
> -      * + x11 + x12 + x16 + x22 + x23 + x26 + x32.
> -      */
> -     poly = 0x04c11db7;
> -
> -     for (i = 0; i < 256; i++) {
> -             mask = i << 24;
> -             for (j = 0; j < 8; j++) {
> -                     if (mask & 0x80000000)
> -                             mask = (mask << 1) ^ poly;
> -                     else
> -                             mask <<= 1;
> -             }
> -             crc_table[i] = mask;
> -     }
> -}
> -
> -unsigned long pbl_crc32(unsigned long crc, const char *buf, uint32_t len)
> -{
> -     uint32_t crc32_val = 0xffffffff;
> -     uint32_t xor = 0x0;
> -     int i;
> -
> -     make_crc_table();
> -
> -     for (i = 0; i < len; i++)
> -             crc32_val = (crc32_val << 8) ^
> -                     crc_table[(crc32_val >> 24) ^ (*buf++ & 0xff)];
> -
> -     crc32_val = crc32_val ^ xor;
> -     if (crc32_val < 0) {
> -             crc32_val += 0xffffffff;
> -             crc32_val += 1;
> -     }
> -     return crc32_val;
> -}
> -
>  static uint32_t reverse_byte(uint32_t val)
>  {
>       uint32_t temp;
> 

Acked-by: Stefano Babic <sba...@denx.de>

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de
=====================================================================
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to