Skip to content

Commit bb92804

Browse files
committed
regmap: kunit: Add a test for ranges in combination with windows
In preparation for taking advantage of the SPI support for pre-coooked messages add a test case covering the use of windows on a raw regmap, unfortunately the parameterisation prevents direct reuse and we will want to add some raw specific coverage anyway. Signed-off-by: Mark Brown <[email protected]> Link: https://msgid.link/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 0ec74ad commit bb92804

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

drivers/base/regmap/regmap-kunit.c

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,6 +1318,71 @@ static void raw_sync(struct kunit *test)
13181318
regmap_exit(map);
13191319
}
13201320

1321+
static void raw_ranges(struct kunit *test)
1322+
{
1323+
struct raw_test_types *t = (struct raw_test_types *)test->param_value;
1324+
struct regmap *map;
1325+
struct regmap_config config;
1326+
struct regmap_ram_data *data;
1327+
unsigned int val;
1328+
int i;
1329+
1330+
config = raw_regmap_config;
1331+
config.volatile_reg = test_range_all_volatile;
1332+
config.ranges = &test_range;
1333+
config.num_ranges = 1;
1334+
config.max_register = test_range.range_max;
1335+
1336+
map = gen_raw_regmap(&config, t, &data);
1337+
KUNIT_ASSERT_FALSE(test, IS_ERR(map));
1338+
if (IS_ERR(map))
1339+
return;
1340+
1341+
/* Reset the page to a non-zero value to trigger a change */
1342+
KUNIT_EXPECT_EQ(test, 0, regmap_write(map, test_range.selector_reg,
1343+
test_range.range_max));
1344+
1345+
/* Check we set the page and use the window for writes */
1346+
data->written[test_range.selector_reg] = false;
1347+
data->written[test_range.window_start] = false;
1348+
KUNIT_EXPECT_EQ(test, 0, regmap_write(map, test_range.range_min, 0));
1349+
KUNIT_EXPECT_TRUE(test, data->written[test_range.selector_reg]);
1350+
KUNIT_EXPECT_TRUE(test, data->written[test_range.window_start]);
1351+
1352+
data->written[test_range.selector_reg] = false;
1353+
data->written[test_range.window_start] = false;
1354+
KUNIT_EXPECT_EQ(test, 0, regmap_write(map,
1355+
test_range.range_min +
1356+
test_range.window_len,
1357+
0));
1358+
KUNIT_EXPECT_TRUE(test, data->written[test_range.selector_reg]);
1359+
KUNIT_EXPECT_TRUE(test, data->written[test_range.window_start]);
1360+
1361+
/* Same for reads */
1362+
data->written[test_range.selector_reg] = false;
1363+
data->read[test_range.window_start] = false;
1364+
KUNIT_EXPECT_EQ(test, 0, regmap_read(map, test_range.range_min, &val));
1365+
KUNIT_EXPECT_TRUE(test, data->written[test_range.selector_reg]);
1366+
KUNIT_EXPECT_TRUE(test, data->read[test_range.window_start]);
1367+
1368+
data->written[test_range.selector_reg] = false;
1369+
data->read[test_range.window_start] = false;
1370+
KUNIT_EXPECT_EQ(test, 0, regmap_read(map,
1371+
test_range.range_min +
1372+
test_range.window_len,
1373+
&val));
1374+
KUNIT_EXPECT_TRUE(test, data->written[test_range.selector_reg]);
1375+
KUNIT_EXPECT_TRUE(test, data->read[test_range.window_start]);
1376+
1377+
/* No physical access triggered in the virtual range */
1378+
for (i = test_range.range_min; i < test_range.range_max; i++) {
1379+
KUNIT_EXPECT_FALSE(test, data->read[i]);
1380+
KUNIT_EXPECT_FALSE(test, data->written[i]);
1381+
}
1382+
1383+
regmap_exit(map);
1384+
}
1385+
13211386
static struct kunit_case regmap_test_cases[] = {
13221387
KUNIT_CASE_PARAM(basic_read_write, regcache_types_gen_params),
13231388
KUNIT_CASE_PARAM(bulk_write, regcache_types_gen_params),
@@ -1345,6 +1410,7 @@ static struct kunit_case regmap_test_cases[] = {
13451410
KUNIT_CASE_PARAM(raw_write, raw_test_types_gen_params),
13461411
KUNIT_CASE_PARAM(raw_noinc_write, raw_test_types_gen_params),
13471412
KUNIT_CASE_PARAM(raw_sync, raw_test_cache_types_gen_params),
1413+
KUNIT_CASE_PARAM(raw_ranges, raw_test_cache_types_gen_params),
13481414
{}
13491415
};
13501416

0 commit comments

Comments
 (0)