Skip to content

Commit 57e3220

Browse files
robherringgregkh
authored andcommitted
of: unittest: Add bus address range parsing tests
[ Upstream commit 6d32dadb11a6480be62c6ada901bbdcbda1775c9 ] While there are tests for "dma-ranges" helpers, "ranges" is missing any tests. It's the same underlying code, but for completeness add a test for "ranges" parsing iterators. This is in preparation to add some additional "ranges" helpers. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Rob Herring <[email protected]> Stable-dep-of: 7f05e20b989a ("of: address: Preserve the flags portion on 1:1 dma-ranges mapping") Signed-off-by: Sasha Levin <[email protected]>
1 parent 40153aa commit 57e3220

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

drivers/of/unittest.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,6 +1019,58 @@ static void __init of_unittest_pci_dma_ranges(void)
10191019
of_node_put(np);
10201020
}
10211021

1022+
static void __init of_unittest_bus_ranges(void)
1023+
{
1024+
struct device_node *np;
1025+
struct of_range range;
1026+
struct of_range_parser parser;
1027+
int i = 0;
1028+
1029+
np = of_find_node_by_path("/testcase-data/address-tests");
1030+
if (!np) {
1031+
pr_err("missing testcase data\n");
1032+
return;
1033+
}
1034+
1035+
if (of_range_parser_init(&parser, np)) {
1036+
pr_err("missing ranges property\n");
1037+
return;
1038+
}
1039+
1040+
/*
1041+
* Get the "ranges" from the device tree
1042+
*/
1043+
for_each_of_range(&parser, &range) {
1044+
unittest(range.flags == IORESOURCE_MEM,
1045+
"for_each_of_range wrong flags on node %pOF flags=%x (expected %x)\n",
1046+
np, range.flags, IORESOURCE_MEM);
1047+
if (!i) {
1048+
unittest(range.size == 0x40000000,
1049+
"for_each_of_range wrong size on node %pOF size=%llx\n",
1050+
np, range.size);
1051+
unittest(range.cpu_addr == 0x70000000,
1052+
"for_each_of_range wrong CPU addr (%llx) on node %pOF",
1053+
range.cpu_addr, np);
1054+
unittest(range.bus_addr == 0x70000000,
1055+
"for_each_of_range wrong bus addr (%llx) on node %pOF",
1056+
range.pci_addr, np);
1057+
} else {
1058+
unittest(range.size == 0x20000000,
1059+
"for_each_of_range wrong size on node %pOF size=%llx\n",
1060+
np, range.size);
1061+
unittest(range.cpu_addr == 0xd0000000,
1062+
"for_each_of_range wrong CPU addr (%llx) on node %pOF",
1063+
range.cpu_addr, np);
1064+
unittest(range.bus_addr == 0x00000000,
1065+
"for_each_of_range wrong bus addr (%llx) on node %pOF",
1066+
range.pci_addr, np);
1067+
}
1068+
i++;
1069+
}
1070+
1071+
of_node_put(np);
1072+
}
1073+
10221074
static void __init of_unittest_parse_interrupts(void)
10231075
{
10241076
struct device_node *np;
@@ -3521,6 +3573,7 @@ static int __init of_unittest(void)
35213573
of_unittest_dma_get_max_cpu_address();
35223574
of_unittest_parse_dma_ranges();
35233575
of_unittest_pci_dma_ranges();
3576+
of_unittest_bus_ranges();
35243577
of_unittest_match_node();
35253578
of_unittest_platform_populate();
35263579
of_unittest_overlay();

0 commit comments

Comments
 (0)