mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 14:10:43 +00:00
dm: test: Add tests for device's uclass platform data
This test introduces new test structure type:dm_test_perdev_uc_pdata. The structure consists of three int values only. For the test purposes, three pattern values are defined by enum, starting with TEST_UC_PDATA_INTVAL1. This commit adds two test cases for uclass platform data: - Test: dm_test_autobind_uclass_pdata_alloc - this tests if: * uclass driver sets: .per_device_platdata_auto_alloc_size field * the devices's: dev->uclass_platdata is non-NULL - Test: dm_test_autobind_uclass_pdata_valid - this tests: * if the devices's: dev->uclass_platdata is non-NULL * the structure of type 'dm_test_perdev_uc_pdata' allocated at address pointed by dev->uclass_platdata. Each structure field, should be equal to proper pattern data, starting from .intval1 == TEST_UC_PDATA_INTVAL1. Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Cc: Simon Glass <sjg@chromium.org> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
5eaed88028
commit
754e71e850
3 changed files with 86 additions and 0 deletions
|
@ -98,6 +98,26 @@ struct dm_test_parent_data {
|
|||
int flag;
|
||||
};
|
||||
|
||||
/* Test values for test device's uclass platform data */
|
||||
enum {
|
||||
TEST_UC_PDATA_INTVAL1 = 2,
|
||||
TEST_UC_PDATA_INTVAL2 = 334,
|
||||
TEST_UC_PDATA_INTVAL3 = 789452,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dm_test_uclass_platda - uclass's information on each device
|
||||
*
|
||||
* @intval1: set to TEST_UC_PDATA_INTVAL1 in .post_bind method of test uclass
|
||||
* @intval2: set to TEST_UC_PDATA_INTVAL2 in .post_bind method of test uclass
|
||||
* @intval3: set to TEST_UC_PDATA_INTVAL3 in .post_bind method of test uclass
|
||||
*/
|
||||
struct dm_test_perdev_uc_pdata {
|
||||
int intval1;
|
||||
int intval2;
|
||||
int intval3;
|
||||
};
|
||||
|
||||
/*
|
||||
* Operation counts for the test driver, used to check that each method is
|
||||
* called correctly
|
||||
|
|
|
@ -129,6 +129,61 @@ static int dm_test_autobind(struct dm_test_state *dms)
|
|||
}
|
||||
DM_TEST(dm_test_autobind, 0);
|
||||
|
||||
/* Test that binding with uclass platdata allocation occurs correctly */
|
||||
static int dm_test_autobind_uclass_pdata_alloc(struct dm_test_state *dms)
|
||||
{
|
||||
struct dm_test_perdev_uc_pdata *uc_pdata;
|
||||
struct udevice *dev;
|
||||
struct uclass *uc;
|
||||
|
||||
ut_assertok(uclass_get(UCLASS_TEST, &uc));
|
||||
ut_assert(uc);
|
||||
|
||||
/**
|
||||
* Test if test uclass driver requires allocation for the uclass
|
||||
* platform data and then check the dev->uclass_platdata pointer.
|
||||
*/
|
||||
ut_assert(uc->uc_drv->per_device_platdata_auto_alloc_size);
|
||||
|
||||
for (uclass_find_first_device(UCLASS_TEST, &dev);
|
||||
dev;
|
||||
uclass_find_next_device(&dev)) {
|
||||
ut_assert(dev);
|
||||
|
||||
uc_pdata = dev_get_uclass_platdata(dev);
|
||||
ut_assert(uc_pdata);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
DM_TEST(dm_test_autobind_uclass_pdata_alloc, DM_TESTF_SCAN_PDATA);
|
||||
|
||||
/* Test that binding with uclass platdata setting occurs correctly */
|
||||
static int dm_test_autobind_uclass_pdata_valid(struct dm_test_state *dms)
|
||||
{
|
||||
struct dm_test_perdev_uc_pdata *uc_pdata;
|
||||
struct udevice *dev;
|
||||
|
||||
/**
|
||||
* In the test_postbind() method of test uclass driver, the uclass
|
||||
* platform data should be set to three test int values - test it.
|
||||
*/
|
||||
for (uclass_find_first_device(UCLASS_TEST, &dev);
|
||||
dev;
|
||||
uclass_find_next_device(&dev)) {
|
||||
ut_assert(dev);
|
||||
|
||||
uc_pdata = dev_get_uclass_platdata(dev);
|
||||
ut_assert(uc_pdata);
|
||||
ut_assert(uc_pdata->intval1 == TEST_UC_PDATA_INTVAL1);
|
||||
ut_assert(uc_pdata->intval2 == TEST_UC_PDATA_INTVAL2);
|
||||
ut_assert(uc_pdata->intval3 == TEST_UC_PDATA_INTVAL3);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
DM_TEST(dm_test_autobind_uclass_pdata_valid, DM_TESTF_SCAN_PDATA);
|
||||
|
||||
/* Test that autoprobe finds all the expected devices */
|
||||
static int dm_test_autoprobe(struct dm_test_state *dms)
|
||||
{
|
||||
|
|
|
@ -30,9 +30,18 @@ int test_ping(struct udevice *dev, int pingval, int *pingret)
|
|||
|
||||
static int test_post_bind(struct udevice *dev)
|
||||
{
|
||||
struct dm_test_perdev_uc_pdata *uc_pdata;
|
||||
|
||||
dm_testdrv_op_count[DM_TEST_OP_POST_BIND]++;
|
||||
ut_assert(!device_active(dev));
|
||||
|
||||
uc_pdata = dev_get_uclass_platdata(dev);
|
||||
ut_assert(uc_pdata);
|
||||
|
||||
uc_pdata->intval1 = TEST_UC_PDATA_INTVAL1;
|
||||
uc_pdata->intval2 = TEST_UC_PDATA_INTVAL2;
|
||||
uc_pdata->intval3 = TEST_UC_PDATA_INTVAL3;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -115,4 +124,6 @@ UCLASS_DRIVER(test) = {
|
|||
.destroy = test_destroy,
|
||||
.priv_auto_alloc_size = sizeof(struct dm_test_uclass_priv),
|
||||
.per_device_auto_alloc_size = sizeof(struct dm_test_uclass_perdev_priv),
|
||||
.per_device_platdata_auto_alloc_size =
|
||||
sizeof(struct dm_test_perdev_uc_pdata),
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue