Hello Simon,

On 04/08/2015 03:47 PM, Simon Glass wrote:
Hi Przemyslaw,

On 8 April 2015 at 07:01, Przemyslaw Marczak <[email protected]> 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 <[email protected]>
Cc: Simon Glass <[email protected]>
---
  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 <[email protected]>

(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,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
[email protected]
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to