@@ -92,12 +92,32 @@ static const struct regmap_test_param regcache_types_list[] = {
92
92
93
93
KUNIT_ARRAY_PARAM (regcache_types , regcache_types_list , param_to_desc );
94
94
95
- static const struct regmap_test_param real_cache_types_list [] = {
95
+ static const struct regmap_test_param real_cache_types_only_list [] = {
96
96
{ .cache = REGCACHE_FLAT },
97
97
{ .cache = REGCACHE_RBTREE },
98
98
{ .cache = REGCACHE_MAPLE },
99
99
};
100
100
101
+ KUNIT_ARRAY_PARAM (real_cache_types_only , real_cache_types_only_list , param_to_desc );
102
+
103
+ static const struct regmap_test_param real_cache_types_list [] = {
104
+ { .cache = REGCACHE_FLAT , .from_reg = 0 },
105
+ { .cache = REGCACHE_FLAT , .from_reg = 0x2001 },
106
+ { .cache = REGCACHE_FLAT , .from_reg = 0x2002 },
107
+ { .cache = REGCACHE_FLAT , .from_reg = 0x2003 },
108
+ { .cache = REGCACHE_FLAT , .from_reg = 0x2004 },
109
+ { .cache = REGCACHE_RBTREE , .from_reg = 0 },
110
+ { .cache = REGCACHE_RBTREE , .from_reg = 0x2001 },
111
+ { .cache = REGCACHE_RBTREE , .from_reg = 0x2002 },
112
+ { .cache = REGCACHE_RBTREE , .from_reg = 0x2003 },
113
+ { .cache = REGCACHE_RBTREE , .from_reg = 0x2004 },
114
+ { .cache = REGCACHE_MAPLE , .from_reg = 0 },
115
+ { .cache = REGCACHE_MAPLE , .from_reg = 0x2001 },
116
+ { .cache = REGCACHE_MAPLE , .from_reg = 0x2002 },
117
+ { .cache = REGCACHE_MAPLE , .from_reg = 0x2003 },
118
+ { .cache = REGCACHE_MAPLE , .from_reg = 0x2004 },
119
+ };
120
+
101
121
KUNIT_ARRAY_PARAM (real_cache_types , real_cache_types_list , param_to_desc );
102
122
103
123
static const struct regmap_test_param sparse_cache_types_list [] = {
@@ -175,9 +195,12 @@ static struct regmap *gen_regmap(struct kunit *test,
175
195
return ret ;
176
196
}
177
197
178
- static bool reg_5_false (struct device * context , unsigned int reg )
198
+ static bool reg_5_false (struct device * dev , unsigned int reg )
179
199
{
180
- return reg != 5 ;
200
+ struct kunit * test = dev_get_drvdata (dev );
201
+ const struct regmap_test_param * param = test -> param_value ;
202
+
203
+ return reg != (param -> from_reg + 5 );
181
204
}
182
205
183
206
static void basic_read_write (struct kunit * test )
@@ -648,6 +671,7 @@ static void stress_insert(struct kunit *test)
648
671
649
672
static void cache_bypass (struct kunit * test )
650
673
{
674
+ const struct regmap_test_param * param = test -> param_value ;
651
675
struct regmap * map ;
652
676
struct regmap_config config ;
653
677
struct regmap_ram_data * data ;
@@ -663,27 +687,28 @@ static void cache_bypass(struct kunit *test)
663
687
get_random_bytes (& val , sizeof (val ));
664
688
665
689
/* Ensure the cache has a value in it */
666
- KUNIT_EXPECT_EQ (test , 0 , regmap_write (map , 0 , val ));
690
+ KUNIT_EXPECT_EQ (test , 0 , regmap_write (map , param -> from_reg , val ));
667
691
668
692
/* Bypass then write a different value */
669
693
regcache_cache_bypass (map , true);
670
- KUNIT_EXPECT_EQ (test , 0 , regmap_write (map , 0 , val + 1 ));
694
+ KUNIT_EXPECT_EQ (test , 0 , regmap_write (map , param -> from_reg , val + 1 ));
671
695
672
696
/* Read the bypassed value */
673
- KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , 0 , & rval ));
697
+ KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , param -> from_reg , & rval ));
674
698
KUNIT_EXPECT_EQ (test , val + 1 , rval );
675
- KUNIT_EXPECT_EQ (test , data -> vals [0 ], rval );
699
+ KUNIT_EXPECT_EQ (test , data -> vals [param -> from_reg ], rval );
676
700
677
701
/* Disable bypass, the cache should still return the original value */
678
702
regcache_cache_bypass (map , false);
679
- KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , 0 , & rval ));
703
+ KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , param -> from_reg , & rval ));
680
704
KUNIT_EXPECT_EQ (test , val , rval );
681
705
682
706
regmap_exit (map );
683
707
}
684
708
685
709
static void cache_sync (struct kunit * test )
686
710
{
711
+ const struct regmap_test_param * param = test -> param_value ;
687
712
struct regmap * map ;
688
713
struct regmap_config config ;
689
714
struct regmap_ram_data * data ;
@@ -700,26 +725,27 @@ static void cache_sync(struct kunit *test)
700
725
get_random_bytes (& val , sizeof (val ));
701
726
702
727
/* Put some data into the cache */
703
- KUNIT_EXPECT_EQ (test , 0 , regmap_bulk_write (map , 0 , val ,
728
+ KUNIT_EXPECT_EQ (test , 0 , regmap_bulk_write (map , param -> from_reg , val ,
704
729
BLOCK_TEST_SIZE ));
705
730
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
706
- data -> written [i ] = false;
731
+ data -> written [param -> from_reg + i ] = false;
707
732
708
733
/* Trash the data on the device itself then resync */
709
734
regcache_mark_dirty (map );
710
735
memset (data -> vals , 0 , sizeof (val ));
711
736
KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
712
737
713
738
/* Did we just write the correct data out? */
714
- KUNIT_EXPECT_MEMEQ (test , data -> vals , val , sizeof (val ));
739
+ KUNIT_EXPECT_MEMEQ (test , & data -> vals [ param -> from_reg ] , val , sizeof (val ));
715
740
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
716
- KUNIT_EXPECT_EQ (test , true, data -> written [i ]);
741
+ KUNIT_EXPECT_EQ (test , true, data -> written [param -> from_reg + i ]);
717
742
718
743
regmap_exit (map );
719
744
}
720
745
721
746
static void cache_sync_defaults (struct kunit * test )
722
747
{
748
+ const struct regmap_test_param * param = test -> param_value ;
723
749
struct regmap * map ;
724
750
struct regmap_config config ;
725
751
struct regmap_ram_data * data ;
@@ -737,23 +763,24 @@ static void cache_sync_defaults(struct kunit *test)
737
763
get_random_bytes (& val , sizeof (val ));
738
764
739
765
/* Change the value of one register */
740
- KUNIT_EXPECT_EQ (test , 0 , regmap_write (map , 2 , val ));
766
+ KUNIT_EXPECT_EQ (test , 0 , regmap_write (map , param -> from_reg + 2 , val ));
741
767
742
768
/* Resync */
743
769
regcache_mark_dirty (map );
744
770
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
745
- data -> written [i ] = false;
771
+ data -> written [param -> from_reg + i ] = false;
746
772
KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
747
773
748
774
/* Did we just sync the one register we touched? */
749
775
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
750
- KUNIT_EXPECT_EQ (test , i == 2 , data -> written [i ]);
776
+ KUNIT_EXPECT_EQ (test , i == 2 , data -> written [param -> from_reg + i ]);
751
777
752
778
regmap_exit (map );
753
779
}
754
780
755
781
static void cache_sync_readonly (struct kunit * test )
756
782
{
783
+ const struct regmap_test_param * param = test -> param_value ;
757
784
struct regmap * map ;
758
785
struct regmap_config config ;
759
786
struct regmap_ram_data * data ;
@@ -770,29 +797,30 @@ static void cache_sync_readonly(struct kunit *test)
770
797
771
798
/* Read all registers to fill the cache */
772
799
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
773
- KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , i , & val ));
800
+ KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , param -> from_reg + i , & val ));
774
801
775
802
/* Change the value of all registers, readonly should fail */
776
803
get_random_bytes (& val , sizeof (val ));
777
804
regcache_cache_only (map , true);
778
805
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
779
- KUNIT_EXPECT_EQ (test , i != 5 , regmap_write (map , i , val ) == 0 );
806
+ KUNIT_EXPECT_EQ (test , i != 5 , regmap_write (map , param -> from_reg + i , val ) == 0 );
780
807
regcache_cache_only (map , false);
781
808
782
809
/* Resync */
783
810
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
784
- data -> written [i ] = false;
811
+ data -> written [param -> from_reg + i ] = false;
785
812
KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
786
813
787
814
/* Did that match what we see on the device? */
788
815
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
789
- KUNIT_EXPECT_EQ (test , i != 5 , data -> written [i ]);
816
+ KUNIT_EXPECT_EQ (test , i != 5 , data -> written [param -> from_reg + i ]);
790
817
791
818
regmap_exit (map );
792
819
}
793
820
794
821
static void cache_sync_patch (struct kunit * test )
795
822
{
823
+ const struct regmap_test_param * param = test -> param_value ;
796
824
struct regmap * map ;
797
825
struct regmap_config config ;
798
826
struct regmap_ram_data * data ;
@@ -810,14 +838,14 @@ static void cache_sync_patch(struct kunit *test)
810
838
return ;
811
839
812
840
/* Stash the original values */
813
- KUNIT_EXPECT_EQ (test , 0 , regmap_bulk_read (map , 0 , rval ,
841
+ KUNIT_EXPECT_EQ (test , 0 , regmap_bulk_read (map , param -> from_reg , rval ,
814
842
BLOCK_TEST_SIZE ));
815
843
816
844
/* Patch a couple of values */
817
- patch [0 ].reg = 2 ;
845
+ patch [0 ].reg = param -> from_reg + 2 ;
818
846
patch [0 ].def = rval [2 ] + 1 ;
819
847
patch [0 ].delay_us = 0 ;
820
- patch [1 ].reg = 5 ;
848
+ patch [1 ].reg = param -> from_reg + 5 ;
821
849
patch [1 ].def = rval [5 ] + 1 ;
822
850
patch [1 ].delay_us = 0 ;
823
851
KUNIT_EXPECT_EQ (test , 0 , regmap_register_patch (map , patch ,
@@ -826,23 +854,23 @@ static void cache_sync_patch(struct kunit *test)
826
854
/* Sync the cache */
827
855
regcache_mark_dirty (map );
828
856
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
829
- data -> written [i ] = false;
857
+ data -> written [param -> from_reg + i ] = false;
830
858
KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
831
859
832
860
/* The patch should be on the device but not in the cache */
833
861
for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ ) {
834
- KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , i , & val ));
862
+ KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , param -> from_reg + i , & val ));
835
863
KUNIT_EXPECT_EQ (test , val , rval [i ]);
836
864
837
865
switch (i ) {
838
866
case 2 :
839
867
case 5 :
840
- KUNIT_EXPECT_EQ (test , true, data -> written [i ]);
841
- KUNIT_EXPECT_EQ (test , data -> vals [i ], rval [i ] + 1 );
868
+ KUNIT_EXPECT_EQ (test , true, data -> written [param -> from_reg + i ]);
869
+ KUNIT_EXPECT_EQ (test , data -> vals [param -> from_reg + i ], rval [i ] + 1 );
842
870
break ;
843
871
default :
844
- KUNIT_EXPECT_EQ (test , false, data -> written [i ]);
845
- KUNIT_EXPECT_EQ (test , data -> vals [i ], rval [i ]);
872
+ KUNIT_EXPECT_EQ (test , false, data -> written [param -> from_reg + i ]);
873
+ KUNIT_EXPECT_EQ (test , data -> vals [param -> from_reg + i ], rval [i ]);
846
874
break ;
847
875
}
848
876
}
@@ -1436,7 +1464,7 @@ static struct kunit_case regmap_test_cases[] = {
1436
1464
KUNIT_CASE_PARAM (cache_sync_patch , real_cache_types_gen_params ),
1437
1465
KUNIT_CASE_PARAM (cache_drop , sparse_cache_types_gen_params ),
1438
1466
KUNIT_CASE_PARAM (cache_present , sparse_cache_types_gen_params ),
1439
- KUNIT_CASE_PARAM (cache_range_window_reg , real_cache_types_gen_params ),
1467
+ KUNIT_CASE_PARAM (cache_range_window_reg , real_cache_types_only_gen_params ),
1440
1468
1441
1469
KUNIT_CASE_PARAM (raw_read_defaults_single , raw_test_types_gen_params ),
1442
1470
KUNIT_CASE_PARAM (raw_read_defaults , raw_test_types_gen_params ),
0 commit comments