From: Michal Simek Date: Mon, 15 Apr 2019 09:04:42 +0000 (+0200) Subject: cmd: fru: Separate checksum routine X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=50b3b7f273501a320cf76dd92109d9c8c91e05c4;p=thirdparty%2Fu-boot.git cmd: fru: Separate checksum routine There is a need to call this function from different places too. Signed-off-by: Michal Simek --- diff --git a/common/fru_ops.c b/common/fru_ops.c index e3be6da9699..4bab1a725c9 100644 --- a/common/fru_ops.c +++ b/common/fru_ops.c @@ -10,7 +10,6 @@ #include #include #include -#include "linux/crc8.h" struct fru_table fru_data __attribute__((section(".data"))); @@ -34,6 +33,18 @@ static int fru_check_language(u8 code) return code; } +static u8 fru_checksum(u8 *addr, u8 len) +{ + u8 checksum = 0; + + while (len--) { + checksum += *addr; + addr++; + } + + return checksum; +} + static int fru_check_type_len(u8 type_len, u8 language, u8 *type) { int len; @@ -88,23 +99,16 @@ static int fru_parse_board(unsigned long addr) int fru_capture(unsigned long addr) { struct fru_common_hdr *hdr; - u8 crc = 0; - u8 len; - u8 *temp = (u8 *)addr; + u8 checksum = 0; - hdr = (struct fru_common_hdr *)addr; - len = sizeof(struct fru_common_hdr); - - while(len--) { - crc += *temp; - temp++; - } - - if (crc) { + checksum = fru_checksum((u8 *)addr, sizeof(struct fru_common_hdr)); + if (checksum) { printf("%s Common header CRC error\n", __func__); return -EINVAL; } + hdr = (struct fru_common_hdr *)addr; + memcpy((void *)&fru_data.hdr, (void *)hdr, sizeof(struct fru_common_hdr));