diff mbox

[U-Boot,2/2] dm: test: Add tests for device's uclass platform data

Message ID 1428498114-7015-3-git-send-email-p.marczak@samsung.com
State Superseded
Delegated to: Simon Glass
Headers show

Commit Message

Przemyslaw Marczak April 8, 2015, 1:01 p.m. UTC
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(+)

Comments

Simon Glass April 8, 2015, 1:47 p.m. UTC | #1
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
Przemyslaw Marczak April 8, 2015, 1:58 p.m. UTC | #2
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 mbox

Patch

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),
 };