5 #define pr_fmt(fmt) "### %s(): " fmt, __func__
9 #include <linux/errno.h>
10 #include <linux/module.h>
12 #include <linux/list.h>
14 #include <linux/slab.h>
15 #include <linux/device.h>
17 static bool selftest_passed =
true;
18 #define selftest(result, fmt, ...) { \
19 selftest_passed &= (result); \
21 pr_err("FAIL %s:%i " fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
24 static void __init of_selftest_parse_phandle_with_args(
void)
29 bool passed_all =
true;
34 pr_err(
"missing testcase data\n");
38 for (i = 0; i < 7; i++) {
41 "#phandle-cells", i, &args);
48 passed &= (args.
args[0] == (i + 1));
53 passed &= (args.
args[0] == (i + 1));
54 passed &= (args.
args[1] == 0);
62 passed &= (args.
args[0] == (i + 1));
63 passed &= (args.
args[1] == 4);
64 passed &= (args.
args[2] == 3);
69 passed &= (args.
args[0] == (i + 1));
70 passed &= (args.
args[1] == 100);
79 passed &= (args.
args[0] == (i + 1));
90 pr_err(
"index %i - data error on node %s rc=%i regs=[",
91 i, args.
np->full_name, rc);
102 "#phandle-cells", 0, &args);
103 passed_all &= (rc == -
EINVAL);
107 "#phandle-cells-missing", 0, &args);
108 passed_all &= (rc == -
EINVAL);
112 "#phandle-cells", 0, &args);
113 passed_all &= (rc == -
EINVAL);
117 "#phandle-cells", 1, &args);
118 passed_all &= (rc == -
EINVAL);
120 pr_info(
"end - %s\n", passed_all ?
"PASS" :
"FAIL");
123 static void __init of_selftest_property_match_string(
void)
131 pr_err(
"No testcase data in device tree\n");
136 selftest(rc == 0,
"first expected:0 got:%i\n", rc);
138 selftest(rc == 1,
"second expected:0 got:%i\n", rc);
140 selftest(rc == 2,
"third expected:0 got:%i\n", rc);
151 static int __init of_selftest(
void)
157 pr_info(
"No testcase data in device tree; not running tests\n");
162 pr_info(
"start of selftest - you will see error messages\n");
163 of_selftest_parse_phandle_with_args();
164 of_selftest_property_match_string();
165 pr_info(
"end of selftest - %s\n", selftest_passed ?
"PASS" :
"FAIL");