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