diff options
Diffstat (limited to 'test/dm')
| -rw-r--r-- | test/dm/clk_ccf.c | 40 | ||||
| -rw-r--r-- | test/dm/core.c | 34 |
2 files changed, 72 insertions, 2 deletions
diff --git a/test/dm/clk_ccf.c b/test/dm/clk_ccf.c index 9c06aadb7ed..8bbb79bec2a 100644 --- a/test/dm/clk_ccf.c +++ b/test/dm/clk_ccf.c @@ -35,12 +35,14 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_ECSPI_ROOT), &clk); ut_assertok(ret); ut_asserteq_str("ecspi_root", clk->dev->name); + ut_assertnull(clk->parent_name); ut_asserteq(CLK_SET_RATE_PARENT, clk->flags); /* Test for clk_get_parent_rate() */ ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_ECSPI1), &clk); ut_assertok(ret); ut_asserteq_str("ecspi1", clk->dev->name); + ut_assertnull(clk->parent_name); ut_asserteq(CLK_SET_RATE_PARENT, clk->flags); rate = clk_get_parent_rate(clk); @@ -50,6 +52,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_ECSPI0), &clk); ut_assertok(ret); ut_asserteq_str("ecspi0", clk->dev->name); + ut_assertnull(clk->parent_name); ut_asserteq(CLK_SET_RATE_PARENT, clk->flags); rate = clk_get_parent_rate(clk); @@ -59,6 +62,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_USDHC1_SEL), &clk); ut_assertok(ret); ut_asserteq_str("usdhc1_sel", clk->dev->name); + ut_assertnull(clk->parent_name); ut_asserteq(CLK_SET_RATE_NO_REPARENT, clk->flags); rate = clk_get_parent_rate(clk); @@ -71,6 +75,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ut_asserteq_64(60000000, rate); ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_PLL3_80M), &pclk); + ut_assertnull(clk->parent_name); ut_assertok(ret); ret = clk_set_parent(clk, pclk); @@ -82,6 +87,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_USDHC2_SEL), &clk); ut_assertok(ret); ut_asserteq_str("usdhc2_sel", clk->dev->name); + ut_assertnull(clk->parent_name); ut_asserteq(CLK_SET_RATE_NO_REPARENT, clk->flags); rate = clk_get_parent_rate(clk); @@ -98,6 +104,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ut_asserteq_64(80000000, rate); ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_PLL3_60M), &pclk); + ut_assertnull(clk->parent_name); ut_assertok(ret); ret = clk_set_parent(clk, pclk); @@ -110,6 +117,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_I2C), &clk); ut_assertok(ret); ut_asserteq_str("i2c", clk->dev->name); + ut_assertnull(clk->parent_name); ut_asserteq(CLK_SET_RATE_UNGATE, clk->flags); rate = clk_get_rate(clk); @@ -124,11 +132,13 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_index(test_dev, SANDBOX_CLK_TEST_ID_I2C_ROOT, &clk_ccf); ut_assertok(ret); ut_asserteq_str("clk-ccf", clk_ccf.dev->name); + ut_assertnull(clk->parent_name); ut_asserteq(CLK_ID(clk_ccf.dev, SANDBOX_CLK_I2C_ROOT), clk_ccf.id); ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_I2C_ROOT), &clk); ut_assertok(ret); ut_asserteq_str("i2c_root", clk->dev->name); + ut_assertnull(clk->parent_name); ut_asserteq(SANDBOX_CLK_I2C_ROOT, clk_get_id(clk)); ret = clk_enable(&clk_ccf); @@ -138,6 +148,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ut_asserteq(1, ret); ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_I2C), &pclk); + ut_assertnull(clk->parent_name); ut_assertok(ret); ret = sandbox_clk_enable_count(pclk); @@ -156,6 +167,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_USDHC1_SEL), &clk); ut_assertok(ret); ut_asserteq_str("usdhc1_sel", clk->dev->name); + ut_assertnull(clk->parent_name); pclk = clk_get_parent(clk); ut_assertok_ptr(pclk); @@ -169,6 +181,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_id(CLK_ID(dev, clkid), &pclk); ut_assertok(ret); + ut_assertnull(clk->parent_name); ret = clk_set_parent(clk, pclk); ut_assertok(ret); pclk = clk_get_parent(clk); @@ -179,6 +192,7 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) ret = clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_I2C_ROOT), &clk); ut_assertok(ret); ut_asserteq_str("i2c_root", clk->dev->name); + ut_assertnull(clk->parent_name); /* Disable it, if any. */ ret = sandbox_clk_enable_count(clk); @@ -209,3 +223,29 @@ static int dm_test_clk_ccf(struct unit_test_state *uts) return 1; } DM_TEST(dm_test_clk_ccf, UTF_SCAN_FDT); + +#if CONFIG_IS_ENABLED(CLK_LAZY_REPARENT) +/* Test CLK_LAZY_REPARENT feature */ +static int dm_test_clk_lazy_reparent(struct unit_test_state *uts) +{ + struct udevice *dev; + struct clk *clk_i2s, *clk_i2s_root; + + /* Get the device using the clk device */ + ut_assertok(uclass_get_device_by_name(UCLASS_CLK, "clk-ccf", &dev)); + + ut_assertok(clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_I2S_ROOT), &clk_i2s_root)); + ut_assertok(clk_get_by_id(CLK_ID(dev, SANDBOX_CLK_I2S), &clk_i2s)); + + ut_asserteq_str(clk_i2s_root->parent_name, "i2s"); + ut_assertnull(clk_i2s_root->dev->parent); + + ut_assertok(clk_enable(clk_i2s_root)); + + ut_assertnull(clk_i2s_root->parent_name); + ut_asserteq_ptr(clk_i2s_root->dev->parent, clk_i2s->dev); + + return 0; +} +DM_TEST(dm_test_clk_lazy_reparent, UTF_SCAN_FDT); +#endif diff --git a/test/dm/core.c b/test/dm/core.c index 78ee14af228..d5a7954be95 100644 --- a/test/dm/core.c +++ b/test/dm/core.c @@ -696,9 +696,10 @@ DM_TEST(dm_test_children, 0); static int dm_test_device_reparent(struct unit_test_state *uts) { struct udevice *top[NODE_COUNT]; - struct udevice *child[NODE_COUNT]; + struct udevice *child[NODE_COUNT], *temp_child = NULL; struct udevice *grandchild[NODE_COUNT]; struct udevice *dev; + struct udevice *orphan; int total; int ret; int i; @@ -720,8 +721,11 @@ static int dm_test_device_reparent(struct unit_test_state *uts) ut_assertok(create_children(uts, child[i], NODE_COUNT, 50 * i, i == 2 ? grandchild : NULL)); + /* Create an orphan device */ + ut_assertok(create_children(uts, NULL, 1, 49, &orphan)); + /* Check total number of devices */ - total = NODE_COUNT * (3 + NODE_COUNT); + total = NODE_COUNT * (3 + NODE_COUNT) + 1; ut_asserteq(total, dm_testdrv_op_count[DM_TEST_OP_BIND]); /* Probe everything */ @@ -738,6 +742,14 @@ static int dm_test_device_reparent(struct unit_test_state *uts) ut_assertok(device_reparent(top[4], top[0])); + /* Ensure it's reparented */ + ut_asserteq_ptr(top[4]->parent, top[0]); + device_foreach_child(temp_child, top[0]) { + if (temp_child == top[4]) + break; + } + ut_asserteq_ptr(temp_child, top[4]); + /* try to get devices */ ret = uclass_find_first_device(UCLASS_TEST, &dev); ut_assert(!ret); @@ -773,6 +785,24 @@ static int dm_test_device_reparent(struct unit_test_state *uts) ut_assert(!ret); ut_assertnonnull(dev); + /* Re-parent orphant device */ + ut_assertok(device_reparent(orphan, top[0])); + + /* try to get the device */ + ret = uclass_find_first_device(UCLASS_TEST, &dev); + ut_assert(!ret); + ut_assertnonnull(dev); + + /* ensure it's reparented */ + ut_asserteq_ptr(orphan->parent, top[0]); + + temp_child = NULL; + device_foreach_child(temp_child, top[0]) { + if (temp_child == orphan) + break; + } + ut_asserteq_ptr(temp_child, orphan); + /* Remove re-pareneted devices. */ ut_assertok(device_remove(top[3], DM_REMOVE_NORMAL)); |
