zephyr: forward cros_crc8 to zephyrs crc8 impl

Shim in support for crc8 used in CBI, I2C, and other
applications within platform/ec

BRANCH=none
BUG=b:168032589
TEST=add unit test for platform/ec and zephyr based
     CRC8 approaches and verify they both pass.

Signed-off-by: Jett Rink <jettrink@chromium.org>
Change-Id: I9b6112cb83dab81a44a1ac020d4efb1b7bb1df5f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2532692
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
This commit is contained in:
Jett Rink 2020-11-09 14:42:53 -07:00 committed by Commit Bot
parent c382208fe8
commit ba63fbd08d
7 changed files with 86 additions and 0 deletions

View File

@ -8,6 +8,7 @@
#include "common.h"
#include "console.h"
#include "crc.h"
#include "crc8.h"
#include "test_util.h"
#include "util.h"
@ -63,6 +64,18 @@ static int test_kat0(void)
return EC_SUCCESS;
}
static int test_cros_crc8(void)
{
uint8_t buffer[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 8 };
int crc = cros_crc8(buffer, 10);
/* Verifies polynomial values of 0x07 representing x^8 + x^2 + x + 1 */
TEST_EQ(crc, 170, "%d");
return EC_SUCCESS;
}
void run_test(int argc, char **argv)
{
test_reset();
@ -70,6 +83,7 @@ void run_test(int argc, char **argv)
RUN_TEST(test_static_version);
RUN_TEST(test_8);
RUN_TEST(test_kat0);
RUN_TEST(test_cros_crc8);
test_print_result();
}

View File

@ -220,6 +220,7 @@ enum sensor_id {
#endif
#ifdef TEST_CRC
#define CONFIG_CRC8
#define CONFIG_SW_CRC
#endif

View File

@ -5,6 +5,7 @@
zephyr_sources(console.c)
zephyr_sources(gpio.c)
zephyr_sources(util.c)
zephyr_sources(crc.c)
zephyr_sources_ifdef(CONFIG_PLATFORM_EC_HOOKS hooks.c)
zephyr_sources_ifdef(CONFIG_PLATFORM_EC_TIMER hwtimer.c)

21
zephyr/shim/src/crc.c Normal file
View File

@ -0,0 +1,21 @@
/* Copyright 2020 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <sys/crc.h>
#include "crc8.h"
/* Polynomial representation for x^8 + x^2 + x + 1 is 0x07 */
#define SMBUS_POLYNOMIAL 0x07
inline uint8_t cros_crc8(const uint8_t *data, int len)
{
return crc8(data, len, SMBUS_POLYNOMIAL, 0, false);
}
uint8_t cros_crc8_arg(const uint8_t *data, int len, uint8_t previous_crc)
{
return crc8(data, len, SMBUS_POLYNOMIAL, previous_crc, false);
}

View File

@ -0,0 +1,17 @@
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.13.1)
set(BOARD native_posix)
project(tasks)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
# We need to include the EC include directory and this local test directory
# for the task defines
zephyr_include_directories("${PLATFORM_EC}/include")
# Include the test source and the file under test
target_sources(app PRIVATE main.c)
target_sources(app PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../shim/src/crc.c")

27
zephyr/test/crc/main.c Normal file
View File

@ -0,0 +1,27 @@
/* Copyright 2020 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <kernel.h>
#include <ztest.h>
#include "crc8.h"
/* Note this test makes the pure platform/ec test that uses the same value */
static void test_crc8_known_data(void)
{
uint8_t buffer[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 8 };
int crc = cros_crc8(buffer, 10);
/* Verifies polynomial values of 0x07 representing x^8 + x^2 + x + 1 */
zassert_equal(crc, 170, "CRC8 hash did not match");
}
void test_main(void)
{
ztest_test_suite(test_task_shim,
ztest_unit_test(test_crc8_known_data));
ztest_run_test_suite(test_task_shim);
}

5
zephyr/test/crc/prj.conf Normal file
View File

@ -0,0 +1,5 @@
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
CONFIG_ZTEST=y