[U-Boot] [PATCH 1/2] mkimage : Split out and clean pbl_crc32 for use by other image types
Stefano Babic
sbabic at denx.de
Tue May 6 10:10:13 CEST 2014
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 <cdhmanning at 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 <sbabic at 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: sbabic at denx.de
=====================================================================
More information about the U-Boot
mailing list