Message ID | 1428498114-7015-3-git-send-email-p.marczak@samsung.com |
---|---|
State | Superseded |
Delegated to: | Simon Glass |
Headers | show |
Hi Przemyslaw, On 8 April 2015 at 07:01, Przemyslaw Marczak <p.marczak@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@samsung.com> > Cc: Simon Glass <sjg@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@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
Hello Simon, On 04/08/2015 03:47 PM, Simon Glass wrote: > Hi Przemyslaw, > > On 8 April 2015 at 07:01, Przemyslaw Marczak <p.marczak@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@samsung.com> >> Cc: Simon Glass <sjg@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@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. > Ok, I will add this. >> + 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 > Thanks for a quick review. I will resend it in a moment Best regards,
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++) { + 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), };
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> --- include/dm/test.h | 20 +++++++++++++++++++ test/dm/core.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ test/dm/test-uclass.c | 11 +++++++++++ 3 files changed, 86 insertions(+)