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