board: stm32mp1: fix handling of DT OP-TEE reserved memory nodes
[oweals/u-boot.git] / lib / crc8.c
index 8b68a29e40be79d95c85ce88c9c6bd65b643a1be..87b87b675b27fa77280cdf98a5cdf17c66b79566 100644 (file)
@@ -1,25 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (c) 2013 Google, Inc
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
-#include "linux/crc8.h"
+#ifdef USE_HOSTCC
+#include <arpa/inet.h>
+#else
+#include <common.h>
+#endif
+#include <u-boot/crc.h>
 
-unsigned int crc8(const unsigned char *vptr, int len)
+#define POLY   (0x1070U << 3)
+
+static unsigned char _crc8(unsigned short data)
 {
-       const unsigned char *data = vptr;
-       unsigned int crc = 0;
-       int i, j;
-
-       for (j = len; j; j--, data++) {
-               crc ^= (*data << 8);
-               for (i = 8; i; i--) {
-                       if (crc & 0x8000)
-                               crc ^= (0x1070 << 3);
-                       crc <<= 1;
-               }
+       int i;
+
+       for (i = 0; i < 8; i++) {
+               if (data & 0x8000)
+                       data = data ^ POLY;
+               data = data << 1;
        }
 
-       return (crc >> 8) & 0xff;
+       return (unsigned char)(data >> 8);
+}
+
+unsigned int crc8(unsigned int crc, const unsigned char *vptr, int len)
+{
+       int i;
+
+       for (i = 0; i < len; i++)
+               crc = _crc8((crc ^ vptr[i]) << 8);
+
+       return crc;
 }