mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	test: dm: core: Add test case for uclass driver's child_post_probe()
Add test case to cover uclass driver's child_post_probe() method. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									651d0c019a
								
							
						
					
					
						commit
						d92878aa40
					
				@ -69,6 +69,7 @@ struct dm_test_priv {
 | 
			
		||||
	int op_count[DM_TEST_OP_COUNT];
 | 
			
		||||
	int uclass_flag;
 | 
			
		||||
	int uclass_total;
 | 
			
		||||
	int uclass_postp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -63,6 +63,15 @@ static int testbus_child_pre_probe_uclass(struct udevice *dev)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int testbus_child_post_probe_uclass(struct udevice *dev)
 | 
			
		||||
{
 | 
			
		||||
	struct dm_test_priv *priv = dev_get_priv(dev);
 | 
			
		||||
 | 
			
		||||
	priv->uclass_postp++;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int testbus_child_post_remove(struct udevice *dev)
 | 
			
		||||
{
 | 
			
		||||
	struct dm_test_parent_data *parent_data = dev_get_parent_priv(dev);
 | 
			
		||||
@ -102,6 +111,7 @@ UCLASS_DRIVER(testbus) = {
 | 
			
		||||
	.id		= UCLASS_TEST_BUS,
 | 
			
		||||
	.flags		= DM_UC_FLAG_SEQ_ALIAS,
 | 
			
		||||
	.child_pre_probe = testbus_child_pre_probe_uclass,
 | 
			
		||||
	.child_post_probe = testbus_child_post_probe_uclass,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Test that we can probe for children */
 | 
			
		||||
@ -547,3 +557,38 @@ static int dm_test_bus_child_pre_probe_uclass(struct unit_test_state *uts)
 | 
			
		||||
}
 | 
			
		||||
DM_TEST(dm_test_bus_child_pre_probe_uclass,
 | 
			
		||||
	DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Test that the bus' uclass' child_post_probe() is called after the
 | 
			
		||||
 * device's probe() method
 | 
			
		||||
 */
 | 
			
		||||
static int dm_test_bus_child_post_probe_uclass(struct unit_test_state *uts)
 | 
			
		||||
{
 | 
			
		||||
	struct udevice *bus, *dev;
 | 
			
		||||
	int child_count;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * See testfdt_drv_probe() which effectively initializes that
 | 
			
		||||
	 * the uclass postp flag is set to a value
 | 
			
		||||
	 */
 | 
			
		||||
	ut_assertok(uclass_get_device(UCLASS_TEST_BUS, 0, &bus));
 | 
			
		||||
	for (device_find_first_child(bus, &dev), child_count = 0;
 | 
			
		||||
	     dev;
 | 
			
		||||
	     device_find_next_child(&dev)) {
 | 
			
		||||
		struct dm_test_priv *priv = dev_get_priv(dev);
 | 
			
		||||
 | 
			
		||||
		/* Check that things happened in the right order */
 | 
			
		||||
		ut_asserteq_ptr(NULL, priv);
 | 
			
		||||
		ut_assertok(device_probe(dev));
 | 
			
		||||
 | 
			
		||||
		priv = dev_get_priv(dev);
 | 
			
		||||
		ut_assert(priv != NULL);
 | 
			
		||||
		ut_asserteq(0, priv->uclass_postp);
 | 
			
		||||
		child_count++;
 | 
			
		||||
	}
 | 
			
		||||
	ut_asserteq(3, child_count);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
DM_TEST(dm_test_bus_child_post_probe_uclass,
 | 
			
		||||
	DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
 | 
			
		||||
 | 
			
		||||
@ -55,10 +55,13 @@ static int testfdt_drv_probe(struct udevice *dev)
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * If this device is on a bus, the uclass_flag will be set before
 | 
			
		||||
	 * calling this function. This is used by
 | 
			
		||||
	 * dm_test_bus_child_pre_probe_uclass().
 | 
			
		||||
	 * calling this function. In the meantime the uclass_postp is
 | 
			
		||||
	 * initlized to a value -1. These are used respectively by
 | 
			
		||||
	 * dm_test_bus_child_pre_probe_uclass() and
 | 
			
		||||
	 * dm_test_bus_child_post_probe_uclass().
 | 
			
		||||
	 */
 | 
			
		||||
	priv->uclass_total += priv->uclass_flag;
 | 
			
		||||
	priv->uclass_postp = -1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user