Skip to content

Commit 148b495

Browse files
committed
tests: drivers: pinctrl: gd32: add DT AFIO parse test
Add a test to check that DT information for the AFIO model is extracted correctly. Signed-off-by: Gerard Marull-Paretas <[email protected]>
1 parent b74a907 commit 148b495

File tree

4 files changed

+214
-0
lines changed

4 files changed

+214
-0
lines changed

tests/drivers/pinctrl/gd32/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ project(pinctrl_gd32)
99
target_sources(app PRIVATE ../common/test_device.c)
1010
if(CONFIG_PINCTRL_GD32_AF)
1111
target_sources(app PRIVATE src/main_af.c)
12+
elseif(CONFIG_PINCTRL_GD32_AFIO)
13+
target_sources(app PRIVATE src/main_afio.c)
1214
endif()
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Copyright (c) 2021 Teslabs Engineering S.L.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
#define GD32_TEST_DEVICE_RMP GD32_REMAP(0, 0, 0x1U, 1)
7+
8+
/ {
9+
test_device: test_device {
10+
compatible = "vnd,pinctrl-device";
11+
pinctrl-0 = <&test_device_default>;
12+
pinctrl-names = "default";
13+
};
14+
};
15+
16+
&pinctrl {
17+
test_device_default: test_device_default {
18+
/* Note: the groups are just meant for testing if properties and
19+
pins are parsed correctly, but do not necessarily represent a
20+
feasible combination */
21+
pins1 {
22+
pinmux = <GD32_PINMUX_AFIO('A', 0, ANALOG, NORMP)>,
23+
<GD32_PINMUX_AFIO('B', 1, ALTERNATE, NORMP)>,
24+
<GD32_PINMUX_AFIO('C', 2, GPIO_IN, NORMP)>;
25+
};
26+
pins2 {
27+
pinmux = <GD32_PINMUX_AFIO('A', 3, GPIO_IN, TEST_DEVICE_RMP)>,
28+
<GD32_PINMUX_AFIO('B', 4, ALTERNATE, TEST_DEVICE_RMP)>;
29+
};
30+
pins3 {
31+
pinmux = <GD32_PINMUX_AFIO('C', 5, GPIO_IN, NORMP)>;
32+
drive-push-pull;
33+
};
34+
pins4 {
35+
pinmux = <GD32_PINMUX_AFIO('A', 6, GPIO_IN, NORMP)>;
36+
drive-open-drain;
37+
};
38+
pins5 {
39+
pinmux = <GD32_PINMUX_AFIO('B', 7, GPIO_IN, NORMP)>;
40+
bias-disable;
41+
};
42+
pins6 {
43+
pinmux = <GD32_PINMUX_AFIO('C', 8, GPIO_IN, NORMP)>;
44+
bias-pull-up;
45+
};
46+
pins7 {
47+
pinmux = <GD32_PINMUX_AFIO('A', 9, GPIO_IN, NORMP)>;
48+
bias-pull-down;
49+
};
50+
pins8 {
51+
pinmux = <GD32_PINMUX_AFIO('B', 10, ALTERNATE, NORMP)>;
52+
slew-rate = "max-speed-2mhz";
53+
};
54+
pins9 {
55+
pinmux = <GD32_PINMUX_AFIO('C', 11, ALTERNATE, NORMP)>;
56+
slew-rate = "max-speed-10mhz";
57+
};
58+
pins10 {
59+
pinmux = <GD32_PINMUX_AFIO('A', 12, ALTERNATE, NORMP)>;
60+
slew-rate = "max-speed-50mhz";
61+
};
62+
pins11 {
63+
pinmux = <GD32_PINMUX_AFIO('B', 13, ALTERNATE, NORMP)>;
64+
slew-rate = "max-speed-highest";
65+
};
66+
};
67+
};
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
/*
2+
* Copyright (c) 2021 Teslabs Engineering S.L.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
#include <drivers/pinctrl.h>
7+
#include <ztest.h>
8+
9+
/* pin configuration for test device */
10+
#define TEST_DEVICE DT_NODELABEL(test_device)
11+
PINCTRL_DT_DEV_CONFIG_DECLARE(TEST_DEVICE);
12+
static const struct pinctrl_dev_config *pcfg = PINCTRL_DT_DEV_CONFIG_GET(TEST_DEVICE);
13+
14+
static void test_dt_extract(void)
15+
{
16+
const struct pinctrl_state *scfg;
17+
pinctrl_soc_pin_t pin;
18+
19+
zassert_equal(pcfg->state_cnt, 1U, NULL);
20+
21+
scfg = &pcfg->states[0];
22+
23+
zassert_equal(scfg->id, PINCTRL_STATE_DEFAULT, NULL);
24+
zassert_equal(scfg->pin_cnt, 14U, NULL);
25+
26+
pin = scfg->pins[0];
27+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
28+
zassert_equal(GD32_PIN_GET(pin), 0, NULL);
29+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_ANALOG, NULL);
30+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
31+
32+
pin = scfg->pins[1];
33+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
34+
zassert_equal(GD32_PIN_GET(pin), 1, NULL);
35+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_ALTERNATE, NULL);
36+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
37+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
38+
39+
pin = scfg->pins[2];
40+
zassert_equal(GD32_PORT_GET(pin), 2, NULL);
41+
zassert_equal(GD32_PIN_GET(pin), 2, NULL);
42+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_GPIO_IN, NULL);
43+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
44+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
45+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
46+
47+
pin = scfg->pins[3];
48+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
49+
zassert_equal(GD32_PIN_GET(pin), 3, NULL);
50+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_GPIO_IN, NULL);
51+
zassert_equal(GD32_REMAP_REG_GET(GD32_REMAP_GET(pin)), 0, NULL);
52+
zassert_equal(GD32_REMAP_POS_GET(GD32_REMAP_GET(pin)), 0, NULL);
53+
zassert_equal(GD32_REMAP_MSK_GET(GD32_REMAP_GET(pin)), 0x1, NULL);
54+
zassert_equal(GD32_REMAP_VAL_GET(GD32_REMAP_GET(pin)), 1, NULL);
55+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
56+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
57+
58+
pin = scfg->pins[4];
59+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
60+
zassert_equal(GD32_PIN_GET(pin), 4, NULL);
61+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_ALTERNATE, NULL);
62+
zassert_equal(GD32_REMAP_REG_GET(GD32_REMAP_GET(pin)), 0, NULL);
63+
zassert_equal(GD32_REMAP_POS_GET(GD32_REMAP_GET(pin)), 0, NULL);
64+
zassert_equal(GD32_REMAP_MSK_GET(GD32_REMAP_GET(pin)), 0x1, NULL);
65+
zassert_equal(GD32_REMAP_VAL_GET(GD32_REMAP_GET(pin)), 1, NULL);
66+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
67+
68+
pin = scfg->pins[5];
69+
zassert_equal(GD32_PORT_GET(pin), 2, NULL);
70+
zassert_equal(GD32_PIN_GET(pin), 5, NULL);
71+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_GPIO_IN, NULL);
72+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
73+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
74+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
75+
76+
pin = scfg->pins[6];
77+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
78+
zassert_equal(GD32_PIN_GET(pin), 6, NULL);
79+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_GPIO_IN, NULL);
80+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
81+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
82+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_OD, NULL);
83+
84+
pin = scfg->pins[7];
85+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
86+
zassert_equal(GD32_PIN_GET(pin), 7, NULL);
87+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_GPIO_IN, NULL);
88+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
89+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_NONE, NULL);
90+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
91+
92+
pin = scfg->pins[8];
93+
zassert_equal(GD32_PORT_GET(pin), 2, NULL);
94+
zassert_equal(GD32_PIN_GET(pin), 8, NULL);
95+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_GPIO_IN, NULL);
96+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
97+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_PULLUP, NULL);
98+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
99+
100+
pin = scfg->pins[9];
101+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
102+
zassert_equal(GD32_PIN_GET(pin), 9, NULL);
103+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_GPIO_IN, NULL);
104+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
105+
zassert_equal(GD32_PUPD_GET(pin), GD32_PUPD_PULLDOWN, NULL);
106+
zassert_equal(GD32_OTYPE_GET(pin), GD32_OTYPE_PP, NULL);
107+
108+
pin = scfg->pins[10];
109+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
110+
zassert_equal(GD32_PIN_GET(pin), 10, NULL);
111+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_ALTERNATE, NULL);
112+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
113+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_2MHZ, NULL);
114+
115+
pin = scfg->pins[11];
116+
zassert_equal(GD32_PORT_GET(pin), 2, NULL);
117+
zassert_equal(GD32_PIN_GET(pin), 11, NULL);
118+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_ALTERNATE, NULL);
119+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
120+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_10MHZ, NULL);
121+
122+
pin = scfg->pins[12];
123+
zassert_equal(GD32_PORT_GET(pin), 0, NULL);
124+
zassert_equal(GD32_PIN_GET(pin), 12, NULL);
125+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_ALTERNATE, NULL);
126+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
127+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_50MHZ, NULL);
128+
129+
pin = scfg->pins[13];
130+
zassert_equal(GD32_PORT_GET(pin), 1, NULL);
131+
zassert_equal(GD32_PIN_GET(pin), 13, NULL);
132+
zassert_equal(GD32_MODE_GET(pin), GD32_MODE_ALTERNATE, NULL);
133+
zassert_equal(GD32_REMAP_GET(pin), GD32_NORMP, NULL);
134+
zassert_equal(GD32_OSPEED_GET(pin), GD32_OSPEED_MAX, NULL);
135+
}
136+
137+
void test_main(void)
138+
{
139+
ztest_test_suite(pinctrl_gd32,
140+
ztest_unit_test(test_dt_extract));
141+
ztest_run_test_suite(pinctrl_gd32);
142+
}

tests/drivers/pinctrl/gd32/testcase.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,6 @@ tests:
55
drivers.pinctrl.gd32_af:
66
tags: drivers pinctrl
77
platform_allow: gd32f450i_eval
8+
drivers.pinctrl.gd32_afio:
9+
tags: drivers pinctrl
10+
platform_allow: gd32f403z_eval

0 commit comments

Comments
 (0)