mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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