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