Skip to content

Commit 21c854e

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 db112da commit 21c854e

File tree

5 files changed

+148
-0
lines changed

5 files changed

+148
-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: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,4 +921,49 @@
921921
compatible = "vnd,non-deprecated-label";
922922
label = "FOO";
923923
};
924+
925+
gpio-map-test {
926+
connector {
927+
compatible = "vnd,gpio-nexus";
928+
#gpio-cells = <2>;
929+
gpio-map = <1 2 &{/gpio-map-test/parent} 3
930+
4 5 &{/gpio-map-test/parent} 6>;
931+
gpio-map-mask = <0xffffffff 0xffffffc0>;
932+
gpio-map-pass-thru = <0x0 0x3f>;
933+
};
934+
parent {
935+
compatible = "gpio-dst";
936+
gpio-controller;
937+
#gpio-cells = <1>;
938+
};
939+
};
940+
941+
interrupt-map-test {
942+
#address-cells = <2>;
943+
#size-cells = <0>;
944+
945+
controller-0@0 {
946+
compatible = "vnd,cpu-intc";
947+
reg = <0x0 0x0>;
948+
#address-cells = <1>;
949+
#interrupt-cells = <1>;
950+
interrupt-controller;
951+
};
952+
controller-1@1 {
953+
compatible = "vnd,intc";
954+
reg = <0x0 0x1>;
955+
#address-cells = <2>;
956+
#interrupt-cells = <2>;
957+
interrupt-controller;
958+
};
959+
nexus {
960+
compatible = "vnd,intr-nexus";
961+
#interrupt-cells = <2>;
962+
interrupt-map = <
963+
0 0 1 2 &{/interrupt-map-test/controller-0@0} 3 4
964+
0 0 5 6 &{/interrupt-map-test/controller-1@1} 7 8 9 0
965+
0 1 9 8 &{/interrupt-map-test/controller-0@0} 7 6
966+
0 1 5 4 &{/interrupt-map-test/controller-1@1} 3 2 1 0>;
967+
};
968+
};
924969
};

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

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

114+
#define TEST_GPIO_CONNECTOR DT_PATH(gpio_map_test, connector)
115+
#define TEST_INTERRUPT_NEXUS DT_PATH(interrupt_map_test, nexus)
116+
114117
#define ZEPHYR_USER DT_PATH(zephyr_user)
115118

116119
#define TA_HAS_COMPAT(compat) DT_NODE_HAS_COMPAT(TEST_ARRAYS, compat)
@@ -3832,4 +3835,87 @@ ZTEST(devicetree_api, test_interrupt_controller)
38323835
zassert_true(DT_SAME_NODE(DT_INST_IRQ_INTC(0), TEST_INTC), "");
38333836
}
38343837

3838+
#define INTERRUPT_NEXUS_CHECK_0(n, p, i, ...) \
3839+
zassert_equal(NUM_VA_ARGS(DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 4); \
3840+
zassert_equal(GET_ARG_N(1, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 0); \
3841+
zassert_equal(GET_ARG_N(2, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 0); \
3842+
zassert_equal(GET_ARG_N(3, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 1); \
3843+
zassert_equal(GET_ARG_N(4, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 2); \
3844+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 2); \
3845+
zassert_equal(GET_ARG_N(1, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 3); \
3846+
zassert_equal(GET_ARG_N(2, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 4); \
3847+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_ARG_BY_IDX(n, p, i)), 1); \
3848+
zassert_str_equal(STRINGIFY(DT_MAP_PARENT_ARG_BY_IDX(n, p, i)), \
3849+
"DT_N_S_interrupt_map_test_S_controller_0_0");
3850+
3851+
#define INTERRUPT_NEXUS_CHECK_1(n, p, i, ...) \
3852+
zassert_equal(NUM_VA_ARGS(DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 4); \
3853+
zassert_equal(GET_ARG_N(1, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 0); \
3854+
zassert_equal(GET_ARG_N(2, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 0); \
3855+
zassert_equal(GET_ARG_N(3, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 5); \
3856+
zassert_equal(GET_ARG_N(4, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 6); \
3857+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 4); \
3858+
zassert_equal(GET_ARG_N(1, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 7); \
3859+
zassert_equal(GET_ARG_N(2, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 8); \
3860+
zassert_equal(GET_ARG_N(3, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 9); \
3861+
zassert_equal(GET_ARG_N(4, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 0); \
3862+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_ARG_BY_IDX(n, p, i)), 1); \
3863+
zassert_str_equal(STRINGIFY(DT_MAP_PARENT_ARG_BY_IDX(n, p, i)), \
3864+
"DT_N_S_interrupt_map_test_S_controller_1_1");
3865+
3866+
#define INTERRUPT_NEXUS_CHECK_2(n, p, i, ...) \
3867+
zassert_equal(NUM_VA_ARGS(DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 4); \
3868+
zassert_equal(GET_ARG_N(1, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 0); \
3869+
zassert_equal(GET_ARG_N(2, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 1); \
3870+
zassert_equal(GET_ARG_N(3, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 9); \
3871+
zassert_equal(GET_ARG_N(4, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 8); \
3872+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 2); \
3873+
zassert_equal(GET_ARG_N(1, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 7); \
3874+
zassert_equal(GET_ARG_N(2, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 6); \
3875+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_ARG_BY_IDX(n, p, i)), 1); \
3876+
zassert_str_equal(STRINGIFY(DT_MAP_PARENT_ARG_BY_IDX(n, p, i)), \
3877+
"DT_N_S_interrupt_map_test_S_controller_0_0");
3878+
3879+
#define INTERRUPT_NEXUS_CHECK_3(n, p, i, ...) \
3880+
zassert_equal(NUM_VA_ARGS(DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 4); \
3881+
zassert_equal(GET_ARG_N(1, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 0); \
3882+
zassert_equal(GET_ARG_N(2, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 1); \
3883+
zassert_equal(GET_ARG_N(3, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 5); \
3884+
zassert_equal(GET_ARG_N(4, DT_MAP_CHILD_SPECIFIER_ARGS_BY_IDX(n, p, i)), 4); \
3885+
zassert_equal(NUM_VA_ARGS(DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 4); \
3886+
zassert_equal(GET_ARG_N(1, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 3); \
3887+
zassert_equal(GET_ARG_N(2, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 2); \
3888+
zassert_equal(GET_ARG_N(3, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 1); \
3889+
zassert_equal(GET_ARG_N(4, DT_MAP_PARENT_SPECIFIER_ARGS_BY_IDX(n, p, i)), 0); \
3890+
zassert_str_equal(STRINGIFY(DT_MAP_PARENT_ARG_BY_IDX(n, p, i)), \
3891+
"DT_N_S_interrupt_map_test_S_controller_1_1");
3892+
3893+
#define INTERRUPT_NEXUS_CHECK(...) \
3894+
UTIL_CAT(INTERRUPT_NEXUS_CHECK_, GET_ARG_N(3, __VA_ARGS__))(__VA_ARGS__)
3895+
3896+
ZTEST(devicetree_api, test_map)
3897+
{
3898+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map), 2);
3899+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, child_specifier_0), 1);
3900+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, child_specifier_1), 2);
3901+
zassert_str_equal(STRINGIFY(DT_PHANDLE_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0)),
3902+
"DT_N_S_gpio_map_test_S_parent");
3903+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 0, parent_specifier_0), 3);
3904+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, child_specifier_0), 4);
3905+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, child_specifier_1), 5);
3906+
zassert_str_equal(STRINGIFY(DT_PHANDLE_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1)),
3907+
"DT_N_S_gpio_map_test_S_parent");
3908+
zassert_equal(DT_PHA_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map, 1, parent_specifier_0), 6);
3909+
3910+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map_mask), 2);
3911+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_mask, 0), 0xffffffff);
3912+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_mask, 1), 0xffffffc0);
3913+
zassert_equal(DT_PROP_LEN(TEST_GPIO_CONNECTOR, gpio_map_pass_thru), 2);
3914+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_pass_thru, 0), 0x0);
3915+
zassert_equal(DT_PROP_BY_IDX(TEST_GPIO_CONNECTOR, gpio_map_pass_thru, 1), 0x3f);
3916+
3917+
DT_FOREACH_PROP_ELEM_VARGS(TEST_INTERRUPT_NEXUS, interrupt_map, INTERRUPT_NEXUS_CHECK,
3918+
9999);
3919+
}
3920+
38353921
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)