From: Tzung-Bi Shih Date: Tue, 3 Oct 2023 08:05:15 +0000 (+0000) Subject: platform/chrome: kunit: make EC protocol tests independent X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=466f70fb1b10fd139582646285e587fb38a9ff2c;p=linux.git platform/chrome: kunit: make EC protocol tests independent Remove CONFIG_CROS_KUNIT and common code concept for ChromeOS Kunit but make it bundle to ChromeOS EC protocol tests. Reviewed-by: Guenter Roeck Link: https://lore.kernel.org/r/20231003080515.4011374-1-tzungbi@kernel.org Signed-off-by: Tzung-Bi Shih --- diff --git a/drivers/platform/chrome/Kconfig b/drivers/platform/chrome/Kconfig index 7d82a0946e1c8..7a83346bfa53d 100644 --- a/drivers/platform/chrome/Kconfig +++ b/drivers/platform/chrome/Kconfig @@ -299,12 +299,12 @@ config CROS_TYPEC_SWITCH source "drivers/platform/chrome/wilco_ec/Kconfig" # Kunit test cases -config CROS_KUNIT - tristate "Kunit tests for ChromeOS" if !KUNIT_ALL_TESTS +config CROS_KUNIT_EC_PROTO_TEST + tristate "Kunit tests for ChromeOS EC protocol" if !KUNIT_ALL_TESTS depends on KUNIT && CROS_EC default KUNIT_ALL_TESTS select CROS_EC_PROTO help - ChromeOS Kunit tests. + Kunit tests for ChromeOS EC protocol. endif # CHROMEOS_PLATFORMS diff --git a/drivers/platform/chrome/Makefile b/drivers/platform/chrome/Makefile index 9e26e45c4a375..2dcc6ccc23022 100644 --- a/drivers/platform/chrome/Makefile +++ b/drivers/platform/chrome/Makefile @@ -36,6 +36,5 @@ obj-$(CONFIG_CROS_USBPD_NOTIFY) += cros_usbpd_notify.o obj-$(CONFIG_WILCO_EC) += wilco_ec/ # Kunit test cases -obj-$(CONFIG_CROS_KUNIT) += cros_kunit.o -cros_kunit-objs := cros_kunit_util.o -cros_kunit-objs += cros_ec_proto_test.o +obj-$(CONFIG_CROS_KUNIT_EC_PROTO_TEST) += cros_kunit_proto_test.o +cros_kunit_proto_test-objs := cros_ec_proto_test_util.o cros_ec_proto_test.o diff --git a/drivers/platform/chrome/cros_ec_proto_test.c b/drivers/platform/chrome/cros_ec_proto_test.c index 63e38671e95a6..b6169d6f24677 100644 --- a/drivers/platform/chrome/cros_ec_proto_test.c +++ b/drivers/platform/chrome/cros_ec_proto_test.c @@ -11,7 +11,7 @@ #include #include "cros_ec.h" -#include "cros_kunit_util.h" +#include "cros_ec_proto_test_util.h" #define BUFSIZE 512 diff --git a/drivers/platform/chrome/cros_ec_proto_test_util.c b/drivers/platform/chrome/cros_ec_proto_test_util.c new file mode 100644 index 0000000000000..65d328bcd6eb2 --- /dev/null +++ b/drivers/platform/chrome/cros_ec_proto_test_util.c @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * CrOS Kunit tests utilities. + */ + +#include + +#include +#include +#include +#include + +#include "cros_ec.h" +#include "cros_ec_proto_test_util.h" + +int cros_kunit_ec_xfer_mock_default_result; +int cros_kunit_ec_xfer_mock_default_ret; +int cros_kunit_ec_cmd_xfer_mock_called; +int cros_kunit_ec_pkt_xfer_mock_called; + +static struct list_head cros_kunit_ec_xfer_mock_in; +static struct list_head cros_kunit_ec_xfer_mock_out; + +int cros_kunit_ec_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg) +{ + struct ec_xfer_mock *mock; + + mock = list_first_entry_or_null(&cros_kunit_ec_xfer_mock_in, struct ec_xfer_mock, list); + if (!mock) { + msg->result = cros_kunit_ec_xfer_mock_default_result; + return cros_kunit_ec_xfer_mock_default_ret; + } + + list_del(&mock->list); + + memcpy(&mock->msg, msg, sizeof(*msg)); + if (msg->outsize) { + mock->i_data = kunit_kzalloc(mock->test, msg->outsize, GFP_KERNEL); + if (mock->i_data) + memcpy(mock->i_data, msg->data, msg->outsize); + } + + msg->result = mock->result; + if (msg->insize) + memcpy(msg->data, mock->o_data, min(msg->insize, mock->o_data_len)); + + list_add_tail(&mock->list, &cros_kunit_ec_xfer_mock_out); + + return mock->ret; +} + +int cros_kunit_ec_cmd_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg) +{ + ++cros_kunit_ec_cmd_xfer_mock_called; + return cros_kunit_ec_xfer_mock(ec_dev, msg); +} + +int cros_kunit_ec_pkt_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg) +{ + ++cros_kunit_ec_pkt_xfer_mock_called; + return cros_kunit_ec_xfer_mock(ec_dev, msg); +} + +struct ec_xfer_mock *cros_kunit_ec_xfer_mock_add(struct kunit *test, size_t size) +{ + return cros_kunit_ec_xfer_mock_addx(test, size, EC_RES_SUCCESS, size); +} + +struct ec_xfer_mock *cros_kunit_ec_xfer_mock_addx(struct kunit *test, + int ret, int result, size_t size) +{ + struct ec_xfer_mock *mock; + + mock = kunit_kzalloc(test, sizeof(*mock), GFP_KERNEL); + if (!mock) + return NULL; + + list_add_tail(&mock->list, &cros_kunit_ec_xfer_mock_in); + mock->test = test; + + mock->ret = ret; + mock->result = result; + mock->o_data = kunit_kzalloc(test, size, GFP_KERNEL); + if (!mock->o_data) + return NULL; + mock->o_data_len = size; + + return mock; +} + +struct ec_xfer_mock *cros_kunit_ec_xfer_mock_next(void) +{ + struct ec_xfer_mock *mock; + + mock = list_first_entry_or_null(&cros_kunit_ec_xfer_mock_out, struct ec_xfer_mock, list); + if (mock) + list_del(&mock->list); + + return mock; +} + +int cros_kunit_readmem_mock_offset; +u8 *cros_kunit_readmem_mock_data; +int cros_kunit_readmem_mock_ret; + +int cros_kunit_readmem_mock(struct cros_ec_device *ec_dev, unsigned int offset, + unsigned int bytes, void *dest) +{ + cros_kunit_readmem_mock_offset = offset; + + memcpy(dest, cros_kunit_readmem_mock_data, bytes); + + return cros_kunit_readmem_mock_ret; +} + +void cros_kunit_mock_reset(void) +{ + cros_kunit_ec_xfer_mock_default_result = 0; + cros_kunit_ec_xfer_mock_default_ret = 0; + cros_kunit_ec_cmd_xfer_mock_called = 0; + cros_kunit_ec_pkt_xfer_mock_called = 0; + INIT_LIST_HEAD(&cros_kunit_ec_xfer_mock_in); + INIT_LIST_HEAD(&cros_kunit_ec_xfer_mock_out); + + cros_kunit_readmem_mock_offset = 0; + cros_kunit_readmem_mock_data = NULL; + cros_kunit_readmem_mock_ret = 0; +} diff --git a/drivers/platform/chrome/cros_ec_proto_test_util.h b/drivers/platform/chrome/cros_ec_proto_test_util.h new file mode 100644 index 0000000000000..414002271c9c0 --- /dev/null +++ b/drivers/platform/chrome/cros_ec_proto_test_util.h @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * CrOS Kunit tests utilities. + */ + +#ifndef _CROS_KUNIT_UTIL_H_ +#define _CROS_KUNIT_UTIL_H_ + +#include + +struct ec_xfer_mock { + struct list_head list; + struct kunit *test; + + /* input */ + struct cros_ec_command msg; + void *i_data; + + /* output */ + int ret; + int result; + void *o_data; + u32 o_data_len; +}; + +extern int cros_kunit_ec_xfer_mock_default_result; +extern int cros_kunit_ec_xfer_mock_default_ret; +extern int cros_kunit_ec_cmd_xfer_mock_called; +extern int cros_kunit_ec_pkt_xfer_mock_called; + +int cros_kunit_ec_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg); +int cros_kunit_ec_cmd_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg); +int cros_kunit_ec_pkt_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg); +struct ec_xfer_mock *cros_kunit_ec_xfer_mock_add(struct kunit *test, size_t size); +struct ec_xfer_mock *cros_kunit_ec_xfer_mock_addx(struct kunit *test, + int ret, int result, size_t size); +struct ec_xfer_mock *cros_kunit_ec_xfer_mock_next(void); + +extern int cros_kunit_readmem_mock_offset; +extern u8 *cros_kunit_readmem_mock_data; +extern int cros_kunit_readmem_mock_ret; + +int cros_kunit_readmem_mock(struct cros_ec_device *ec_dev, unsigned int offset, + unsigned int bytes, void *dest); + +void cros_kunit_mock_reset(void); + +#endif diff --git a/drivers/platform/chrome/cros_kunit_util.c b/drivers/platform/chrome/cros_kunit_util.c deleted file mode 100644 index f0fda96b11bd5..0000000000000 --- a/drivers/platform/chrome/cros_kunit_util.c +++ /dev/null @@ -1,130 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * CrOS Kunit tests utilities. - */ - -#include - -#include -#include -#include -#include - -#include "cros_ec.h" -#include "cros_kunit_util.h" - -int cros_kunit_ec_xfer_mock_default_result; -int cros_kunit_ec_xfer_mock_default_ret; -int cros_kunit_ec_cmd_xfer_mock_called; -int cros_kunit_ec_pkt_xfer_mock_called; - -static struct list_head cros_kunit_ec_xfer_mock_in; -static struct list_head cros_kunit_ec_xfer_mock_out; - -int cros_kunit_ec_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg) -{ - struct ec_xfer_mock *mock; - - mock = list_first_entry_or_null(&cros_kunit_ec_xfer_mock_in, struct ec_xfer_mock, list); - if (!mock) { - msg->result = cros_kunit_ec_xfer_mock_default_result; - return cros_kunit_ec_xfer_mock_default_ret; - } - - list_del(&mock->list); - - memcpy(&mock->msg, msg, sizeof(*msg)); - if (msg->outsize) { - mock->i_data = kunit_kzalloc(mock->test, msg->outsize, GFP_KERNEL); - if (mock->i_data) - memcpy(mock->i_data, msg->data, msg->outsize); - } - - msg->result = mock->result; - if (msg->insize) - memcpy(msg->data, mock->o_data, min(msg->insize, mock->o_data_len)); - - list_add_tail(&mock->list, &cros_kunit_ec_xfer_mock_out); - - return mock->ret; -} - -int cros_kunit_ec_cmd_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg) -{ - ++cros_kunit_ec_cmd_xfer_mock_called; - return cros_kunit_ec_xfer_mock(ec_dev, msg); -} - -int cros_kunit_ec_pkt_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg) -{ - ++cros_kunit_ec_pkt_xfer_mock_called; - return cros_kunit_ec_xfer_mock(ec_dev, msg); -} - -struct ec_xfer_mock *cros_kunit_ec_xfer_mock_add(struct kunit *test, size_t size) -{ - return cros_kunit_ec_xfer_mock_addx(test, size, EC_RES_SUCCESS, size); -} - -struct ec_xfer_mock *cros_kunit_ec_xfer_mock_addx(struct kunit *test, - int ret, int result, size_t size) -{ - struct ec_xfer_mock *mock; - - mock = kunit_kzalloc(test, sizeof(*mock), GFP_KERNEL); - if (!mock) - return NULL; - - list_add_tail(&mock->list, &cros_kunit_ec_xfer_mock_in); - mock->test = test; - - mock->ret = ret; - mock->result = result; - mock->o_data = kunit_kzalloc(test, size, GFP_KERNEL); - if (!mock->o_data) - return NULL; - mock->o_data_len = size; - - return mock; -} - -struct ec_xfer_mock *cros_kunit_ec_xfer_mock_next(void) -{ - struct ec_xfer_mock *mock; - - mock = list_first_entry_or_null(&cros_kunit_ec_xfer_mock_out, struct ec_xfer_mock, list); - if (mock) - list_del(&mock->list); - - return mock; -} - -int cros_kunit_readmem_mock_offset; -u8 *cros_kunit_readmem_mock_data; -int cros_kunit_readmem_mock_ret; - -int cros_kunit_readmem_mock(struct cros_ec_device *ec_dev, unsigned int offset, - unsigned int bytes, void *dest) -{ - cros_kunit_readmem_mock_offset = offset; - - memcpy(dest, cros_kunit_readmem_mock_data, bytes); - - return cros_kunit_readmem_mock_ret; -} - -void cros_kunit_mock_reset(void) -{ - cros_kunit_ec_xfer_mock_default_result = 0; - cros_kunit_ec_xfer_mock_default_ret = 0; - cros_kunit_ec_cmd_xfer_mock_called = 0; - cros_kunit_ec_pkt_xfer_mock_called = 0; - INIT_LIST_HEAD(&cros_kunit_ec_xfer_mock_in); - INIT_LIST_HEAD(&cros_kunit_ec_xfer_mock_out); - - cros_kunit_readmem_mock_offset = 0; - cros_kunit_readmem_mock_data = NULL; - cros_kunit_readmem_mock_ret = 0; -} - -MODULE_LICENSE("GPL"); diff --git a/drivers/platform/chrome/cros_kunit_util.h b/drivers/platform/chrome/cros_kunit_util.h deleted file mode 100644 index 414002271c9c0..0000000000000 --- a/drivers/platform/chrome/cros_kunit_util.h +++ /dev/null @@ -1,48 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * CrOS Kunit tests utilities. - */ - -#ifndef _CROS_KUNIT_UTIL_H_ -#define _CROS_KUNIT_UTIL_H_ - -#include - -struct ec_xfer_mock { - struct list_head list; - struct kunit *test; - - /* input */ - struct cros_ec_command msg; - void *i_data; - - /* output */ - int ret; - int result; - void *o_data; - u32 o_data_len; -}; - -extern int cros_kunit_ec_xfer_mock_default_result; -extern int cros_kunit_ec_xfer_mock_default_ret; -extern int cros_kunit_ec_cmd_xfer_mock_called; -extern int cros_kunit_ec_pkt_xfer_mock_called; - -int cros_kunit_ec_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg); -int cros_kunit_ec_cmd_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg); -int cros_kunit_ec_pkt_xfer_mock(struct cros_ec_device *ec_dev, struct cros_ec_command *msg); -struct ec_xfer_mock *cros_kunit_ec_xfer_mock_add(struct kunit *test, size_t size); -struct ec_xfer_mock *cros_kunit_ec_xfer_mock_addx(struct kunit *test, - int ret, int result, size_t size); -struct ec_xfer_mock *cros_kunit_ec_xfer_mock_next(void); - -extern int cros_kunit_readmem_mock_offset; -extern u8 *cros_kunit_readmem_mock_data; -extern int cros_kunit_readmem_mock_ret; - -int cros_kunit_readmem_mock(struct cros_ec_device *ec_dev, unsigned int offset, - unsigned int bytes, void *dest); - -void cros_kunit_mock_reset(void); - -#endif