Skip to content

Commit 6974b3c

Browse files
committed
tests: lib: devicetree: api: Add map property tests
Add tests for map property related macros. Add `native_sim/native/64` to allowed platforms. Signed-off-by: TOKITA Hiroshi <[email protected]>
1 parent 0da9709 commit 6974b3c

File tree

5 files changed

+209
-0
lines changed

5 files changed

+209
-0
lines changed
Lines changed: 8 additions & 0 deletions
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"
Lines changed: 8 additions & 0 deletions
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

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,4 +946,56 @@
946946
compatible = "vnd,non-deprecated-label";
947947
label = "FOO";
948948
};
949+
950+
gpio-map-test {
951+
connector {
952+
compatible = "vnd,gpio-nexus";
953+
#gpio-cells = <2>;
954+
gpio-map = <1 2 &{/gpio-map-test/parent} 3
955+
4 5 &{/gpio-map-test/parent} 6>;
956+
gpio-map-mask = <0xffffffff 0xffffffc0>;
957+
gpio-map-pass-thru = <0x0 0x3f>;
958+
};
959+
parent {
960+
compatible = "gpio-dst";
961+
gpio-controller;
962+
#gpio-cells = <1>;
963+
};
964+
};
965+
966+
interrupt-map-test {
967+
#address-cells = <2>;
968+
#size-cells = <0>;
969+
970+
controller-0@0 {
971+
compatible = "vnd,cpu-intc";
972+
reg = <0x0 0x0>;
973+
#address-cells = <1>;
974+
#interrupt-cells = <1>;
975+
interrupt-controller;
976+
};
977+
controller-1@1 {
978+
compatible = "vnd,intc";
979+
reg = <0x0 0x1>;
980+
#address-cells = <2>;
981+
#interrupt-cells = <2>;
982+
interrupt-controller;
983+
};
984+
nexus {
985+
compatible = "vnd,intr-nexus";
986+
#address-cells = <2>;
987+
#interrupt-cells = <2>;
988+
interrupt-map = <
989+
0 0 1 2 &{/interrupt-map-test/controller-0@0} 3 4
990+
0 0 5 6 &{/interrupt-map-test/controller-1@1} 7 8 9 0
991+
0 1 9 8 &{/interrupt-map-test/controller-0@0} 7 6
992+
0 1 5 4 &{/interrupt-map-test/controller-1@1} 3 2 1 0>;
993+
};
994+
empty {
995+
compatible = "vnd,intr-nexus";
996+
#address-cells = <2>;
997+
#interrupt-cells = <2>;
998+
interrupt-map = <>;
999+
};
1000+
};
9491001
};

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

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@
112112
#define TEST_SUBPARTITION_1 DT_PATH(test, test_mtd_ffeeddcc, flash_20000000, partitions, \
113113
partition_100, partition_40)
114114

115+
#define TEST_GPIO_CONNECTOR DT_PATH(gpio_map_test, connector)
116+
#define TEST_INTERRUPT_NEXUS DT_PATH(interrupt_map_test, nexus)
117+
#define TEST_INTERRUPT_NEXUS_EMPTY DT_PATH(interrupt_map_test, empty)
118+
115119
#define ZEPHYR_USER DT_PATH(zephyr_user)
116120

117121
#define TA_HAS_COMPAT(compat) DT_NODE_HAS_COMPAT(TEST_ARRAYS, compat)
@@ -3890,4 +3894,140 @@ ZTEST(devicetree_api, test_nvmem_devictree_inst)
38903894
"/test/test-nvmem-provider");
38913895
}
38923896

3897+
#define INTERRUPT_NEXUS_CHECK_0(n, p, i, ...) \
3898+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_LEN(n, p, i), 2); \
3899+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_BY_IDX(n, p, i, 0), 0); \
3900+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_BY_IDX(n, p, i, 1), 0); \
3901+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_LEN(n, p, i), 2); \
3902+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(n, p, i, 0), 1); \
3903+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(n, p, i, 1), 2); \
3904+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_LEN(n, p, i), 1); \
3905+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_BY_IDX(n, p, i, 0), 3); \
3906+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_LEN(n, p, i), 1); \
3907+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(n, p, i, 0), 4); \
3908+
zassert_str_equal(STRINGIFY(DT_MAP_ENTRY_PARENT(n, p)), \
3909+
"DT_N_S_interrupt_map_test_S_controller_0_0");
3910+
3911+
#define INTERRUPT_NEXUS_CHECK_1(n, p, i, ...) \
3912+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_LEN(n, p, i), 2); \
3913+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS(n, p, i), 0); \
3914+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_BY_IDX(n, p, i, 1), 0); \
3915+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_LEN(n, p, i), 2); \
3916+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER(n, p, i), 5); \
3917+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(n, p, i, 1), 6); \
3918+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_LEN(n, p, i), 2); \
3919+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS(n, p, i), 7); \
3920+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_BY_IDX(n, p, i, 1), 8); \
3921+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_LEN(n, p, i), 2); \
3922+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER(n, p, i), 9); \
3923+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(n, p, i, 1), 0); \
3924+
zassert_str_equal(STRINGIFY(DT_MAP_ENTRY_PARENT_BY_IDX(n, p, i)), \
3925+
"DT_N_S_interrupt_map_test_S_controller_1_1");
3926+
3927+
#define INTERRUPT_NEXUS_CHECK_2(n, p, i, ...) \
3928+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_LEN(n, p, i), 2); \
3929+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_BY_IDX(n, p, i, 0), 0); \
3930+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_BY_IDX(n, p, i, 1), 1); \
3931+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_LEN(n, p, i), 2); \
3932+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(n, p, i, 0), 9); \
3933+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(n, p, i, 1), 8); \
3934+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_LEN(n, p, i), 1); \
3935+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_BY_IDX(n, p, i, 0), 7); \
3936+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_LEN(n, p, i), 1); \
3937+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(n, p, i, 0), 6); \
3938+
zassert_str_equal(STRINGIFY(DT_MAP_ENTRY_PARENT_BY_IDX(n, p, i)), \
3939+
"DT_N_S_interrupt_map_test_S_controller_0_0");
3940+
3941+
#define INTERRUPT_NEXUS_CHECK_3(n, p, i, ...) \
3942+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_LEN(n, p, i), 2); \
3943+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_BY_IDX(n, p, i, 0), 0); \
3944+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_BY_IDX(n, p, i, 1), 1); \
3945+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_LEN(n, p, i), 2); \
3946+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(n, p, i, 0), 5); \
3947+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(n, p, i, 1), 4); \
3948+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_LEN(n, p, i), 2); \
3949+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_BY_IDX(n, p, i, 0), 3); \
3950+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_BY_IDX(n, p, i, 1), 2); \
3951+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_LEN(n, p, i), 2); \
3952+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(n, p, i, 0), 1); \
3953+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(n, p, i, 1), 0); \
3954+
zassert_str_equal(STRINGIFY(DT_MAP_ENTRY_PARENT_BY_IDX(n, p, i)), \
3955+
"DT_N_S_interrupt_map_test_S_controller_1_1");
3956+
3957+
#define INTERRUPT_NEXUS_CHECK(n, p, i) UTIL_CAT(INTERRUPT_NEXUS_CHECK_, i)(n, p, i)
3958+
#define INTERRUPT_NEXUS_CHECK_VARGS(n, p, i, ...) UTIL_CAT(INTERRUPT_NEXUS_CHECK_, i)(n, p, i)
3959+
3960+
#define EMPTY_MAP_SHOULD_NOT_RUN(...) zassert_unreachable("map should be empty")
3961+
3962+
ZTEST(devicetree_api, test_map)
3963+
{
3964+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map_mask), 2);
3965+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_mask, 0), 0xffffffff);
3966+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_mask, 1), 0xffffffc0);
3967+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map_pass_thru), 2);
3968+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_pass_thru, 0), 0x0);
3969+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_pass_thru, 1), 0x3f);
3970+
3971+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map), 2);
3972+
3973+
zassert_equal(DT_MAP_ENTRY_CHILD_ADDRESS_LEN(TEST_GPIO_CONNECTOR, gpio_map, 0), 0);
3974+
zassert_equal(DT_MAP_ENTRY_PARENT_ADDRESS_LEN(TEST_GPIO_CONNECTOR, gpio_map, 0), 0);
3975+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_LEN(TEST_GPIO_CONNECTOR, gpio_map, 0), 2);
3976+
zassert_equal(DT_MAP_ENTRY_HAS_CHILD_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, 1),
3977+
1);
3978+
zassert_equal(DT_MAP_ENTRY_HAS_CHILD_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, 2),
3979+
0);
3980+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, 0), 1);
3981+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, 1), 2);
3982+
3983+
zassert_str_equal(STRINGIFY(DT_MAP_ENTRY_PARENT_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0)),
3984+
"DT_N_S_gpio_map_test_S_parent");
3985+
3986+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_LEN(TEST_GPIO_CONNECTOR, gpio_map, 1), 1);
3987+
zassert_equal(DT_MAP_ENTRY_HAS_PARENT_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, 0),
3988+
1);
3989+
zassert_equal(DT_MAP_ENTRY_HAS_PARENT_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, 1),
3990+
0);
3991+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, 0), 3);
3992+
3993+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_LEN(TEST_GPIO_CONNECTOR, gpio_map, 1), 2);
3994+
zassert_equal(DT_MAP_ENTRY_HAS_CHILD_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, 1),
3995+
1);
3996+
zassert_equal(DT_MAP_ENTRY_HAS_CHILD_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, 2),
3997+
0);
3998+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, 0), 4);
3999+
zassert_equal(DT_MAP_ENTRY_CHILD_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, 1), 5);
4000+
4001+
zassert_str_equal(STRINGIFY(DT_MAP_ENTRY_PARENT_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1)),
4002+
"DT_N_S_gpio_map_test_S_parent");
4003+
4004+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_LEN(TEST_GPIO_CONNECTOR, gpio_map, 0), 1);
4005+
zassert_equal(DT_MAP_ENTRY_HAS_PARENT_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, 0),
4006+
1);
4007+
zassert_equal(DT_MAP_ENTRY_HAS_PARENT_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, 1),
4008+
0);
4009+
zassert_equal(DT_MAP_ENTRY_PARENT_SPECIFIER_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, 0), 6);
4010+
4011+
zassert_true(DT_NODE_HAS_MAP(TEST_INTERRUPT_NEXUS_EMPTY, interrupt_map), "");
4012+
zassert_equal(DT_MAP_LEN(TEST_INTERRUPT_NEXUS_EMPTY, interrupt_map), 0);
4013+
zassert_equal(DT_MAP_HAS_ENTRY(TEST_INTERRUPT_NEXUS_EMPTY, interrupt_map), 0);
4014+
4015+
DT_FOREACH_MAP_ENTRY(TEST_INTERRUPT_NEXUS_EMPTY, interrupt_map, EMPTY_MAP_SHOULD_NOT_RUN);
4016+
DT_FOREACH_MAP_ENTRY_SEP(TEST_INTERRUPT_NEXUS_EMPTY, interrupt_map,
4017+
EMPTY_MAP_SHOULD_NOT_RUN, ());
4018+
DT_FOREACH_MAP_ENTRY_VARGS(TEST_INTERRUPT_NEXUS_EMPTY, interrupt_map,
4019+
EMPTY_MAP_SHOULD_NOT_RUN, 1234);
4020+
DT_FOREACH_MAP_ENTRY_SEP_VARGS(TEST_INTERRUPT_NEXUS_EMPTY, interrupt_map,
4021+
EMPTY_MAP_SHOULD_NOT_RUN, (), 1234);
4022+
4023+
zassert_equal(DT_MAP_HAS_ENTRY_BY_IDX(TEST_INTERRUPT_NEXUS, interrupt_map, 3), 1);
4024+
zassert_equal(DT_MAP_HAS_ENTRY_BY_IDX(TEST_INTERRUPT_NEXUS, interrupt_map, 4), 0);
4025+
DT_FOREACH_MAP_ENTRY(TEST_INTERRUPT_NEXUS, interrupt_map, INTERRUPT_NEXUS_CHECK)
4026+
DT_FOREACH_MAP_ENTRY_SEP(TEST_INTERRUPT_NEXUS, interrupt_map, INTERRUPT_NEXUS_CHECK, ())
4027+
DT_FOREACH_MAP_ENTRY_VARGS(TEST_INTERRUPT_NEXUS, interrupt_map, INTERRUPT_NEXUS_CHECK_VARGS,
4028+
9999);
4029+
DT_FOREACH_MAP_ENTRY_SEP_VARGS(TEST_INTERRUPT_NEXUS, interrupt_map,
4030+
INTERRUPT_NEXUS_CHECK_VARGS, (), 9999);
4031+
}
4032+
38934033
ZTEST_SUITE(devicetree_api, NULL, NULL, NULL, NULL, NULL);

tests/lib/devicetree/api/testcase.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ tests:
55
# will mostly likely be the fastest.
66
platform_allow:
77
- native_sim
8+
- native_sim/native/64
89
- qemu_x86
910
- qemu_x86_64
1011
- qemu_cortex_m3

0 commit comments

Comments
 (0)