|
91 | 91 | #define TEST_RANGES_OTHER DT_NODELABEL(test_ranges_other)
|
92 | 92 | #define TEST_RANGES_EMPTY DT_NODELABEL(test_ranges_empty)
|
93 | 93 |
|
| 94 | +#define TEST_MTD_0 DT_PATH(test, test_mtd_ffeeddcc) |
| 95 | +#define TEST_MTD_1 DT_PATH(test, test_mtd_33221100) |
| 96 | + |
| 97 | +#define TEST_MEM_0 DT_CHILD(TEST_MTD_0, flash_20000000) |
| 98 | + |
| 99 | +#define TEST_PARTITION_0 DT_PATH(test, test_mtd_ffeeddcc, flash_20000000, partitions, partition_0) |
| 100 | +#define TEST_PARTITION_1 DT_PATH(test, test_mtd_ffeeddcc, flash_20000000, partitions, partition_c0) |
| 101 | +#define TEST_PARTITION_2 DT_PATH(test, test_mtd_33221100, partitions, partition_6ff80) |
| 102 | + |
94 | 103 | #define ZEPHYR_USER DT_PATH(zephyr_user)
|
95 | 104 |
|
96 | 105 | #define TA_HAS_COMPAT(compat) DT_NODE_HAS_COMPAT(TEST_ARRAYS, compat)
|
@@ -2772,6 +2781,78 @@ ZTEST(devicetree_api, test_memory_attr)
|
2772 | 2781 | #undef TEST_FUNC
|
2773 | 2782 | }
|
2774 | 2783 |
|
| 2784 | +ZTEST(devicetree_api, test_fixed_partitions) |
| 2785 | +{ |
| 2786 | + /* Test finding fixed partitions by the 'label' property. */ |
| 2787 | + zassert_true(DT_HAS_FIXED_PARTITION_LABEL(test_partition_0)); |
| 2788 | + zassert_true(DT_HAS_FIXED_PARTITION_LABEL(test_partition_1)); |
| 2789 | + zassert_true(DT_HAS_FIXED_PARTITION_LABEL(test_partition_2)); |
| 2790 | + |
| 2791 | + zassert_true(DT_SAME_NODE(TEST_PARTITION_0, |
| 2792 | + DT_NODE_BY_FIXED_PARTITION_LABEL(test_partition_0))); |
| 2793 | + zassert_true(DT_SAME_NODE(TEST_PARTITION_1, |
| 2794 | + DT_NODE_BY_FIXED_PARTITION_LABEL(test_partition_1))); |
| 2795 | + zassert_true(DT_SAME_NODE(TEST_PARTITION_2, |
| 2796 | + DT_NODE_BY_FIXED_PARTITION_LABEL(test_partition_2))); |
| 2797 | + |
| 2798 | + zassert_true(DT_FIXED_PARTITION_EXISTS(TEST_PARTITION_0)); |
| 2799 | + zassert_true(DT_FIXED_PARTITION_EXISTS(TEST_PARTITION_1)); |
| 2800 | + zassert_true(DT_FIXED_PARTITION_EXISTS(TEST_PARTITION_2)); |
| 2801 | + |
| 2802 | + /* There should not be a node with `label = "test_partition_3"`. */ |
| 2803 | + zassert_false(DT_HAS_FIXED_PARTITION_LABEL(test_partition_3)); |
| 2804 | + zassert_false(DT_NODE_EXISTS(DT_NODE_BY_FIXED_PARTITION_LABEL(test_partition_3))); |
| 2805 | + |
| 2806 | + /* There is a node with `label = "TEST_GPIO_0"`, but it is not a fixed partition. */ |
| 2807 | + zassert_false(DT_HAS_FIXED_PARTITION_LABEL(TEST_GPIO_0)); |
| 2808 | + zassert_false(DT_NODE_EXISTS(DT_NODE_BY_FIXED_PARTITION_LABEL(TEST_GPIO_0))); |
| 2809 | + |
| 2810 | + /* Test DT_MTD_FROM_FIXED_PARTITION. */ |
| 2811 | + zassert_true(DT_NODE_EXISTS(DT_MTD_FROM_FIXED_PARTITION(TEST_PARTITION_0))); |
| 2812 | + zassert_true(DT_NODE_EXISTS(DT_MTD_FROM_FIXED_PARTITION(TEST_PARTITION_1))); |
| 2813 | + zassert_true(DT_NODE_EXISTS(DT_MTD_FROM_FIXED_PARTITION(TEST_PARTITION_2))); |
| 2814 | + |
| 2815 | + zassert_true(DT_SAME_NODE(TEST_MTD_0, DT_MTD_FROM_FIXED_PARTITION(TEST_PARTITION_0))); |
| 2816 | + zassert_true(DT_SAME_NODE(TEST_MTD_0, DT_MTD_FROM_FIXED_PARTITION(TEST_PARTITION_1))); |
| 2817 | + zassert_true(DT_SAME_NODE(TEST_MTD_1, DT_MTD_FROM_FIXED_PARTITION(TEST_PARTITION_2))); |
| 2818 | + |
| 2819 | + /* Test DT_MEM_FROM_FIXED_PARTITION. */ |
| 2820 | + zassert_true(DT_NODE_EXISTS(DT_MEM_FROM_FIXED_PARTITION(TEST_PARTITION_0))); |
| 2821 | + zassert_true(DT_NODE_EXISTS(DT_MEM_FROM_FIXED_PARTITION(TEST_PARTITION_1))); |
| 2822 | + zassert_false(DT_NODE_EXISTS(DT_MEM_FROM_FIXED_PARTITION(TEST_PARTITION_2))); |
| 2823 | + |
| 2824 | + zassert_true(DT_SAME_NODE(TEST_MEM_0, DT_MEM_FROM_FIXED_PARTITION(TEST_PARTITION_0))); |
| 2825 | + zassert_true(DT_SAME_NODE(TEST_MEM_0, DT_MEM_FROM_FIXED_PARTITION(TEST_PARTITION_1))); |
| 2826 | + |
| 2827 | + /* Test DT_FIXED_PARTITION_ADDR. */ |
| 2828 | + zassert_equal(DT_FIXED_PARTITION_ADDR(TEST_PARTITION_0), 0x20000000); |
| 2829 | + zassert_equal(DT_FIXED_PARTITION_ADDR(TEST_PARTITION_1), 0x200000c0); |
| 2830 | + |
| 2831 | + /* DT_FIXED_PARTITION_ADDR(TEST_PARTITION_2) expands to an invalid expression. |
| 2832 | + * Test this by way of string comparison. |
| 2833 | + */ |
| 2834 | + zassert_true(!strcmp(TO_STRING(DT_FIXED_PARTITION_ADDR(TEST_PARTITION_2)), |
| 2835 | + "(__REG_IDX_0_VAL_ADDRESS + 458624)")); |
| 2836 | + zassert_equal(DT_REG_ADDR(TEST_PARTITION_2), 458624); |
| 2837 | + |
| 2838 | + /* Test that all DT_FIXED_PARTITION_ID are defined and unique. */ |
| 2839 | +#define FIXED_PARTITION_ID_COMMA(node_id) DT_FIXED_PARTITION_ID(node_id), |
| 2840 | + |
| 2841 | + static const int ids[] = { |
| 2842 | + DT_FOREACH_STATUS_OKAY_VARGS(fixed_partitions, DT_FOREACH_CHILD, |
| 2843 | + FIXED_PARTITION_ID_COMMA) |
| 2844 | + }; |
| 2845 | + bool found[ARRAY_SIZE(ids)] = { false }; |
| 2846 | + |
| 2847 | + for (int i = 0; i < ARRAY_SIZE(ids); i++) { |
| 2848 | + zassert_between_inclusive(ids[i], 0, ARRAY_SIZE(ids) - 1, ""); |
| 2849 | + zassert_false(found[ids[i]]); |
| 2850 | + found[ids[i]] = true; |
| 2851 | + } |
| 2852 | + |
| 2853 | +#undef FIXED_PARTITION_ID_COMMA |
| 2854 | +} |
| 2855 | + |
2775 | 2856 | ZTEST(devicetree_api, test_string_token)
|
2776 | 2857 | {
|
2777 | 2858 | #undef DT_DRV_COMPAT
|
|
0 commit comments