Skip to content

Commit 214d598

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 0f8296a commit 214d598

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)
@@ -3887,4 +3891,140 @@ ZTEST(devicetree_api, test_nvmem_devictree_inst)
38873891
"/test/test-nvmem-provider");
38883892
}
38893893

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