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. | ||||
| 
 | ||||
| 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 | ||||
| 	bool "Build all Device Tree Blobs" | ||||
| 	depends on COMPILE_TEST | ||||
|  |  | |||
|  | @ -19,4 +19,6 @@ obj-y	+= kexec.o | |||
| endif | ||||
| endif | ||||
| 
 | ||||
| obj-$(CONFIG_OF_KUNIT_TEST) += of_test.o | ||||
| 
 | ||||
| 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