Skip to content

Commit 2825481

Browse files
superna9999cfriedt
authored andcommitted
devicetree: add tests for devicetree ranges API macros
Test cases for new APIs. Signed-off-by: Neil Armstrong <[email protected]>
1 parent da512fd commit 2825481

File tree

3 files changed

+157
-0
lines changed

3 files changed

+157
-0
lines changed

dts/bindings/test/vnd,pcie.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Copyright (c) 2021 Nordic Semiconductor ASA
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
description: Test PCIe bus controller
5+
6+
compatible: vnd,pcie
7+
8+
include: base.yaml
9+
10+
bus: pcie

tests/lib/devicetree/api/app.overlay

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,5 +441,30 @@
441441
};
442442
};
443443
};
444+
445+
test-ranges {
446+
#address-cells = <2>;
447+
#size-cells = <1>;
448+
449+
test_ranges_pcie: pcie@0 {
450+
compatible = "vnd,pcie";
451+
reg = <0 0 1>;
452+
#address-cells = <3>;
453+
#size-cells = <2>;
454+
455+
ranges = <0x1000000 0 0 0 0x3eff0000 0 0x10000>,
456+
<0x2000000 0 0x10000000 0 0x10000000 0 0x2eff0000>,
457+
<0x3000000 0x80 0 0x80 0 0x80 0>;
458+
};
459+
460+
test_ranges_other: other@1 {
461+
reg = <0 1 1>;
462+
#address-cells = <2>;
463+
#size-cells = <1>;
464+
465+
ranges = <0x0 0x0 0x0 0x3eff0000 0x10000>,
466+
<0x0 0x10000000 0x0 0x10000000 0x2eff0000>;
467+
};
468+
};
444469
};
445470
};

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

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@
8181
#define TEST_IO_CHANNEL_CTLR_1 DT_NODELABEL(test_adc_1)
8282
#define TEST_IO_CHANNEL_CTLR_2 DT_NODELABEL(test_adc_2)
8383

84+
#define TEST_RANGES_PCIE DT_NODELABEL(test_ranges_pcie)
85+
#define TEST_RANGES_OTHER DT_NODELABEL(test_ranges_other)
86+
8487
#define TA_HAS_COMPAT(compat) DT_NODE_HAS_COMPAT(TEST_ARRAYS, compat)
8588

8689
#define TO_STRING(x) TO_STRING_(x)
@@ -1723,6 +1726,123 @@ static void test_great_grandchild(void)
17231726
zassert_equal(DT_PROP(DT_NODELABEL(test_ggc), ggc_prop), 42, "");
17241727
}
17251728

1729+
#undef DT_DRV_COMPAT
1730+
#define DT_DRV_COMPAT vnd_test_ranges_pcie
1731+
static void test_ranges_pcie(void)
1732+
{
1733+
#define FLAGS(node_id, idx) \
1734+
DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx),
1735+
#define CHILD_BUS_ADDR(node_id, idx) \
1736+
DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx),
1737+
#define PARENT_BUS_ADDR(node_id, idx) \
1738+
DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx),
1739+
#define LENGTH(node_id, idx) DT_RANGES_LENGTH_BY_IDX(node_id, idx),
1740+
1741+
unsigned int count = DT_NUM_RANGES(TEST_RANGES_PCIE);
1742+
1743+
const uint64_t ranges_pcie_flags[] = {
1744+
DT_FOREACH_RANGE(TEST_RANGES_PCIE, FLAGS)
1745+
};
1746+
1747+
const uint64_t ranges_child_bus_addr[] = {
1748+
DT_FOREACH_RANGE(TEST_RANGES_PCIE, CHILD_BUS_ADDR)
1749+
};
1750+
1751+
const uint64_t ranges_parent_bus_addr[] = {
1752+
DT_FOREACH_RANGE(TEST_RANGES_PCIE, PARENT_BUS_ADDR)
1753+
};
1754+
1755+
const uint64_t ranges_length[] = {
1756+
DT_FOREACH_RANGE(TEST_RANGES_PCIE, LENGTH)
1757+
};
1758+
1759+
zassert_equal(count, 3, "");
1760+
1761+
zassert_equal(DT_RANGES_HAS_IDX(TEST_RANGES_PCIE, 0), 1, "");
1762+
zassert_equal(DT_RANGES_HAS_IDX(TEST_RANGES_PCIE, 1), 1, "");
1763+
zassert_equal(DT_RANGES_HAS_IDX(TEST_RANGES_PCIE, 2), 1, "");
1764+
zassert_equal(DT_RANGES_HAS_IDX(TEST_RANGES_PCIE, 3), 0, "");
1765+
1766+
zassert_equal(DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(TEST_RANGES_PCIE, 0),
1767+
1, "");
1768+
zassert_equal(DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(TEST_RANGES_PCIE, 1),
1769+
1, "");
1770+
zassert_equal(DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(TEST_RANGES_PCIE, 2),
1771+
1, "");
1772+
zassert_equal(DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(TEST_RANGES_PCIE, 3),
1773+
0, "");
1774+
1775+
zassert_equal(ranges_pcie_flags[0], 0x1000000, "");
1776+
zassert_equal(ranges_pcie_flags[1], 0x2000000, "");
1777+
zassert_equal(ranges_pcie_flags[2], 0x3000000, "");
1778+
zassert_equal(ranges_child_bus_addr[0], 0, "");
1779+
zassert_equal(ranges_child_bus_addr[1], 0x10000000, "");
1780+
zassert_equal(ranges_child_bus_addr[2], 0x8000000000, "");
1781+
zassert_equal(ranges_parent_bus_addr[0], 0x3eff0000, "");
1782+
zassert_equal(ranges_parent_bus_addr[1], 0x10000000, "");
1783+
zassert_equal(ranges_parent_bus_addr[2], 0x8000000000, "");
1784+
zassert_equal(ranges_length[0], 0x10000, "");
1785+
zassert_equal(ranges_length[1], 0x2eff0000, "");
1786+
zassert_equal(ranges_length[2], 0x8000000000, "");
1787+
1788+
#undef FLAGS
1789+
#undef CHILD_BUS_ADDR
1790+
#undef PARENT_BUS_ADDR
1791+
#undef LENGTH
1792+
}
1793+
1794+
static void test_ranges_other(void)
1795+
{
1796+
#define HAS_FLAGS(node_id, idx) \
1797+
DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(node_id, idx)
1798+
#define FLAGS(node_id, idx) \
1799+
DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx),
1800+
#define CHILD_BUS_ADDR(node_id, idx) \
1801+
DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx),
1802+
#define PARENT_BUS_ADDR(node_id, idx) \
1803+
DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx),
1804+
#define LENGTH(node_id, idx) DT_RANGES_LENGTH_BY_IDX(node_id, idx),
1805+
1806+
unsigned int count = DT_NUM_RANGES(TEST_RANGES_OTHER);
1807+
1808+
const uint32_t ranges_child_bus_addr[] = {
1809+
DT_FOREACH_RANGE(TEST_RANGES_OTHER, CHILD_BUS_ADDR)
1810+
};
1811+
1812+
const uint32_t ranges_parent_bus_addr[] = {
1813+
DT_FOREACH_RANGE(TEST_RANGES_OTHER, PARENT_BUS_ADDR)
1814+
};
1815+
1816+
const uint32_t ranges_length[] = {
1817+
DT_FOREACH_RANGE(TEST_RANGES_OTHER, LENGTH)
1818+
};
1819+
1820+
zassert_equal(count, 2, "");
1821+
1822+
zassert_equal(DT_RANGES_HAS_IDX(TEST_RANGES_OTHER, 0), 1, "");
1823+
zassert_equal(DT_RANGES_HAS_IDX(TEST_RANGES_OTHER, 1), 1, "");
1824+
zassert_equal(DT_RANGES_HAS_IDX(TEST_RANGES_OTHER, 2), 0, "");
1825+
zassert_equal(DT_RANGES_HAS_IDX(TEST_RANGES_OTHER, 3), 0, "");
1826+
1827+
zassert_equal(HAS_FLAGS(TEST_RANGES_OTHER, 0), 0, "");
1828+
zassert_equal(HAS_FLAGS(TEST_RANGES_OTHER, 1), 0, "");
1829+
zassert_equal(HAS_FLAGS(TEST_RANGES_OTHER, 2), 0, "");
1830+
zassert_equal(HAS_FLAGS(TEST_RANGES_OTHER, 3), 0, "");
1831+
1832+
zassert_equal(ranges_child_bus_addr[0], 0, "");
1833+
zassert_equal(ranges_child_bus_addr[1], 0x10000000, "");
1834+
zassert_equal(ranges_parent_bus_addr[0], 0x3eff0000, "");
1835+
zassert_equal(ranges_parent_bus_addr[1], 0x10000000, "");
1836+
zassert_equal(ranges_length[0], 0x10000, "");
1837+
zassert_equal(ranges_length[1], 0x2eff0000, "");
1838+
1839+
#undef HAS_FLAGS
1840+
#undef FLAGS
1841+
#undef CHILD_BUS_ADDR
1842+
#undef PARENT_BUS_ADDR
1843+
#undef LENGTH
1844+
}
1845+
17261846
static void test_compat_get_any_status_okay(void)
17271847
{
17281848
zassert_true(
@@ -2148,6 +2268,8 @@ void test_main(void)
21482268
ztest_unit_test(test_child_nodes_list),
21492269
ztest_unit_test(test_child_nodes_list_varg),
21502270
ztest_unit_test(test_great_grandchild),
2271+
ztest_unit_test(test_ranges_pcie),
2272+
ztest_unit_test(test_ranges_other),
21512273
ztest_unit_test(test_compat_get_any_status_okay),
21522274
ztest_unit_test(test_dep_ord),
21532275
ztest_unit_test(test_path),

0 commit comments

Comments
 (0)