@@ -1318,6 +1318,71 @@ static void raw_sync(struct kunit *test)
1318
1318
regmap_exit (map );
1319
1319
}
1320
1320
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
+
1321
1386
static struct kunit_case regmap_test_cases [] = {
1322
1387
KUNIT_CASE_PARAM (basic_read_write , regcache_types_gen_params ),
1323
1388
KUNIT_CASE_PARAM (bulk_write , regcache_types_gen_params ),
@@ -1345,6 +1410,7 @@ static struct kunit_case regmap_test_cases[] = {
1345
1410
KUNIT_CASE_PARAM (raw_write , raw_test_types_gen_params ),
1346
1411
KUNIT_CASE_PARAM (raw_noinc_write , raw_test_types_gen_params ),
1347
1412
KUNIT_CASE_PARAM (raw_sync , raw_test_cache_types_gen_params ),
1413
+ KUNIT_CASE_PARAM (raw_ranges , raw_test_cache_types_gen_params ),
1348
1414
{}
1349
1415
};
1350
1416
0 commit comments