Skip to content

Commit a4375ee

Browse files
committed
tests: lib: devicetree: api: Add map property tests
Add tests for map property related macros Signed-off-by: TOKITA Hiroshi <[email protected]>
1 parent 382a702 commit a4375ee

File tree

4 files changed

+147
-0
lines changed

4 files changed

+147
-0
lines changed

dts/bindings/test/vnd,gpio-nexus.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Copyright (c) 2025, TOKITA Hiroshi
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
description: VND GPIO nexus
5+
6+
include: [gpio-nexus.yaml]
7+
8+
compatible: "vnd,gpio-nexus"

dts/bindings/test/vnd,intr-nexus.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Copyright (c) 2025, TOKITA Hiroshi
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
description: VND interrupt nexus
5+
6+
include: [interrupt-nexus.yaml]
7+
8+
compatible: "vnd,intr-nexus"

tests/lib/devicetree/api/app.overlay

+45
Original file line numberDiff line numberDiff line change
@@ -901,4 +901,49 @@
901901
compatible = "vnd,non-deprecated-label";
902902
label = "FOO";
903903
};
904+
905+
gpio-map-test {
906+
connector {
907+
compatible = "vnd,gpio-nexus";
908+
#gpio-cells = <2>;
909+
gpio-map = <1 2 &{/gpio-map-test/parent} 3
910+
4 5 &{/gpio-map-test/parent} 6>;
911+
gpio-map-mask = <0xffffffff 0xffffffc0>;
912+
gpio-map-pass-thru = <0x0 0x3f>;
913+
};
914+
parent {
915+
compatible = "gpio-dst";
916+
gpio-controller;
917+
#gpio-cells = <1>;
918+
};
919+
};
920+
921+
interrupt-map-test {
922+
#address-cells = <2>;
923+
#size-cells = <0>;
924+
925+
controller-0@0 {
926+
compatible = "vnd,cpu-intc";
927+
reg = <0x0 0x0>;
928+
#address-cells = <1>;
929+
#interrupt-cells = <1>;
930+
interrupt-controller;
931+
};
932+
controller-1@1 {
933+
compatible = "vnd,intc";
934+
reg = <0x0 0x1>;
935+
#address-cells = <2>;
936+
#interrupt-cells = <2>;
937+
interrupt-controller;
938+
};
939+
nexus {
940+
compatible = "vnd,intr-nexus";
941+
#interrupt-cells = <2>;
942+
interrupt-map = <
943+
0 0 1 2 &{/interrupt-map-test/controller-0@0} 3 4
944+
0 0 5 6 &{/interrupt-map-test/controller-1@1} 7 8 9 0
945+
0 1 9 8 &{/interrupt-map-test/controller-0@0} 7 6
946+
0 1 5 4 &{/interrupt-map-test/controller-1@1} 3 2 1 0>;
947+
};
948+
};
904949
};

tests/lib/devicetree/api/src/main.c

+86
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@
104104
#define TEST_PARTITION_1 DT_PATH(test, test_mtd_ffeeddcc, flash_20000000, partitions, partition_c0)
105105
#define TEST_PARTITION_2 DT_PATH(test, test_mtd_33221100, partitions, partition_6ff80)
106106

107+
#define TEST_GPIO_CONNECTOR DT_PATH(gpio_map_test, connector)
108+
#define TEST_INTERRUPT_NEXUS DT_PATH(interrupt_map_test, nexus)
109+
107110
#define ZEPHYR_USER DT_PATH(zephyr_user)
108111

109112
#define TA_HAS_COMPAT(compat) DT_NODE_HAS_COMPAT(TEST_ARRAYS, compat)
@@ -3670,4 +3673,87 @@ ZTEST(devicetree_api, test_interrupt_controller)
36703673
zassert_true(DT_SAME_NODE(DT_INST_IRQ_INTC(0), TEST_INTC), "");
36713674
}
36723675

3676+
#define INTERRUPT_NEXUS_CHECK_0(n, p, i, ...) \
3677+
zassert_equal(NUM_VA_ARGS(DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 4); \
3678+
zassert_equal(GET_ARG_N(1, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 0); \
3679+
zassert_equal(GET_ARG_N(2, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 0); \
3680+
zassert_equal(GET_ARG_N(3, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 1); \
3681+
zassert_equal(GET_ARG_N(4, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 2); \
3682+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 2); \
3683+
zassert_equal(GET_ARG_N(1, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 3); \
3684+
zassert_equal(GET_ARG_N(2, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 4); \
3685+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_ARG(n, p, i)), 1); \
3686+
zassert_str_equal(STRINGIFY(DT_MAP_PARENT_ARG(n, p, i)), \
3687+
"DT_N_S_interrupt_map_test_S_controller_0_0");
3688+
3689+
#define INTERRUPT_NEXUS_CHECK_1(n, p, i, ...) \
3690+
zassert_equal(NUM_VA_ARGS(DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 4); \
3691+
zassert_equal(GET_ARG_N(1, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 0); \
3692+
zassert_equal(GET_ARG_N(2, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 0); \
3693+
zassert_equal(GET_ARG_N(3, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 5); \
3694+
zassert_equal(GET_ARG_N(4, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 6); \
3695+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 4); \
3696+
zassert_equal(GET_ARG_N(1, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 7); \
3697+
zassert_equal(GET_ARG_N(2, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 8); \
3698+
zassert_equal(GET_ARG_N(3, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 9); \
3699+
zassert_equal(GET_ARG_N(4, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 0); \
3700+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_ARG(n, p, i)), 1); \
3701+
zassert_str_equal(STRINGIFY(DT_MAP_PARENT_ARG(n, p, i)), \
3702+
"DT_N_S_interrupt_map_test_S_controller_1_1");
3703+
3704+
#define INTERRUPT_NEXUS_CHECK_2(n, p, i, ...) \
3705+
zassert_equal(NUM_VA_ARGS(DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 4); \
3706+
zassert_equal(GET_ARG_N(1, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 0); \
3707+
zassert_equal(GET_ARG_N(2, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 1); \
3708+
zassert_equal(GET_ARG_N(3, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 9); \
3709+
zassert_equal(GET_ARG_N(4, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 8); \
3710+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 2); \
3711+
zassert_equal(GET_ARG_N(1, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 7); \
3712+
zassert_equal(GET_ARG_N(2, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 6); \
3713+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_ARG(n, p, i)), 1); \
3714+
zassert_str_equal(STRINGIFY(DT_MAP_PARENT_ARG(n, p, i)), \
3715+
"DT_N_S_interrupt_map_test_S_controller_0_0");
3716+
3717+
#define INTERRUPT_NEXUS_CHECK_3(n, p, i, ...) \
3718+
zassert_equal(NUM_VA_ARGS(DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 4); \
3719+
zassert_equal(GET_ARG_N(1, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 0); \
3720+
zassert_equal(GET_ARG_N(2, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 1); \
3721+
zassert_equal(GET_ARG_N(3, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 5); \
3722+
zassert_equal(GET_ARG_N(4, DT_MAP_CHILD_SPECIFIER_ARGS(n, p, i)), 4); \
3723+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 4); \
3724+
zassert_equal(GET_ARG_N(1, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 3); \
3725+
zassert_equal(GET_ARG_N(2, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 2); \
3726+
zassert_equal(GET_ARG_N(3, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 1); \
3727+
zassert_equal(GET_ARG_N(4, DT_MAP_PARENT_SPECIFIER_ARGS(n, p, i)), 0); \
3728+
zassert_str_equal(STRINGIFY(DT_MAP_PARENT_ARG(n, p, i)), \
3729+
"DT_N_S_interrupt_map_test_S_controller_1_1");
3730+
3731+
#define INTERRUPT_NEXUS_CHECK(...) \
3732+
UTIL_CAT(INTERRUPT_NEXUS_CHECK_, GET_ARG_N(3, __VA_ARGS__))(__VA_ARGS__)
3733+
3734+
ZTEST(devicetree_api, test_map)
3735+
{
3736+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map), 2);
3737+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, child_specifier_0), 1);
3738+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, child_specifier_1), 2);
3739+
zassert_str_equal(STRINGIFY(DT_PHANDLE_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0)),
3740+
"DT_N_S_gpio_map_test_S_parent");
3741+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, parent_specifier_0), 3);
3742+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, child_specifier_0), 4);
3743+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, child_specifier_1), 5);
3744+
zassert_str_equal(STRINGIFY(DT_PHANDLE_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1)),
3745+
"DT_N_S_gpio_map_test_S_parent");
3746+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, parent_specifier_0), 6);
3747+
3748+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map_mask), 2);
3749+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_mask, 0), 0xffffffff);
3750+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_mask, 1), 0xffffffc0);
3751+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map_pass_thru), 2);
3752+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_pass_thru, 0), 0x0);
3753+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_pass_thru, 1), 0x3f);
3754+
3755+
DT_FOREACH_PROP_ELEM_VARGS(TEST_INTERRUPT_NEXUS, interrupt_map, INTERRUPT_NEXUS_CHECK,
3756+
9999);
3757+
}
3758+
36733759
ZTEST_SUITE(devicetree_api, NULL, NULL, NULL, NULL, NULL);

0 commit comments

Comments
 (0)