forked from mirrors/linux
		
	of: Add KUnit test to confirm DTB is loaded
Add a KUnit test that confirms a DTB has been loaded, i.e. there is a root node, and that the of_have_populated_dt() API works properly. We skip the test when CONFIG_OF_EARLY_FLATREE=n because in that case we know architecture code hasn't called unflatten_(and_copy_)?device_tree() which would populate some sort of root node. Cc: Rob Herring <robh+dt@kernel.org> Cc: Frank Rowand <frowand.list@gmail.com> Reviewed-by: David Gow <davidgow@google.com> Cc: Brendan Higgins <brendan.higgins@linux.dev> Signed-off-by: Stephen Boyd <sboyd@kernel.org> Link: https://lore.kernel.org/r/20240217010557.2381548-8-sboyd@kernel.org Signed-off-by: Rob Herring <robh@kernel.org>
This commit is contained in:
		
							parent
							
								
									d1eabd218e
								
							
						
					
					
						commit
						893ecc6d2d
					
				
					 4 changed files with 71 additions and 0 deletions
				
			
		
							
								
								
									
										3
									
								
								drivers/of/.kunitconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								drivers/of/.kunitconfig
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | CONFIG_KUNIT=y | ||||||
|  | CONFIG_OF=y | ||||||
|  | CONFIG_OF_KUNIT_TEST=y | ||||||
|  | @ -36,6 +36,15 @@ config OF_UNITTEST | ||||||
| 
 | 
 | ||||||
| 	  If unsure, say N here. This option is not safe to enable. | 	  If unsure, say N here. This option is not safe to enable. | ||||||
| 
 | 
 | ||||||
|  | config OF_KUNIT_TEST | ||||||
|  | 	tristate "Devicetree KUnit Test" if !KUNIT_ALL_TESTS | ||||||
|  | 	depends on KUNIT | ||||||
|  | 	default KUNIT_ALL_TESTS | ||||||
|  | 	help | ||||||
|  | 	  This option builds KUnit unit tests for device tree infrastructure. | ||||||
|  | 
 | ||||||
|  | 	  If unsure, say N here, but this option is safe to enable. | ||||||
|  | 
 | ||||||
| config OF_ALL_DTBS | config OF_ALL_DTBS | ||||||
| 	bool "Build all Device Tree Blobs" | 	bool "Build all Device Tree Blobs" | ||||||
| 	depends on COMPILE_TEST | 	depends on COMPILE_TEST | ||||||
|  |  | ||||||
|  | @ -19,4 +19,6 @@ obj-y	+= kexec.o | ||||||
| endif | endif | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
|  | obj-$(CONFIG_OF_KUNIT_TEST) += of_test.o | ||||||
|  | 
 | ||||||
| obj-$(CONFIG_OF_UNITTEST) += unittest-data/ | obj-$(CONFIG_OF_UNITTEST) += unittest-data/ | ||||||
|  |  | ||||||
							
								
								
									
										57
									
								
								drivers/of/of_test.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								drivers/of/of_test.c
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-2.0
 | ||||||
|  | /*
 | ||||||
|  |  * KUnit tests for OF APIs | ||||||
|  |  */ | ||||||
|  | #include <linux/module.h> | ||||||
|  | #include <linux/of.h> | ||||||
|  | 
 | ||||||
|  | #include <kunit/test.h> | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Test that the root node "/" can be found by path. | ||||||
|  |  */ | ||||||
|  | static void of_dtb_root_node_found_by_path(struct kunit *test) | ||||||
|  | { | ||||||
|  | 	struct device_node *np; | ||||||
|  | 
 | ||||||
|  | 	np = of_find_node_by_path("/"); | ||||||
|  | 	KUNIT_EXPECT_NOT_ERR_OR_NULL(test, np); | ||||||
|  | 	of_node_put(np); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Test that the 'of_root' global variable is always populated when DT code is | ||||||
|  |  * enabled. Remove this test once of_root is removed from global access. | ||||||
|  |  */ | ||||||
|  | static void of_dtb_root_node_populates_of_root(struct kunit *test) | ||||||
|  | { | ||||||
|  | 	KUNIT_EXPECT_NOT_ERR_OR_NULL(test, of_root); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static struct kunit_case of_dtb_test_cases[] = { | ||||||
|  | 	KUNIT_CASE(of_dtb_root_node_found_by_path), | ||||||
|  | 	KUNIT_CASE(of_dtb_root_node_populates_of_root), | ||||||
|  | 	{} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int of_dtb_test_init(struct kunit *test) | ||||||
|  | { | ||||||
|  | 	if (!IS_ENABLED(CONFIG_OF_EARLY_FLATTREE)) | ||||||
|  | 		kunit_skip(test, "requires CONFIG_OF_EARLY_FLATTREE"); | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Test suite to confirm a DTB is loaded. | ||||||
|  |  */ | ||||||
|  | static struct kunit_suite of_dtb_suite = { | ||||||
|  | 	.name = "of_dtb", | ||||||
|  | 	.test_cases = of_dtb_test_cases, | ||||||
|  | 	.init = of_dtb_test_init, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | kunit_test_suites( | ||||||
|  | 	&of_dtb_suite, | ||||||
|  | ); | ||||||
|  | MODULE_LICENSE("GPL"); | ||||||
		Loading…
	
		Reference in a new issue
	
	 Stephen Boyd
						Stephen Boyd