1 /*
2  * Copyright (c) 2023 MUNIC SA
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 
8 #include <zephyr/ztest.h>
9 #include <zephyr/kernel.h>
10 #include <zephyr/device.h>
11 #include <zephyr/devicetree.h>
12 
13 #define TEST_GPIO_1 DT_NODELABEL(test_gpio_1)
14 #define TEST_GPIO_2 DT_NODELABEL(test_gpio_2)
15 #define TEST_GPIO_3 DT_NODELABEL(test_gpio_3)
16 #define TEST_GPIO_4 DT_NODELABEL(test_gpio_4)
17 #define TEST_GPIO_5 DT_NODELABEL(test_gpio_5)
18 #define TEST_GPIO_6 DT_NODELABEL(test_gpio_6)
19 
20 #define DT_DRV_COMPAT vnd_gpio_device
21 
ZTEST(gpio_reserved_ranges,test_path_props)22 ZTEST(gpio_reserved_ranges, test_path_props)
23 {
24 	zassert_true(DT_NODE_HAS_PROP(TEST_GPIO_1, gpio_reserved_ranges), "");
25 	zassert_true(DT_NODE_HAS_PROP(TEST_GPIO_2, gpio_reserved_ranges), "");
26 	zassert_true(DT_NODE_HAS_PROP(TEST_GPIO_3, gpio_reserved_ranges), "");
27 	zassert_true(DT_NODE_HAS_PROP(TEST_GPIO_4, gpio_reserved_ranges), "");
28 	zassert_true(DT_NODE_HAS_PROP(TEST_GPIO_5, gpio_reserved_ranges), "");
29 	zassert_false(DT_NODE_HAS_PROP(TEST_GPIO_6, gpio_reserved_ranges), "");
30 }
31 
ZTEST(gpio_reserved_ranges,test_has_status)32 ZTEST(gpio_reserved_ranges, test_has_status)
33 {
34 	zassert_equal(DT_NODE_HAS_STATUS_OKAY(TEST_GPIO_1), 1, "");
35 	zassert_equal(DT_NODE_HAS_STATUS_OKAY(TEST_GPIO_2), 1, "");
36 	zassert_equal(DT_NODE_HAS_STATUS_OKAY(TEST_GPIO_3), 1, "");
37 	zassert_equal(DT_NODE_HAS_STATUS_OKAY(TEST_GPIO_4), 1, "");
38 	zassert_equal(DT_NODE_HAS_STATUS_OKAY(TEST_GPIO_5), 1, "");
39 	zassert_equal(DT_NODE_HAS_STATUS_OKAY(TEST_GPIO_6), 1, "");
40 }
41 
ZTEST(gpio_reserved_ranges,test_reserved_ranges)42 ZTEST(gpio_reserved_ranges, test_reserved_ranges)
43 {
44 	/* GPIO_DT_INST_RESERVED_RANGES_NGPIOS */
45 	zassert_equal(GPIO_DT_RESERVED_RANGES_NGPIOS(TEST_GPIO_1, 32),
46 			0xdeadbeef, "");
47 	zassert_equal(GPIO_DT_RESERVED_RANGES_NGPIOS(TEST_GPIO_2, 32),
48 			0x7fffbeff, "");
49 	zassert_equal(GPIO_DT_RESERVED_RANGES_NGPIOS(TEST_GPIO_3, 18),
50 			0xfffc0418, "");
51 	zassert_equal(GPIO_DT_RESERVED_RANGES_NGPIOS(TEST_GPIO_4, 16),
52 			0xfffffff0, "");
53 	zassert_equal(GPIO_DT_RESERVED_RANGES_NGPIOS(TEST_GPIO_5, 0),
54 			0xffffffff, "");
55 	zassert_equal(GPIO_DT_RESERVED_RANGES_NGPIOS(TEST_GPIO_6, 32),
56 			0, "");
57 
58 	/* GPIO_DT_INST_RESERVED_RANGES_NGPIOS */
59 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES_NGPIOS(0, 32), 0xdeadbeef,
60 			"");
61 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES_NGPIOS(1, 32), 0x7fffbeff,
62 			"");
63 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES_NGPIOS(2, 18), 0xfffc0418,
64 			"");
65 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES_NGPIOS(3, 16), 0xfffffff0,
66 			"");
67 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES_NGPIOS(4, 0), 0xffffffff,
68 			"");
69 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES_NGPIOS(5, 32), 0, "");
70 
71 	/* GPIO_DT_RESERVED_RANGES */
72 	zassert_equal(GPIO_DT_RESERVED_RANGES(TEST_GPIO_1), 0xdeadbeef, "");
73 	zassert_equal(GPIO_DT_RESERVED_RANGES(TEST_GPIO_2), 0x7fffbeff, "");
74 	zassert_equal(GPIO_DT_RESERVED_RANGES(TEST_GPIO_3), 0xfffc0418, "");
75 	zassert_equal(GPIO_DT_RESERVED_RANGES(TEST_GPIO_4), 0xfffffff0, "");
76 	zassert_equal(GPIO_DT_RESERVED_RANGES(TEST_GPIO_5), 0xffffffff, "");
77 	zassert_equal(GPIO_DT_RESERVED_RANGES(TEST_GPIO_6), 0x0, "");
78 
79 	/* GPIO_DT_INST_RESERVED_RANGES */
80 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES(0), 0xdeadbeef, "");
81 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES(1), 0x7fffbeff, "");
82 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES(2), 0xfffc0418, "");
83 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES(3), 0xfffffff0, "");
84 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES(4), 0xffffffff, "");
85 	zassert_equal(GPIO_DT_INST_RESERVED_RANGES(5), 0x0, "");
86 }
87 
ZTEST(gpio_reserved_ranges,test_port_pin_mask_exc)88 ZTEST(gpio_reserved_ranges, test_port_pin_mask_exc)
89 {
90 	/* GPIO_DT_PORT_PIN_MASK_NGPIOS_EXC */
91 	zassert_equal(GPIO_DT_PORT_PIN_MASK_NGPIOS_EXC(TEST_GPIO_1, 32),
92 			0x21524110, "");
93 	zassert_equal(GPIO_DT_PORT_PIN_MASK_NGPIOS_EXC(TEST_GPIO_2, 32),
94 			0x80004100, "");
95 	zassert_equal(GPIO_DT_PORT_PIN_MASK_NGPIOS_EXC(TEST_GPIO_3, 18),
96 			0x0003fbe7, "");
97 	zassert_equal(GPIO_DT_PORT_PIN_MASK_NGPIOS_EXC(TEST_GPIO_4, 16),
98 			0x0000000f, "");
99 	zassert_equal(GPIO_DT_PORT_PIN_MASK_NGPIOS_EXC(TEST_GPIO_5, 0),
100 			0x00000000, "");
101 	zassert_equal(GPIO_DT_PORT_PIN_MASK_NGPIOS_EXC(TEST_GPIO_6, 32),
102 			0xffffffff, "");
103 
104 	/* GPIO_DT_INST_PORT_PIN_MASK_NGPIOS_EXC */
105 	zassert_equal(GPIO_DT_INST_PORT_PIN_MASK_NGPIOS_EXC(0, 32), 0x21524110,
106 			"");
107 	zassert_equal(GPIO_DT_INST_PORT_PIN_MASK_NGPIOS_EXC(1, 32), 0x80004100,
108 			"");
109 	zassert_equal(GPIO_DT_INST_PORT_PIN_MASK_NGPIOS_EXC(2, 18), 0x0003fbe7,
110 			"");
111 	zassert_equal(GPIO_DT_INST_PORT_PIN_MASK_NGPIOS_EXC(3, 16), 0x0000000f,
112 			"");
113 	zassert_equal(GPIO_DT_INST_PORT_PIN_MASK_NGPIOS_EXC(4, 0), 0x00000000,
114 			"");
115 	zassert_equal(GPIO_DT_INST_PORT_PIN_MASK_NGPIOS_EXC(5, 16), 0x0000ffff,
116 			"");
117 
118 	/* GPIO_PORT_PIN_MASK_FROM_DT_NODE */
119 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_NODE(TEST_GPIO_1),
120 			0x21524110, "");
121 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_NODE(TEST_GPIO_2),
122 			0x80004100, "");
123 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_NODE(TEST_GPIO_3),
124 			0x0003fbe7, "");
125 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_NODE(TEST_GPIO_4),
126 			0x0000000f, "");
127 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_NODE(TEST_GPIO_5),
128 			0x00000000, "");
129 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_NODE(TEST_GPIO_6),
130 			0xffffffff, "");
131 
132 	/* GPIO_PORT_PIN_MASK_FROM_DT_INST */
133 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_INST(0), 0x21524110, "");
134 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_INST(1), 0x80004100, "");
135 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_INST(2), 0x0003fbe7, "");
136 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_INST(3), 0x0000000f, "");
137 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_INST(4), 0x00000000, "");
138 	zassert_equal(GPIO_PORT_PIN_MASK_FROM_DT_INST(5), 0xffffffff, "");
139 }
140 
141 /* Test GPIO port configuration */
142 ZTEST_SUITE(gpio_reserved_ranges, NULL, NULL, NULL, NULL, NULL);
143