55// Copyright 2023 Arm Ltd
66
77#include <kunit/device.h>
8+ #include <kunit/resource.h>
89#include <kunit/test.h>
910#include "internal.h"
1011
1112#define BLOCK_TEST_SIZE 12
1213
14+ KUNIT_DEFINE_ACTION_WRAPPER (regmap_exit_action , regmap_exit , struct regmap * );
15+
1316struct regmap_test_priv {
1417 struct device * dev ;
1518};
@@ -190,6 +193,8 @@ static struct regmap *gen_regmap(struct kunit *test,
190193 if (IS_ERR (ret )) {
191194 kfree (buf );
192195 kfree (* data );
196+ } else {
197+ kunit_add_action (test , regmap_exit_action , ret );
193198 }
194199
195200 return ret ;
@@ -226,8 +231,6 @@ static void basic_read_write(struct kunit *test)
226231
227232 /* If using a cache the cache satisfied the read */
228233 KUNIT_EXPECT_EQ (test , config .cache_type == REGCACHE_NONE , data -> read [0 ]);
229-
230- regmap_exit (map );
231234}
232235
233236static void bulk_write (struct kunit * test )
@@ -261,8 +264,6 @@ static void bulk_write(struct kunit *test)
261264 /* If using a cache the cache satisfied the read */
262265 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
263266 KUNIT_EXPECT_EQ (test , config .cache_type == REGCACHE_NONE , data -> read [i ]);
264-
265- regmap_exit (map );
266267}
267268
268269static void bulk_read (struct kunit * test )
@@ -292,8 +293,6 @@ static void bulk_read(struct kunit *test)
292293 /* If using a cache the cache satisfied the read */
293294 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
294295 KUNIT_EXPECT_EQ (test , config .cache_type == REGCACHE_NONE , data -> read [i ]);
295-
296- regmap_exit (map );
297296}
298297
299298static void write_readonly (struct kunit * test )
@@ -325,8 +324,6 @@ static void write_readonly(struct kunit *test)
325324 /* Did that match what we see on the device? */
326325 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
327326 KUNIT_EXPECT_EQ (test , i != 5 , data -> written [i ]);
328-
329- regmap_exit (map );
330327}
331328
332329static void read_writeonly (struct kunit * test )
@@ -363,8 +360,6 @@ static void read_writeonly(struct kunit *test)
363360
364361 /* Did we trigger a hardware access? */
365362 KUNIT_EXPECT_FALSE (test , data -> read [5 ]);
366-
367- regmap_exit (map );
368363}
369364
370365static void reg_defaults (struct kunit * test )
@@ -471,8 +466,6 @@ static void register_patch(struct kunit *test)
471466 break ;
472467 }
473468 }
474-
475- regmap_exit (map );
476469}
477470
478471static void stride (struct kunit * test )
@@ -512,8 +505,6 @@ static void stride(struct kunit *test)
512505 KUNIT_EXPECT_TRUE (test , data -> written [i ]);
513506 }
514507 }
515-
516- regmap_exit (map );
517508}
518509
519510static struct regmap_range_cfg test_range = {
@@ -612,8 +603,6 @@ static void basic_ranges(struct kunit *test)
612603 KUNIT_EXPECT_FALSE (test , data -> read [i ]);
613604 KUNIT_EXPECT_FALSE (test , data -> written [i ]);
614605 }
615-
616- regmap_exit (map );
617606}
618607
619608/* Try to stress dynamic creation of cache data structures */
@@ -665,8 +654,6 @@ static void stress_insert(struct kunit *test)
665654 KUNIT_EXPECT_EQ (test , rval , vals [i ]);
666655 KUNIT_EXPECT_EQ (test , config .cache_type == REGCACHE_NONE , data -> read [i ]);
667656 }
668-
669- regmap_exit (map );
670657}
671658
672659static void cache_bypass (struct kunit * test )
@@ -702,8 +689,6 @@ static void cache_bypass(struct kunit *test)
702689 regcache_cache_bypass (map , false);
703690 KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , param -> from_reg , & rval ));
704691 KUNIT_EXPECT_EQ (test , val , rval );
705-
706- regmap_exit (map );
707692}
708693
709694static void cache_sync_marked_dirty (struct kunit * test )
@@ -739,8 +724,6 @@ static void cache_sync_marked_dirty(struct kunit *test)
739724 KUNIT_EXPECT_MEMEQ (test , & data -> vals [param -> from_reg ], val , sizeof (val ));
740725 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
741726 KUNIT_EXPECT_EQ (test , true, data -> written [param -> from_reg + i ]);
742-
743- regmap_exit (map );
744727}
745728
746729static void cache_sync_after_cache_only (struct kunit * test )
@@ -790,8 +773,6 @@ static void cache_sync_after_cache_only(struct kunit *test)
790773 KUNIT_EXPECT_MEMEQ (test , & data -> vals [param -> from_reg ], val , sizeof (val ));
791774 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
792775 KUNIT_EXPECT_TRUE (test , data -> written [param -> from_reg + i ]);
793-
794- regmap_exit (map );
795776}
796777
797778static void cache_sync_defaults_marked_dirty (struct kunit * test )
@@ -841,8 +822,6 @@ static void cache_sync_defaults_marked_dirty(struct kunit *test)
841822 KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
842823 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
843824 KUNIT_EXPECT_FALSE (test , data -> written [param -> from_reg + i ]);
844-
845- regmap_exit (map );
846825}
847826
848827static void cache_sync_default_after_cache_only (struct kunit * test )
@@ -890,8 +869,6 @@ static void cache_sync_default_after_cache_only(struct kunit *test)
890869 KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
891870 KUNIT_EXPECT_TRUE (test , data -> written [param -> from_reg + 2 ]);
892871 KUNIT_EXPECT_EQ (test , data -> vals [param -> from_reg + 2 ], orig_val );
893-
894- regmap_exit (map );
895872}
896873
897874static void cache_sync_readonly (struct kunit * test )
@@ -930,8 +907,6 @@ static void cache_sync_readonly(struct kunit *test)
930907 /* Did that match what we see on the device? */
931908 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
932909 KUNIT_EXPECT_EQ (test , i != 5 , data -> written [param -> from_reg + i ]);
933-
934- regmap_exit (map );
935910}
936911
937912static void cache_sync_patch (struct kunit * test )
@@ -990,8 +965,6 @@ static void cache_sync_patch(struct kunit *test)
990965 break ;
991966 }
992967 }
993-
994- regmap_exit (map );
995968}
996969
997970static void cache_drop (struct kunit * test )
@@ -1032,8 +1005,6 @@ static void cache_drop(struct kunit *test)
10321005 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
10331006 KUNIT_EXPECT_EQ (test , data -> read [param -> from_reg + i ], i >= 3 && i <= 5 );
10341007 KUNIT_EXPECT_MEMEQ (test , & data -> vals [param -> from_reg ], rval , sizeof (rval ));
1035-
1036- regmap_exit (map );
10371008}
10381009
10391010static void cache_drop_all_and_sync_marked_dirty (struct kunit * test )
@@ -1075,8 +1046,6 @@ static void cache_drop_all_and_sync_marked_dirty(struct kunit *test)
10751046 KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
10761047 for (i = 0 ; i <= config .max_register ; i ++ )
10771048 KUNIT_EXPECT_FALSE (test , data -> written [i ]);
1078-
1079- regmap_exit (map );
10801049}
10811050
10821051static void cache_drop_all_and_sync_no_defaults (struct kunit * test )
@@ -1119,8 +1088,6 @@ static void cache_drop_all_and_sync_no_defaults(struct kunit *test)
11191088 KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
11201089 for (i = 0 ; i <= config .max_register ; i ++ )
11211090 KUNIT_EXPECT_FALSE (test , data -> written [i ]);
1122-
1123- regmap_exit (map );
11241091}
11251092
11261093static void cache_drop_all_and_sync_has_defaults (struct kunit * test )
@@ -1164,8 +1131,6 @@ static void cache_drop_all_and_sync_has_defaults(struct kunit *test)
11641131 KUNIT_EXPECT_EQ (test , 0 , regcache_sync (map ));
11651132 for (i = 0 ; i <= config .max_register ; i ++ )
11661133 KUNIT_EXPECT_FALSE (test , data -> written [i ]);
1167-
1168- regmap_exit (map );
11691134}
11701135
11711136static void cache_present (struct kunit * test )
@@ -1202,8 +1167,6 @@ static void cache_present(struct kunit *test)
12021167 /* Now everything should be cached */
12031168 for (i = 0 ; i < BLOCK_TEST_SIZE ; i ++ )
12041169 KUNIT_ASSERT_TRUE (test , regcache_reg_cached (map , param -> from_reg + i ));
1205-
1206- regmap_exit (map );
12071170}
12081171
12091172/* Check that caching the window register works with sync */
@@ -1350,6 +1313,8 @@ static struct regmap *gen_raw_regmap(struct kunit *test,
13501313 if (IS_ERR (ret )) {
13511314 kfree (buf );
13521315 kfree (* data );
1316+ } else {
1317+ kunit_add_action (test , regmap_exit_action , ret );
13531318 }
13541319
13551320 return ret ;
@@ -1375,8 +1340,6 @@ static void raw_read_defaults_single(struct kunit *test)
13751340 KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , i , & rval ));
13761341 KUNIT_EXPECT_EQ (test , config .reg_defaults [i ].def , rval );
13771342 }
1378-
1379- regmap_exit (map );
13801343}
13811344
13821345static void raw_read_defaults (struct kunit * test )
@@ -1414,7 +1377,6 @@ static void raw_read_defaults(struct kunit *test)
14141377 }
14151378
14161379 kfree (rval );
1417- regmap_exit (map );
14181380}
14191381
14201382static void raw_write_read_single (struct kunit * test )
@@ -1438,8 +1400,6 @@ static void raw_write_read_single(struct kunit *test)
14381400 KUNIT_EXPECT_EQ (test , 0 , regmap_write (map , 0 , val ));
14391401 KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , 0 , & rval ));
14401402 KUNIT_EXPECT_EQ (test , val , rval );
1441-
1442- regmap_exit (map );
14431403}
14441404
14451405static void raw_write (struct kunit * test )
@@ -1489,8 +1449,6 @@ static void raw_write(struct kunit *test)
14891449
14901450 /* The values should appear in the "hardware" */
14911451 KUNIT_EXPECT_MEMEQ (test , & hw_buf [2 ], val , sizeof (val ));
1492-
1493- regmap_exit (map );
14941452}
14951453
14961454static bool reg_zero (struct device * dev , unsigned int reg )
@@ -1548,8 +1506,6 @@ static void raw_noinc_write(struct kunit *test)
15481506 /* Make sure we didn't touch the register after the noinc register */
15491507 KUNIT_EXPECT_EQ (test , 0 , regmap_read (map , 1 , & val ));
15501508 KUNIT_ASSERT_EQ (test , val_test , val );
1551-
1552- regmap_exit (map );
15531509}
15541510
15551511static void raw_sync (struct kunit * test )
@@ -1625,8 +1581,6 @@ static void raw_sync(struct kunit *test)
16251581
16261582 /* The values should now appear in the "hardware" */
16271583 KUNIT_EXPECT_MEMEQ (test , & hw_buf [2 ], & val [0 ], sizeof (val ));
1628-
1629- regmap_exit (map );
16301584}
16311585
16321586static void raw_ranges (struct kunit * test )
@@ -1689,8 +1643,6 @@ static void raw_ranges(struct kunit *test)
16891643 KUNIT_EXPECT_FALSE (test , data -> read [i ]);
16901644 KUNIT_EXPECT_FALSE (test , data -> written [i ]);
16911645 }
1692-
1693- regmap_exit (map );
16941646}
16951647
16961648static struct kunit_case regmap_test_cases [] = {
0 commit comments