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