[U-Boot] [PATCH 2/2] dm: test: Add tests for device's uclass platform data
Simon Glass
sjg at chromium.org
Wed Apr 8 15:47:17 CEST 2015
Hi Przemyslaw,
On 8 April 2015 at 07:01, Przemyslaw Marczak <p.marczak at samsung.com> wrote:
> 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 at samsung.com>
> Cc: Simon Glass <sjg at chromium.org>
> ---
> include/dm/test.h | 20 +++++++++++++++++++
> test/dm/core.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++
> test/dm/test-uclass.c | 11 +++++++++++
> 3 files changed, 86 insertions(+)
Acked-by: Simon Glass <sjg at chromium.org>
(one nit below)
>
> diff --git a/include/dm/test.h b/include/dm/test.h
> index 9c4b8d3..f03fbcb 100644
> --- a/include/dm/test.h
> +++ b/include/dm/test.h
> @@ -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
> diff --git a/test/dm/core.c b/test/dm/core.c
> index 990d390..ce8a958 100644
> --- a/test/dm/core.c
> +++ b/test/dm/core.c
> @@ -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;
> + int i;
> +
> + 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 (i = 0; i < 3; i++) {
nit: Can you add an enum for the '3' here, and below? It could be
TEST_UC_PDATA_COUNT if you like.
> + ut_assertok(uclass_find_device(UCLASS_TEST, i, &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;
> + int i;
> +
> + /**
> + * In the test_postbind() method of test uclass driver, the uclass
> + * platform data should be set with three test int values - test it.
> + */
> + for (i = 0; i < 3; i++) {
> + ut_assertok(uclass_find_device(UCLASS_TEST, i, &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)
> {
> diff --git a/test/dm/test-uclass.c b/test/dm/test-uclass.c
> index 7cb37f7..4ae75ef 100644
> --- a/test/dm/test-uclass.c
> +++ b/test/dm/test-uclass.c
> @@ -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),
> };
> --
> 1.9.1
>
Regards,
Simon
More information about the U-Boot
mailing list