]> Git Repo - J-linux.git/blob - drivers/of/overlay_test.c
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / drivers / of / overlay_test.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * KUnit tests for device tree overlays
4  */
5 #include <linux/device/bus.h>
6 #include <linux/kconfig.h>
7 #include <linux/of.h>
8 #include <linux/of_platform.h>
9 #include <linux/platform_device.h>
10
11 #include <kunit/of.h>
12 #include <kunit/test.h>
13
14 #include "of_private.h"
15
16 static const char * const kunit_node_name = "kunit-test";
17 static const char * const kunit_compatible = "test,empty";
18
19 /* Test that of_overlay_apply_kunit() adds a node to the live tree */
20 static void of_overlay_apply_kunit_apply(struct kunit *test)
21 {
22         struct device_node *np;
23
24         KUNIT_ASSERT_EQ(test, 0,
25                         of_overlay_apply_kunit(test, kunit_overlay_test));
26
27         np = of_find_node_by_name(NULL, kunit_node_name);
28         KUNIT_EXPECT_NOT_ERR_OR_NULL(test, np);
29         of_node_put(np);
30 }
31
32 /*
33  * Test that of_overlay_apply_kunit() creates platform devices with the
34  * expected device_node
35  */
36 static void of_overlay_apply_kunit_platform_device(struct kunit *test)
37 {
38         struct platform_device *pdev;
39         struct device_node *np;
40
41         KUNIT_ASSERT_EQ(test, 0,
42                         of_overlay_apply_kunit(test, kunit_overlay_test));
43
44         np = of_find_node_by_name(NULL, kunit_node_name);
45         of_node_put_kunit(test, np);
46         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, np);
47
48         pdev = of_find_device_by_node(np);
49         KUNIT_EXPECT_NOT_ERR_OR_NULL(test, pdev);
50         if (pdev)
51                 put_device(&pdev->dev);
52 }
53
54 static int of_overlay_bus_match_compatible(struct device *dev, const void *data)
55 {
56         return of_device_is_compatible(dev->of_node, data);
57 }
58
59 /* Test that of_overlay_apply_kunit() cleans up after the test is finished */
60 static void of_overlay_apply_kunit_cleanup(struct kunit *test)
61 {
62         struct kunit fake;
63         struct platform_device *pdev;
64         struct device *dev;
65         struct device_node *np;
66
67         of_root_kunit_skip(test);
68         if (!IS_ENABLED(CONFIG_OF_OVERLAY))
69                 kunit_skip(test, "requires CONFIG_OF_OVERLAY to apply overlay");
70         if (!IS_ENABLED(CONFIG_OF_EARLY_FLATTREE))
71                 kunit_skip(test, "requires CONFIG_OF_EARLY_FLATTREE for root node");
72
73         kunit_init_test(&fake, "fake test", NULL);
74         KUNIT_ASSERT_EQ(test, fake.status, KUNIT_SUCCESS);
75
76         KUNIT_ASSERT_EQ(test, 0,
77                         of_overlay_apply_kunit(&fake, kunit_overlay_test));
78
79         np = of_find_node_by_name(NULL, kunit_node_name);
80         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, np);
81         of_node_put_kunit(&fake, np);
82
83         pdev = of_find_device_by_node(np);
84         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, pdev);
85         put_device(&pdev->dev); /* Not derefing 'pdev' after this */
86
87         /* Remove overlay */
88         kunit_cleanup(&fake);
89
90         /* The node and device should be removed */
91         np = of_find_node_by_name(NULL, kunit_node_name);
92         KUNIT_EXPECT_PTR_EQ(test, NULL, np);
93         of_node_put(np);
94
95         dev = bus_find_device(&platform_bus_type, NULL, kunit_compatible,
96                               of_overlay_bus_match_compatible);
97         KUNIT_EXPECT_PTR_EQ(test, NULL, dev);
98         put_device(dev);
99 }
100
101 static struct kunit_case of_overlay_apply_kunit_test_cases[] = {
102         KUNIT_CASE(of_overlay_apply_kunit_apply),
103         KUNIT_CASE(of_overlay_apply_kunit_platform_device),
104         KUNIT_CASE(of_overlay_apply_kunit_cleanup),
105         {}
106 };
107
108 /*
109  * Test suite for test managed device tree overlays.
110  */
111 static struct kunit_suite of_overlay_apply_kunit_suite = {
112         .name = "of_overlay_apply_kunit",
113         .test_cases = of_overlay_apply_kunit_test_cases,
114 };
115
116 kunit_test_suites(
117         &of_overlay_apply_kunit_suite,
118 );
119 MODULE_LICENSE("GPL");
120 MODULE_DESCRIPTION("KUnit tests for device tree overlays");
This page took 0.032156 seconds and 4 git commands to generate.