Skip to content

Commit 04a7fcf

Browse files
57300carlescufi
authored andcommitted
tests: lib: devicetree: api: Add test_fixed_partitions
Add test suite for the DT fixed-partitions API. It is verified on two kinds of MTD nodes, one of which is meant to represent external memory. Signed-off-by: Grzegorz Swiderski <[email protected]>
1 parent b69be2c commit 04a7fcf

File tree

2 files changed

+120
-0
lines changed

2 files changed

+120
-0
lines changed

tests/lib/devicetree/api/app.overlay

+39
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,45 @@
657657
zephyr,memory-attr = "RAM_NOCACHE";
658658
};
659659

660+
test-mtd@ffeeddcc {
661+
reg = < 0x0 0x1000 >;
662+
#address-cells = < 1 >;
663+
#size-cells = < 1 >;
664+
665+
flash@20000000 {
666+
compatible = "soc-nv-flash";
667+
reg = < 0x20000000 0x100 >;
668+
partitions {
669+
compatible = "fixed-partitions";
670+
#address-cells = < 1 >;
671+
#size-cells = < 1 >;
672+
673+
partition@0 {
674+
reg = < 0x0 0xc0 >;
675+
label = "test-partition-0";
676+
};
677+
partition@c0 {
678+
reg = < 0xc0 0x40 >;
679+
label = "test-partition-1";
680+
};
681+
};
682+
};
683+
};
684+
685+
test-mtd@33221100 {
686+
reg = < 0x33221100 0x1000 >;
687+
688+
partitions {
689+
compatible = "fixed-partitions";
690+
#address-cells = < 1 >;
691+
#size-cells = < 1 >;
692+
693+
partition@6ff80 {
694+
reg = < 0x6ff80 0x80 >;
695+
label = "test-partition-2";
696+
};
697+
};
698+
};
660699
};
661700

662701
test_64 {

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

+81
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,15 @@
9191
#define TEST_RANGES_OTHER DT_NODELABEL(test_ranges_other)
9292
#define TEST_RANGES_EMPTY DT_NODELABEL(test_ranges_empty)
9393

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+
94103
#define ZEPHYR_USER DT_PATH(zephyr_user)
95104

96105
#define TA_HAS_COMPAT(compat) DT_NODE_HAS_COMPAT(TEST_ARRAYS, compat)
@@ -2772,6 +2781,78 @@ ZTEST(devicetree_api, test_memory_attr)
27722781
#undef TEST_FUNC
27732782
}
27742783

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+
27752856
ZTEST(devicetree_api, test_string_token)
27762857
{
27772858
#undef DT_DRV_COMPAT

0 commit comments

Comments
 (0)