1 /* Copyright 2021 Google LLC
2 * SPDX-License-Identifier: Apache-2.0
3 */
4
5 #include <zephyr/device.h>
6 #include <zephyr/devicetree.h>
7 #include <zephyr/drivers/syscon.h>
8 #include <zephyr/ztest.h>
9 #include <zephyr/linker/devicetree_regions.h>
10
11 #define RES_SECT LINKER_DT_NODE_REGION_NAME(DT_NODELABEL(res))
12
13 uint8_t var_in_res0[DT_REG_SIZE(DT_NODELABEL(syscon))] __attribute((__section__(RES_SECT)));
14
ZTEST(syscon,test_size)15 ZTEST(syscon, test_size)
16 {
17 const struct device *const dev = DEVICE_DT_GET(DT_NODELABEL(syscon));
18 const size_t expected_size = DT_REG_SIZE(DT_NODELABEL(syscon));
19 size_t size;
20
21 zassert_ok(syscon_get_size(dev, &size));
22 zassert_equal(size, expected_size, "size(%zu) != expected_size(%zu)", size,
23 expected_size);
24 }
25
ZTEST(syscon,test_out_of_bounds)26 ZTEST(syscon, test_out_of_bounds)
27 {
28 const struct device *const dev = DEVICE_DT_GET(DT_NODELABEL(syscon));
29 uint32_t val;
30
31 zassert_equal(syscon_read_reg(dev, DT_REG_SIZE(DT_NODELABEL(syscon)), &val), -EINVAL);
32 zassert_equal(syscon_write_reg(dev, DT_REG_SIZE(DT_NODELABEL(syscon)), val), -EINVAL);
33 }
34
ZTEST(syscon,test_read)35 ZTEST(syscon, test_read)
36 {
37 const struct device *const dev = DEVICE_DT_GET(DT_NODELABEL(syscon));
38 uintptr_t base_addr;
39 uint32_t val;
40
41 zassert_ok(syscon_get_base(dev, &base_addr));
42 for (size_t i = 0; i < ARRAY_SIZE(var_in_res0); ++i) {
43 ((uint8_t *)base_addr)[i] = i;
44 zassert_ok(syscon_read_reg(dev, i, &val));
45 zassert_equal(i, val);
46 }
47 }
48
ZTEST(syscon,test_write)49 ZTEST(syscon, test_write)
50 {
51 const struct device *const dev = DEVICE_DT_GET(DT_NODELABEL(syscon));
52 uintptr_t base_addr;
53
54 zassert_ok(syscon_get_base(dev, &base_addr));
55 for (uint32_t i = 0; i < ARRAY_SIZE(var_in_res0); ++i) {
56 zassert_ok(syscon_write_reg(dev, i, i));
57 zassert_equal(((uint8_t *)base_addr)[i], i);
58 }
59 }
60
61 ZTEST_SUITE(syscon, NULL, NULL, NULL, NULL, NULL);
62