mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 12:08:19 +00:00 
			
		
		
		
	Fix a regression brings by commit 84f8e36f03fa ("cmd: bind: allow to
bind driver with driver data")
As example, the following bind command doesn't work:
   bind /soc/usb-otg@49000000 usb_ether
As usb_ether driver has no compatible string, it can't be find by
lists_bind_fdt(). In bind_by_node_path(), which called lists_bind_fdt(),
the driver entry is known, pass it to lists_bind_fdt() to force the driver
entry selection.
For this, add a new parameter struct *driver to lists_bind_fdt().
Fix also all lists_bind_fdt() callers.
Fixes: 84f8e36f03fa ("cmd: bind: allow to bind driver with driver data")
Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
Reported-by: Herbert Poetzl <herbert@13thfloor.at>
Cc: Marek Vasut <marex@denx.de>
Cc: Herbert Poetzl <herbert@13thfloor.at>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
		
	
			
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0+
 | |
| /*
 | |
|  * Test for the NOP uclass
 | |
|  *
 | |
|  * (C) Copyright 2019 - Texas Instruments Incorporated - http://www.ti.com/
 | |
|  * Jean-Jacques Hiblot <jjhiblot@ti.com>
 | |
|  */
 | |
| 
 | |
| #include <common.h>
 | |
| #include <dm.h>
 | |
| #include <dm/ofnode.h>
 | |
| #include <dm/lists.h>
 | |
| #include <dm/device.h>
 | |
| #include <dm/test.h>
 | |
| #include <misc.h>
 | |
| #include <test/test.h>
 | |
| #include <test/ut.h>
 | |
| 
 | |
| static int noptest_bind(struct udevice *parent)
 | |
| {
 | |
| 	ofnode ofnode = dev_read_first_subnode(parent);
 | |
| 
 | |
| 	while (ofnode_valid(ofnode)) {
 | |
| 		struct udevice *dev;
 | |
| 		const char *bind_flag = ofnode_read_string(ofnode, "bind");
 | |
| 
 | |
| 		if (bind_flag && (strcmp(bind_flag, "True") == 0))
 | |
| 			lists_bind_fdt(parent, ofnode, &dev, NULL, false);
 | |
| 		ofnode = dev_read_next_subnode(ofnode);
 | |
| 	}
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static const struct udevice_id noptest1_ids[] = {
 | |
| 	{
 | |
| 		.compatible = "sandbox,nop_sandbox1",
 | |
| 	},
 | |
| 	{ }
 | |
| };
 | |
| 
 | |
| U_BOOT_DRIVER(noptest_drv1) = {
 | |
| 	.name	= "noptest1_drv",
 | |
| 	.of_match	= noptest1_ids,
 | |
| 	.id	= UCLASS_NOP,
 | |
| 	.bind = noptest_bind,
 | |
| };
 | |
| 
 | |
| static const struct udevice_id noptest2_ids[] = {
 | |
| 	{
 | |
| 		.compatible = "sandbox,nop_sandbox2",
 | |
| 	},
 | |
| 	{ }
 | |
| };
 | |
| 
 | |
| U_BOOT_DRIVER(noptest_drv2) = {
 | |
| 	.name	= "noptest2_drv",
 | |
| 	.of_match	= noptest2_ids,
 | |
| 	.id	= UCLASS_NOP,
 | |
| };
 | |
| 
 | |
| static int dm_test_nop(struct unit_test_state *uts)
 | |
| {
 | |
| 	struct udevice *dev;
 | |
| 
 | |
| 	ut_assertok(uclass_get_device_by_name(UCLASS_NOP, "nop-test_0", &dev));
 | |
| 	ut_assertok(uclass_get_device_by_name(UCLASS_NOP, "nop-test_1", &dev));
 | |
| 	ut_asserteq(-ENODEV,
 | |
| 		    uclass_get_device_by_name(UCLASS_NOP, "nop-test_2", &dev));
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| DM_TEST(dm_test_nop, UT_TESTF_FLAT_TREE | UT_TESTF_SCAN_FDT);
 |