summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-12-16 21:20:27 -0700
committerSimon Glass <sjg@chromium.org>2020-12-18 20:32:21 -0700
commit93f44e8a8c8c7878c76d3415f1d425d4fa418287 (patch)
tree9477adec99460b27cdc1fa95c5e0d9ad14f90a20
parent981426e350801f2de93f385a371270f27dfeeb14 (diff)
downloadu-boot-93f44e8a8c8c7878c76d3415f1d425d4fa418287.tar.gz
dm: test: Add a test for DM_UC_FLAG_NO_AUTO_SEQ
Check that this flag operates as expected. This patch is not earlier in this series since is uses the new behaviour of dev_seq(). Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--arch/sandbox/dts/test.dts13
-rw-r--r--include/dm/uclass-id.h1
-rw-r--r--test/dm/test-fdt.c42
3 files changed, 56 insertions, 0 deletions
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index fb838049be..d49bee43aa 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -37,6 +37,7 @@
testfdt3 = "/b-test";
testfdt5 = "/some-bus/c-test@5";
testfdt8 = "/a-test";
+ testfdtm1 = &testfdtm1;
fdt-dummy0 = "/translation-test@8000/dev@0,0";
fdt-dummy1 = "/translation-test@8000/dev@1,100";
fdt-dummy2 = "/translation-test@8000/dev@2,200";
@@ -917,6 +918,18 @@
idle-state = <0xabcd>;
};
+ testfdtm0 {
+ compatible = "denx,u-boot-fdtm-test";
+ };
+
+ testfdtm1: testfdtm1 {
+ compatible = "denx,u-boot-fdtm-test";
+ };
+
+ testfdtm2 {
+ compatible = "denx,u-boot-fdtm-test";
+ };
+
timer@0 {
compatible = "sandbox,timer";
clock-frequency = <1000000>;
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index e952a9967c..ae4425d7a5 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -16,6 +16,7 @@ enum uclass_id {
UCLASS_DEMO,
UCLASS_TEST,
UCLASS_TEST_FDT,
+ UCLASS_TEST_FDT_MANUAL,
UCLASS_TEST_BUS,
UCLASS_TEST_PROBE,
UCLASS_TEST_DUMMY,
diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c
index f73cc33d9b..87e09f19cd 100644
--- a/test/dm/test-fdt.c
+++ b/test/dm/test-fdt.c
@@ -126,6 +126,23 @@ UCLASS_DRIVER(testfdt) = {
.flags = DM_UC_FLAG_SEQ_ALIAS,
};
+static const struct udevice_id testfdtm_ids[] = {
+ { .compatible = "denx,u-boot-fdtm-test" },
+ { }
+};
+
+U_BOOT_DRIVER(testfdtm_drv) = {
+ .name = "testfdtm_drv",
+ .of_match = testfdtm_ids,
+ .id = UCLASS_TEST_FDT_MANUAL,
+};
+
+UCLASS_DRIVER(testfdtm) = {
+ .name = "testfdtm",
+ .id = UCLASS_TEST_FDT_MANUAL,
+ .flags = DM_UC_FLAG_SEQ_ALIAS | DM_UC_FLAG_NO_AUTO_SEQ,
+};
+
struct dm_testprobe_pdata {
int probe_err;
};
@@ -399,6 +416,31 @@ static int dm_test_fdt_uclass_seq(struct unit_test_state *uts)
}
DM_TEST(dm_test_fdt_uclass_seq, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+/* More tests for sequence numbers */
+static int dm_test_fdt_uclass_seq_manual(struct unit_test_state *uts)
+{
+ struct udevice *dev;
+
+ /*
+ * Since DM_UC_FLAG_NO_AUTO_SEQ is set for this uclass, only testfdtm1
+ * should get a sequence number assigned
+ */
+ ut_assertok(uclass_get_device(UCLASS_TEST_FDT_MANUAL, 0, &dev));
+ ut_asserteq_str("testfdtm0", dev->name);
+ ut_asserteq(-1, dev_seq(dev));
+
+ ut_assertok(uclass_get_device_by_seq(UCLASS_TEST_FDT_MANUAL, 1, &dev));
+ ut_asserteq_str("testfdtm1", dev->name);
+ ut_asserteq(1, dev_seq(dev));
+
+ ut_assertok(uclass_get_device(UCLASS_TEST_FDT_MANUAL, 2, &dev));
+ ut_asserteq_str("testfdtm2", dev->name);
+ ut_asserteq(-1, dev_seq(dev));
+
+ return 0;
+}
+DM_TEST(dm_test_fdt_uclass_seq_manual, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
/* Test that we can find a device by device tree offset */
static int dm_test_fdt_offset(struct unit_test_state *uts)
{