diff mbox series

[U-Boot,v4,10/13] clk: test: Provide unit test forclk_get_by_id() method

Message ID 20190516221042.3583-11-lukma@denx.de
State Awaiting Upstream
Delegated to: Stefano Babic
Headers show
Series clk: Port Linux common clock framework[CCF] to U-boot (tag: 5.0-rc3) | expand

Commit Message

Lukasz Majewski May 16, 2019, 10:10 p.m. UTC
This commit provides sandbox unit test for clk_get_by_id() method.

To test it default test clocks setup had to be adjusted to emulate
structure similar to clocks in the Common Clock Framework [CCF] (for
iMX devices).

The clk_get_by_id() relies on dev->driver_data having the pointer to
struct clk.

Signed-off-by: Lukasz Majewski <lukma@denx.de>

---

Changes in v4: None
Changes in v3:
- New patch

 arch/sandbox/include/asm/clk.h |  8 ++++++++
 drivers/clk/clk_sandbox_test.c | 23 +++++++++++++++++++++++
 test/dm/clk.c                  |  3 ++-
 3 files changed, 33 insertions(+), 1 deletion(-)

Comments

Peng Fan May 17, 2019, 6 a.m. UTC | #1
> Subject: [PATCH v4 10/13] clk: test: Provide unit test for clk_get_by_id()
> method
> 
> This commit provides sandbox unit test for clk_get_by_id() method.
> 
> To test it default test clocks setup had to be adjusted to emulate structure
> similar to clocks in the Common Clock Framework [CCF] (for iMX devices).
> 
> The clk_get_by_id() relies on dev->driver_data having the pointer to struct
> clk.
> 
> Signed-off-by: Lukasz Majewski <lukma@denx.de>
> 
> ---
> 
> Changes in v4: None
> Changes in v3:
> - New patch
> 
>  arch/sandbox/include/asm/clk.h |  8 ++++++++
> drivers/clk/clk_sandbox_test.c | 23 +++++++++++++++++++++++
>  test/dm/clk.c                  |  3 ++-
>  3 files changed, 33 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/sandbox/include/asm/clk.h
> b/arch/sandbox/include/asm/clk.h index 2b1c49f783..90f925109f 100644
> --- a/arch/sandbox/include/asm/clk.h
> +++ b/arch/sandbox/include/asm/clk.h
> @@ -63,6 +63,14 @@ int sandbox_clk_query_enable(struct udevice *dev, int
> id);
>   */
>  int sandbox_clk_test_get(struct udevice *dev);
>  /**
> + * sandbox_clk_test_get_by_id - Ask the sandbox clock test device to
> +request its
> + * clocks by using clock id.
> + *
> + * @dev:	The sandbox clock test (client) devivce.
> + * @return:	0 if OK, or a negative error code.
> + */
> +int sandbox_clk_test_get_by_id(struct udevice *dev);
> +/**
>   * sandbox_clk_test_get_bulk - Ask the sandbox clock test device to request
> its
>   * clocks with the bulk clk API.
>   *
> diff --git a/drivers/clk/clk_sandbox_test.c b/drivers/clk/clk_sandbox_test.c
> index e8465dbfad..4d276f55b9 100644
> --- a/drivers/clk/clk_sandbox_test.c
> +++ b/drivers/clk/clk_sandbox_test.c
> @@ -34,6 +34,29 @@ int sandbox_clk_test_get(struct udevice *dev)
>  	return 0;
>  }
> 
> +int sandbox_clk_test_get_by_id(struct udevice *dev) {
> +	struct sandbox_clk_test *sbct = dev_get_priv(dev);
> +	struct clk *clkp, *i2c_clk;
> +	ulong driver_data_bkp;
> +	const int id = 24;
> +	int ret, id_bkp;
> +
> +	i2c_clk = &sbct->clks[SANDBOX_CLK_TEST_ID_I2C];
> +
> +	id_bkp = i2c_clk->id;
> +	i2c_clk->id = id;
> +	driver_data_bkp = i2c_clk->dev->driver_data;
> +	i2c_clk->dev->driver_data = (ulong)i2c_clk;
> +
> +	ret = clk_get_by_id(id, &clkp);
> +
> +	i2c_clk->id = id_bkp;
> +	i2c_clk->dev->driver_data = driver_data_bkp;
> +
> +	return ret;
> +}
> +
>  int sandbox_clk_test_get_bulk(struct udevice *dev)  {
>  	struct sandbox_clk_test *sbct = dev_get_priv(dev); diff --git
> a/test/dm/clk.c b/test/dm/clk.c index f301ecbb45..1685532259 100644
> --- a/test/dm/clk.c
> +++ b/test/dm/clk.c
> @@ -120,8 +120,9 @@ static int dm_test_clk(struct unit_test_state *uts)
>  	ut_asserteq(0, sandbox_clk_query_enable(dev_clk,
> SANDBOX_CLK_ID_SPI));
>  	ut_asserteq(0, sandbox_clk_query_enable(dev_clk,
> SANDBOX_CLK_ID_I2C));
> 
> -	ut_assertok(sandbox_clk_test_free(dev_test));
> +	ut_asserteq(0, sandbox_clk_test_get_by_id(dev_test));
> 
> +	ut_assertok(sandbox_clk_test_free(dev_test));
>  	return 0;

Reviewed-by: Peng Fan <peng.fan@nxp.com>

>  }
>  DM_TEST(dm_test_clk, DM_TESTF_SCAN_FDT);
> --
> 2.11.0
Stefano Babic June 10, 2019, 9:41 a.m. UTC | #2
> This commit provides sandbox unit test for clk_get_by_id() method.
> To test it default test clocks setup had to be adjusted to emulate
> structure similar to clocks in the Common Clock Framework [CCF] (for
> iMX devices).
> The clk_get_by_id() relies on dev->driver_data having the pointer to
> struct clk.
> Signed-off-by: Lukasz Majewski <lukma@denx.de>
> Reviewed-by: Peng Fan <peng.fan@nxp.com>

Applied to u-boot-imx, master, thanks !

Best regards,
Stefano Babic
diff mbox series

Patch

diff --git a/arch/sandbox/include/asm/clk.h b/arch/sandbox/include/asm/clk.h
index 2b1c49f783..90f925109f 100644
--- a/arch/sandbox/include/asm/clk.h
+++ b/arch/sandbox/include/asm/clk.h
@@ -63,6 +63,14 @@  int sandbox_clk_query_enable(struct udevice *dev, int id);
  */
 int sandbox_clk_test_get(struct udevice *dev);
 /**
+ * sandbox_clk_test_get_by_id - Ask the sandbox clock test device to request its
+ * clocks by using clock id.
+ *
+ * @dev:	The sandbox clock test (client) devivce.
+ * @return:	0 if OK, or a negative error code.
+ */
+int sandbox_clk_test_get_by_id(struct udevice *dev);
+/**
  * sandbox_clk_test_get_bulk - Ask the sandbox clock test device to request its
  * clocks with the bulk clk API.
  *
diff --git a/drivers/clk/clk_sandbox_test.c b/drivers/clk/clk_sandbox_test.c
index e8465dbfad..4d276f55b9 100644
--- a/drivers/clk/clk_sandbox_test.c
+++ b/drivers/clk/clk_sandbox_test.c
@@ -34,6 +34,29 @@  int sandbox_clk_test_get(struct udevice *dev)
 	return 0;
 }
 
+int sandbox_clk_test_get_by_id(struct udevice *dev)
+{
+	struct sandbox_clk_test *sbct = dev_get_priv(dev);
+	struct clk *clkp, *i2c_clk;
+	ulong driver_data_bkp;
+	const int id = 24;
+	int ret, id_bkp;
+
+	i2c_clk = &sbct->clks[SANDBOX_CLK_TEST_ID_I2C];
+
+	id_bkp = i2c_clk->id;
+	i2c_clk->id = id;
+	driver_data_bkp = i2c_clk->dev->driver_data;
+	i2c_clk->dev->driver_data = (ulong)i2c_clk;
+
+	ret = clk_get_by_id(id, &clkp);
+
+	i2c_clk->id = id_bkp;
+	i2c_clk->dev->driver_data = driver_data_bkp;
+
+	return ret;
+}
+
 int sandbox_clk_test_get_bulk(struct udevice *dev)
 {
 	struct sandbox_clk_test *sbct = dev_get_priv(dev);
diff --git a/test/dm/clk.c b/test/dm/clk.c
index f301ecbb45..1685532259 100644
--- a/test/dm/clk.c
+++ b/test/dm/clk.c
@@ -120,8 +120,9 @@  static int dm_test_clk(struct unit_test_state *uts)
 	ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
 	ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
 
-	ut_assertok(sandbox_clk_test_free(dev_test));
+	ut_asserteq(0, sandbox_clk_test_get_by_id(dev_test));
 
+	ut_assertok(sandbox_clk_test_free(dev_test));
 	return 0;
 }
 DM_TEST(dm_test_clk, DM_TESTF_SCAN_FDT);