xref: /openbmc/u-boot/test/dm/regmap.c (revision 8c1de5e08b845eb71c9a247d16bc81ebdab0598d)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2015 Google, Inc
4  */
5 
6 #include <common.h>
7 #include <dm.h>
8 #include <mapmem.h>
9 #include <regmap.h>
10 #include <syscon.h>
11 #include <asm/test.h>
12 #include <dm/test.h>
13 #include <test/ut.h>
14 
15 /* Base test of register maps */
16 static int dm_test_regmap_base(struct unit_test_state *uts)
17 {
18 	struct udevice *dev;
19 	struct regmap *map;
20 	int i;
21 
22 	ut_assertok(uclass_get_device(UCLASS_SYSCON, 0, &dev));
23 	map = syscon_get_regmap(dev);
24 	ut_assertok_ptr(map);
25 	ut_asserteq(1, map->range_count);
26 	ut_asserteq(0x10, map->ranges[0].start);
27 	ut_asserteq(4, map->ranges[0].size);
28 	ut_asserteq(0x10, map_to_sysmem(regmap_get_range(map, 0)));
29 
30 	ut_assertok(uclass_get_device(UCLASS_SYSCON, 1, &dev));
31 	map = syscon_get_regmap(dev);
32 	ut_assertok_ptr(map);
33 	ut_asserteq(4, map->range_count);
34 	ut_asserteq(0x20, map->ranges[0].start);
35 	for (i = 0; i < 4; i++) {
36 		const unsigned long addr = 0x20 + 8 * i;
37 
38 		ut_asserteq(addr, map->ranges[i].start);
39 		ut_asserteq(5 + i, map->ranges[i].size);
40 		ut_asserteq(addr, map_to_sysmem(regmap_get_range(map, i)));
41 	}
42 
43 	/* Check that we can't pretend a different device is a syscon */
44 	ut_assertok(uclass_get_device(UCLASS_I2C, 0, &dev));
45 	map = syscon_get_regmap(dev);
46 	ut_asserteq_ptr(ERR_PTR(-ENOEXEC), map);
47 
48 	return 0;
49 }
50 DM_TEST(dm_test_regmap_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
51 
52 /* Test we can access a regmap through syscon */
53 static int dm_test_regmap_syscon(struct unit_test_state *uts)
54 {
55 	struct regmap *map;
56 
57 	map = syscon_get_regmap_by_driver_data(SYSCON0);
58 	ut_assertok_ptr(map);
59 	ut_asserteq(1, map->range_count);
60 
61 	map = syscon_get_regmap_by_driver_data(SYSCON1);
62 	ut_assertok_ptr(map);
63 	ut_asserteq(4, map->range_count);
64 
65 	map = syscon_get_regmap_by_driver_data(SYSCON_COUNT);
66 	ut_asserteq_ptr(ERR_PTR(-ENODEV), map);
67 
68 	ut_asserteq(0x10, map_to_sysmem(syscon_get_first_range(SYSCON0)));
69 	ut_asserteq(0x20, map_to_sysmem(syscon_get_first_range(SYSCON1)));
70 	ut_asserteq_ptr(ERR_PTR(-ENODEV),
71 			syscon_get_first_range(SYSCON_COUNT));
72 
73 	return 0;
74 }
75 
76 DM_TEST(dm_test_regmap_syscon, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
77