tests: lib: devicetree: devices: Add sub-partition check

Adds a sub-partition check to this test

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
This commit is contained in:
Jamie McCrae 2025-04-10 11:32:07 +01:00 committed by Benjamin Cabé
parent 320e654e99
commit c6eb665acf
2 changed files with 48 additions and 19 deletions

View File

@ -63,13 +63,23 @@
#address-cells = <1>;
#size-cells = <1>;
test_p0: partition@0 {
label = "partition-0";
reg = <0x00000000 0x0000C000>;
};
test_p1: partition@c000 {
label = "partition-1";
reg = <0x0000C000 0x00067000>;
test_p0_p1: partition@0 {
compatible = "fixed-subpartitions";
label = "partition-0-1-outer";
reg = <0x00000000 0x73000>;
ranges = <0x0 0x0 0x73000>;
#address-cells = <1>;
#size-cells = <1>;
test_p0: partition@0 {
label = "partition-0";
reg = <0x00000000 0x0000C000>;
};
test_p1: partition@c000 {
label = "partition-1";
reg = <0x0000C000 0x00067000>;
};
};
};
};

View File

@ -14,14 +14,16 @@
#define TEST_GPIOX DT_NODELABEL(test_gpiox)
#define TEST_DEVB DT_NODELABEL(test_dev_b)
#define TEST_DEVC DT_NODELABEL(test_dev_c)
#define TEST_PARTITION DT_NODELABEL(test_p0)
#define TEST_PARTITION_OUTER DT_NODELABEL(test_p0_p1)
#define TEST_PARTITION0 DT_NODELABEL(test_p0)
#define TEST_PARTITION1 DT_NODELABEL(test_p1)
#define TEST_GPIO_INJECTED DT_NODELABEL(test_gpio_injected)
#define TEST_NOLABEL DT_PATH(test, i2c_11112222, test_i2c_dev_14)
static const struct device *devlist;
static const struct device *devlist_end;
static device_handle_t init_order[10];
static device_handle_t init_order[12];
static int dev_init(const struct device *dev)
{
@ -46,8 +48,12 @@ DEVICE_DT_DEFINE(TEST_GPIOX, dev_init, NULL,
NULL, NULL, POST_KERNEL, 40, NULL);
DEVICE_DT_DEFINE(TEST_DEVC, dev_init, NULL,
NULL, NULL, POST_KERNEL, 50, NULL);
DEVICE_DT_DEFINE(TEST_PARTITION, dev_init, NULL,
DEVICE_DT_DEFINE(TEST_PARTITION_OUTER, dev_init, NULL,
NULL, NULL, POST_KERNEL, 60, NULL);
DEVICE_DT_DEFINE(TEST_PARTITION0, dev_init, NULL,
NULL, NULL, POST_KERNEL, 61, NULL);
DEVICE_DT_DEFINE(TEST_PARTITION1, dev_init, NULL,
NULL, NULL, POST_KERNEL, 62, NULL);
/* Device with both an existing and missing injected dependency */
DEVICE_DT_DEFINE(TEST_GPIO_INJECTED, dev_init, NULL,
NULL, NULL, POST_KERNEL, 70, NULL, DT_DEP_ORD(TEST_DEVB), 999);
@ -76,8 +82,12 @@ ZTEST(devicetree_devices, test_init_get)
DEVICE_DT_GET(TEST_GPIOX), NULL);
zassert_equal(DEVICE_INIT_DT_GET(TEST_DEVC)->dev,
DEVICE_DT_GET(TEST_DEVC), NULL);
zassert_equal(DEVICE_INIT_DT_GET(TEST_PARTITION)->dev,
DEVICE_DT_GET(TEST_PARTITION), NULL);
zassert_equal(DEVICE_INIT_DT_GET(TEST_PARTITION_OUTER)->dev,
DEVICE_DT_GET(TEST_PARTITION_OUTER), NULL);
zassert_equal(DEVICE_INIT_DT_GET(TEST_PARTITION0)->dev,
DEVICE_DT_GET(TEST_PARTITION0), NULL);
zassert_equal(DEVICE_INIT_DT_GET(TEST_PARTITION1)->dev,
DEVICE_DT_GET(TEST_PARTITION1), NULL);
zassert_equal(DEVICE_INIT_DT_GET(TEST_GPIO_INJECTED)->dev,
DEVICE_DT_GET(TEST_GPIO_INJECTED), NULL);
zassert_equal(DEVICE_INIT_GET(manual_dev)->dev,
@ -92,7 +102,9 @@ ZTEST(devicetree_devices, test_init_get)
zassert_equal(DEVICE_DT_GET(TEST_DEVB)->ops.init, dev_init);
zassert_equal(DEVICE_DT_GET(TEST_GPIOX)->ops.init, dev_init);
zassert_equal(DEVICE_DT_GET(TEST_DEVC)->ops.init, dev_init);
zassert_equal(DEVICE_DT_GET(TEST_PARTITION)->ops.init, dev_init);
zassert_equal(DEVICE_DT_GET(TEST_PARTITION_OUTER)->ops.init, dev_init);
zassert_equal(DEVICE_DT_GET(TEST_PARTITION0)->ops.init, dev_init);
zassert_equal(DEVICE_DT_GET(TEST_PARTITION1)->ops.init, dev_init);
zassert_equal(DEVICE_DT_GET(TEST_GPIO_INJECTED)->ops.init, dev_init);
zassert_equal(DEVICE_GET(manual_dev)->ops.init, dev_init);
zassert_equal(DEVICE_DT_GET(TEST_NOLABEL)->ops.init, dev_init);
@ -106,10 +118,12 @@ ZTEST(devicetree_devices, test_init_order)
zassert_equal(init_order[3], DEV_HDL(TEST_DEVB));
zassert_equal(init_order[4], DEV_HDL(TEST_GPIOX));
zassert_equal(init_order[5], DEV_HDL(TEST_DEVC));
zassert_equal(init_order[6], DEV_HDL(TEST_PARTITION));
zassert_equal(init_order[7], DEV_HDL(TEST_GPIO_INJECTED));
zassert_equal(init_order[8], DEV_HDL_NAME(manual_dev));
zassert_equal(init_order[9], DEV_HDL(TEST_NOLABEL));
zassert_equal(init_order[6], DEV_HDL(TEST_PARTITION_OUTER));
zassert_equal(init_order[7], DEV_HDL(TEST_PARTITION0));
zassert_equal(init_order[8], DEV_HDL(TEST_PARTITION1));
zassert_equal(init_order[9], DEV_HDL(TEST_GPIO_INJECTED));
zassert_equal(init_order[10], DEV_HDL_NAME(manual_dev));
zassert_equal(init_order[11], DEV_HDL(TEST_NOLABEL));
}
static bool check_handle(device_handle_t hdl,
@ -321,12 +335,17 @@ ZTEST(devicetree_devices, test_supports)
zassert_true(check_handle(DEV_HDL(TEST_NOLABEL), hdls, nhdls));
/* Support forwarding (intermediate missing devicetree node)
* TEST_DEVC: TEST_PARTITION
* TEST_DEVC: TEST_PARTITION_OUTER: TEST_PARTITION0 TEST_PARTITION1
*/
dev = DEVICE_DT_GET(TEST_DEVC);
hdls = device_supported_handles_get(dev, &nhdls);
zassert_equal(nhdls, 1);
zassert_true(check_handle(DEV_HDL(TEST_PARTITION), hdls, nhdls));
zassert_true(check_handle(DEV_HDL(TEST_PARTITION_OUTER), hdls, nhdls));
dev = DEVICE_DT_GET(TEST_PARTITION_OUTER);
hdls = device_supported_handles_get(dev, &nhdls);
zassert_equal(nhdls, 2);
zassert_true(check_handle(DEV_HDL(TEST_PARTITION0), hdls, nhdls));
zassert_true(check_handle(DEV_HDL(TEST_PARTITION1), hdls, nhdls));
}
void *devicetree_devices_setup(void)