Skip to content

Commit 33f0fdb

Browse files
author
Tzung-Bi Shih
committed
platform/chrome: cros_ec_proto: add Kunit tests for get_sensor_count
cros_ec_get_sensor_count() gets number of MEMS sensors. Add Kunit tests for cros_ec_get_sensor_count(). Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org> Reviewed-by: Guenter Roeck <groeck@chromium.org> Link: https://lore.kernel.org/r/20220622041040.202737-7-tzungbi@kernel.org
1 parent 0023886 commit 33f0fdb

3 files changed

Lines changed: 182 additions & 0 deletions

File tree

drivers/platform/chrome/cros_ec_proto_test.c

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2442,6 +2442,156 @@ static void cros_ec_proto_test_check_features_not_cached(struct kunit *test)
24422442
}
24432443
}
24442444

2445+
static void cros_ec_proto_test_get_sensor_count_normal(struct kunit *test)
2446+
{
2447+
struct cros_ec_proto_test_priv *priv = test->priv;
2448+
struct cros_ec_device *ec_dev = &priv->ec_dev;
2449+
struct ec_xfer_mock *mock;
2450+
int ret;
2451+
struct cros_ec_dev ec;
2452+
2453+
ec_dev->max_request = 0xff;
2454+
ec_dev->max_response = 0xee;
2455+
ec.ec_dev = ec_dev;
2456+
ec.dev = ec_dev->dev;
2457+
ec.cmd_offset = 0;
2458+
2459+
/* For EC_CMD_MOTION_SENSE_CMD. */
2460+
{
2461+
struct ec_response_motion_sense *data;
2462+
2463+
mock = cros_kunit_ec_xfer_mock_add(test, sizeof(*data));
2464+
KUNIT_ASSERT_PTR_NE(test, mock, NULL);
2465+
2466+
data = (struct ec_response_motion_sense *)mock->o_data;
2467+
data->dump.sensor_count = 0xbf;
2468+
}
2469+
2470+
ret = cros_ec_get_sensor_count(&ec);
2471+
KUNIT_EXPECT_EQ(test, ret, 0xbf);
2472+
2473+
/* For EC_CMD_MOTION_SENSE_CMD. */
2474+
{
2475+
struct ec_params_motion_sense *data;
2476+
2477+
mock = cros_kunit_ec_xfer_mock_next();
2478+
KUNIT_EXPECT_PTR_NE(test, mock, NULL);
2479+
2480+
KUNIT_EXPECT_EQ(test, mock->msg.version, 1);
2481+
KUNIT_EXPECT_EQ(test, mock->msg.command, EC_CMD_MOTION_SENSE_CMD);
2482+
KUNIT_EXPECT_EQ(test, mock->msg.insize, sizeof(struct ec_response_motion_sense));
2483+
KUNIT_EXPECT_EQ(test, mock->msg.outsize, sizeof(*data));
2484+
2485+
data = (struct ec_params_motion_sense *)mock->i_data;
2486+
KUNIT_EXPECT_EQ(test, data->cmd, MOTIONSENSE_CMD_DUMP);
2487+
}
2488+
}
2489+
2490+
static void cros_ec_proto_test_get_sensor_count_xfer_error(struct kunit *test)
2491+
{
2492+
struct cros_ec_proto_test_priv *priv = test->priv;
2493+
struct cros_ec_device *ec_dev = &priv->ec_dev;
2494+
struct ec_xfer_mock *mock;
2495+
int ret;
2496+
struct cros_ec_dev ec;
2497+
2498+
ec_dev->max_request = 0xff;
2499+
ec_dev->max_response = 0xee;
2500+
ec.ec_dev = ec_dev;
2501+
ec.dev = ec_dev->dev;
2502+
ec.cmd_offset = 0;
2503+
2504+
/* For EC_CMD_MOTION_SENSE_CMD. */
2505+
{
2506+
mock = cros_kunit_ec_xfer_mock_addx(test, -EPROTO, EC_RES_SUCCESS, 0);
2507+
KUNIT_ASSERT_PTR_NE(test, mock, NULL);
2508+
}
2509+
2510+
ret = cros_ec_get_sensor_count(&ec);
2511+
KUNIT_EXPECT_EQ(test, ret, -EPROTO);
2512+
2513+
/* For EC_CMD_MOTION_SENSE_CMD. */
2514+
{
2515+
struct ec_params_motion_sense *data;
2516+
2517+
mock = cros_kunit_ec_xfer_mock_next();
2518+
KUNIT_EXPECT_PTR_NE(test, mock, NULL);
2519+
2520+
KUNIT_EXPECT_EQ(test, mock->msg.version, 1);
2521+
KUNIT_EXPECT_EQ(test, mock->msg.command, EC_CMD_MOTION_SENSE_CMD);
2522+
KUNIT_EXPECT_EQ(test, mock->msg.insize, sizeof(struct ec_response_motion_sense));
2523+
KUNIT_EXPECT_EQ(test, mock->msg.outsize, sizeof(*data));
2524+
2525+
data = (struct ec_params_motion_sense *)mock->i_data;
2526+
KUNIT_EXPECT_EQ(test, data->cmd, MOTIONSENSE_CMD_DUMP);
2527+
}
2528+
}
2529+
2530+
static void cros_ec_proto_test_get_sensor_count_legacy(struct kunit *test)
2531+
{
2532+
struct cros_ec_proto_test_priv *priv = test->priv;
2533+
struct cros_ec_device *ec_dev = &priv->ec_dev;
2534+
struct ec_xfer_mock *mock;
2535+
int ret, i;
2536+
struct cros_ec_dev ec;
2537+
struct {
2538+
u8 readmem_data;
2539+
int expected_result;
2540+
} test_data[] = {
2541+
{ 0, 0 },
2542+
{ EC_MEMMAP_ACC_STATUS_PRESENCE_BIT, 2 },
2543+
};
2544+
2545+
ec_dev->max_request = 0xff;
2546+
ec_dev->max_response = 0xee;
2547+
ec_dev->cmd_readmem = cros_kunit_readmem_mock;
2548+
ec.ec_dev = ec_dev;
2549+
ec.dev = ec_dev->dev;
2550+
ec.cmd_offset = 0;
2551+
2552+
for (i = 0; i < ARRAY_SIZE(test_data); ++i) {
2553+
/* For EC_CMD_MOTION_SENSE_CMD. */
2554+
{
2555+
mock = cros_kunit_ec_xfer_mock_addx(test, -EPROTO, EC_RES_SUCCESS, 0);
2556+
KUNIT_ASSERT_PTR_NE(test, mock, NULL);
2557+
}
2558+
2559+
/* For readmem. */
2560+
{
2561+
cros_kunit_readmem_mock_data = kunit_kzalloc(test, 1, GFP_KERNEL);
2562+
KUNIT_ASSERT_PTR_NE(test, cros_kunit_readmem_mock_data, NULL);
2563+
cros_kunit_readmem_mock_data[0] = test_data[i].readmem_data;
2564+
2565+
cros_kunit_ec_xfer_mock_default_ret = 1;
2566+
}
2567+
2568+
ret = cros_ec_get_sensor_count(&ec);
2569+
KUNIT_EXPECT_EQ(test, ret, test_data[i].expected_result);
2570+
2571+
/* For EC_CMD_MOTION_SENSE_CMD. */
2572+
{
2573+
struct ec_params_motion_sense *data;
2574+
2575+
mock = cros_kunit_ec_xfer_mock_next();
2576+
KUNIT_EXPECT_PTR_NE(test, mock, NULL);
2577+
2578+
KUNIT_EXPECT_EQ(test, mock->msg.version, 1);
2579+
KUNIT_EXPECT_EQ(test, mock->msg.command, EC_CMD_MOTION_SENSE_CMD);
2580+
KUNIT_EXPECT_EQ(test, mock->msg.insize,
2581+
sizeof(struct ec_response_motion_sense));
2582+
KUNIT_EXPECT_EQ(test, mock->msg.outsize, sizeof(*data));
2583+
2584+
data = (struct ec_params_motion_sense *)mock->i_data;
2585+
KUNIT_EXPECT_EQ(test, data->cmd, MOTIONSENSE_CMD_DUMP);
2586+
}
2587+
2588+
/* For readmem. */
2589+
{
2590+
KUNIT_EXPECT_EQ(test, cros_kunit_readmem_mock_offset, EC_MEMMAP_ACC_STATUS);
2591+
}
2592+
}
2593+
}
2594+
24452595
static void cros_ec_proto_test_release(struct device *dev)
24462596
{
24472597
}
@@ -2537,6 +2687,9 @@ static struct kunit_case cros_ec_proto_test_cases[] = {
25372687
KUNIT_CASE(cros_ec_proto_test_get_host_event_normal),
25382688
KUNIT_CASE(cros_ec_proto_test_check_features_cached),
25392689
KUNIT_CASE(cros_ec_proto_test_check_features_not_cached),
2690+
KUNIT_CASE(cros_ec_proto_test_get_sensor_count_normal),
2691+
KUNIT_CASE(cros_ec_proto_test_get_sensor_count_xfer_error),
2692+
KUNIT_CASE(cros_ec_proto_test_get_sensor_count_legacy),
25402693
{}
25412694
};
25422695

drivers/platform/chrome/cros_kunit_util.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,35 @@ struct ec_xfer_mock *cros_kunit_ec_xfer_mock_next(void)
105105
}
106106
EXPORT_SYMBOL_GPL(cros_kunit_ec_xfer_mock_next);
107107

108+
int cros_kunit_readmem_mock_offset;
109+
EXPORT_SYMBOL_GPL(cros_kunit_readmem_mock_offset);
110+
u8 *cros_kunit_readmem_mock_data;
111+
EXPORT_SYMBOL_GPL(cros_kunit_readmem_mock_data);
112+
int cros_kunit_readmem_mock_ret;
113+
EXPORT_SYMBOL_GPL(cros_kunit_readmem_mock_ret);
114+
115+
int cros_kunit_readmem_mock(struct cros_ec_device *ec_dev, unsigned int offset,
116+
unsigned int bytes, void *dest)
117+
{
118+
cros_kunit_readmem_mock_offset = offset;
119+
120+
memcpy(dest, cros_kunit_readmem_mock_data, bytes);
121+
122+
return cros_kunit_readmem_mock_ret;
123+
}
124+
EXPORT_SYMBOL_GPL(cros_kunit_readmem_mock);
125+
108126
void cros_kunit_mock_reset(void)
109127
{
110128
cros_kunit_ec_xfer_mock_default_ret = 0;
111129
cros_kunit_ec_cmd_xfer_mock_called = 0;
112130
cros_kunit_ec_pkt_xfer_mock_called = 0;
113131
INIT_LIST_HEAD(&cros_kunit_ec_xfer_mock_in);
114132
INIT_LIST_HEAD(&cros_kunit_ec_xfer_mock_out);
133+
134+
cros_kunit_readmem_mock_offset = 0;
135+
cros_kunit_readmem_mock_data = NULL;
136+
cros_kunit_readmem_mock_ret = 0;
115137
}
116138
EXPORT_SYMBOL_GPL(cros_kunit_mock_reset);
117139

drivers/platform/chrome/cros_kunit_util.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ struct ec_xfer_mock *cros_kunit_ec_xfer_mock_addx(struct kunit *test,
3535
int ret, int result, size_t size);
3636
struct ec_xfer_mock *cros_kunit_ec_xfer_mock_next(void);
3737

38+
extern int cros_kunit_readmem_mock_offset;
39+
extern u8 *cros_kunit_readmem_mock_data;
40+
extern int cros_kunit_readmem_mock_ret;
41+
42+
int cros_kunit_readmem_mock(struct cros_ec_device *ec_dev, unsigned int offset,
43+
unsigned int bytes, void *dest);
44+
3845
void cros_kunit_mock_reset(void);
3946

4047
#endif

0 commit comments

Comments
 (0)