Merge branch 'acpi-config'
[firefly-linux-kernel-4.4.55.git] / drivers / of / selftest.c
index 9c80f0b7556b5aa25140cb1359de8f3eacdb6b57..e21012bde639cde305a8c14aab011fad020a7da2 100644 (file)
@@ -231,6 +231,75 @@ static void __init of_selftest_parse_interrupts(void)
        of_node_put(np);
 }
 
+static void __init of_selftest_parse_interrupts_extended(void)
+{
+       struct device_node *np;
+       struct of_phandle_args args;
+       int i, rc;
+
+       np = of_find_node_by_path("/testcase-data/interrupts/interrupts-extended0");
+       if (!np) {
+               pr_err("missing testcase data\n");
+               return;
+       }
+
+       for (i = 0; i < 7; i++) {
+               bool passed = true;
+               rc = of_irq_parse_one(np, i, &args);
+
+               /* Test the values from tests-phandle.dtsi */
+               switch (i) {
+               case 0:
+                       passed &= !rc;
+                       passed &= (args.args_count == 1);
+                       passed &= (args.args[0] == 1);
+                       break;
+               case 1:
+                       passed &= !rc;
+                       passed &= (args.args_count == 3);
+                       passed &= (args.args[0] == 2);
+                       passed &= (args.args[1] == 3);
+                       passed &= (args.args[2] == 4);
+                       break;
+               case 2:
+                       passed &= !rc;
+                       passed &= (args.args_count == 2);
+                       passed &= (args.args[0] == 5);
+                       passed &= (args.args[1] == 6);
+                       break;
+               case 3:
+                       passed &= !rc;
+                       passed &= (args.args_count == 1);
+                       passed &= (args.args[0] == 9);
+                       break;
+               case 4:
+                       passed &= !rc;
+                       passed &= (args.args_count == 3);
+                       passed &= (args.args[0] == 10);
+                       passed &= (args.args[1] == 11);
+                       passed &= (args.args[2] == 12);
+                       break;
+               case 5:
+                       passed &= !rc;
+                       passed &= (args.args_count == 2);
+                       passed &= (args.args[0] == 13);
+                       passed &= (args.args[1] == 14);
+                       break;
+               case 6:
+                       passed &= !rc;
+                       passed &= (args.args_count == 1);
+                       passed &= (args.args[0] == 15);
+                       break;
+               default:
+                       passed = false;
+               }
+
+               selftest(passed, "index %i - data error on node %s rc=%i\n",
+                        i, args.np->full_name, rc);
+       }
+       of_node_put(np);
+}
+
 static int __init of_selftest(void)
 {
        struct device_node *np;
@@ -246,6 +315,7 @@ static int __init of_selftest(void)
        of_selftest_parse_phandle_with_args();
        of_selftest_property_match_string();
        of_selftest_parse_interrupts();
+       of_selftest_parse_interrupts_extended();
        pr_info("end of selftest - %i passed, %i failed\n",
                selftest_results.passed, selftest_results.failed);
        return 0;