|
112 | 112 | #define TEST_SUBPARTITION_1 DT_PATH(test, test_mtd_ffeeddcc, flash_20000000, partitions, \ |
113 | 113 | partition_100, partition_40) |
114 | 114 |
|
| 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 | + |
115 | 119 | #define ZEPHYR_USER DT_PATH(zephyr_user) |
116 | 120 |
|
117 | 121 | #define TA_HAS_COMPAT(compat) DT_NODE_HAS_COMPAT(TEST_ARRAYS, compat) |
@@ -3887,4 +3891,140 @@ ZTEST(devicetree_api, test_nvmem_devictree_inst) |
3887 | 3891 | "/test/test-nvmem-provider"); |
3888 | 3892 | } |
3889 | 3893 |
|
| 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 | + |
3890 | 4030 | ZTEST_SUITE(devicetree_api, NULL, NULL, NULL, NULL, NULL); |
0 commit comments