From 981426e350801f2de93f385a371270f27dfeeb14 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Wed, 16 Dec 2020 21:20:26 -0700 Subject: dm: Switch over to use new sequence number for dev_seq() Update this function to use the new sequence number and fix up the test that deals with this. Signed-off-by: Simon Glass --- arch/sandbox/dts/test.dts | 2 +- drivers/core/uclass.c | 6 ++--- include/dm/device.h | 2 +- test/dm/test-fdt.c | 65 ++++++++++++++++++++++++++--------------------- 4 files changed, 40 insertions(+), 35 deletions(-) diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index f3b766271d..fb838049be 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -33,7 +33,7 @@ testfdt6 = "/e-test"; testbus3 = "/some-bus"; testfdt0 = "/some-bus/c-test@0"; - testfdt1 = "/some-bus/c-test@1"; + testfdt12 = "/some-bus/c-test@1"; testfdt3 = "/b-test"; testfdt5 = "/some-bus/c-test@5"; testfdt8 = "/a-test"; diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index 96b7d16f3f..c8432b2d1c 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -306,8 +306,7 @@ int uclass_find_device_by_seq(enum uclass_id id, int seq_or_req_seq, uclass_foreach_dev(dev, uc) { log_debug(" - %d %d '%s'\n", dev->req_seq, dev_seq(dev), dev->name); - if ((find_req_seq ? dev->req_seq : dev_seq(dev)) == - seq_or_req_seq) { + if (dev_seq(dev) == seq_or_req_seq) { *devp = dev; log_debug(" - found\n"); return 0; @@ -692,8 +691,7 @@ int uclass_resolve_seq(struct udevice *dev) assert(dev_seq(dev) == -1); ret = uclass_find_device_by_seq(uc_drv->id, dev->req_seq, false, &dup); if (!ret) { - dm_warn("Device '%s': seq %d is in use by '%s'\n", - dev->name, dev->req_seq, dup->name); + /* Do nothing here for now */ } else if (ret == -ENODEV) { /* Our requested sequence number is available */ if (dev->req_seq != -1) diff --git a/include/dm/device.h b/include/dm/device.h index 725e313eac..15731d6c27 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -192,7 +192,7 @@ static inline bool dev_has_of_node(struct udevice *dev) static inline int dev_seq(const struct udevice *dev) { - return dev->seq; + return dev->sqq; } /** diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c index fda2ba6493..f73cc33d9b 100644 --- a/test/dm/test-fdt.c +++ b/test/dm/test-fdt.c @@ -333,20 +333,28 @@ static int dm_test_fdt_uclass_seq(struct unit_test_state *uts) /* A few basic santiy tests */ ut_assertok(uclass_find_device_by_seq(UCLASS_TEST_FDT, 3, true, &dev)); ut_asserteq_str("b-test", dev->name); + ut_asserteq(3, dev_seq(dev)); ut_assertok(uclass_find_device_by_seq(UCLASS_TEST_FDT, 8, true, &dev)); ut_asserteq_str("a-test", dev->name); + ut_asserteq(8, dev_seq(dev)); - ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 5, - true, &dev)); + /* + * This device has no alias so gets the next value after all available + * aliases. The last alias is testfdt12 + */ + ut_assertok(uclass_find_device_by_seq(UCLASS_TEST_FDT, 13, true, &dev)); + ut_asserteq_str("d-test", dev->name); + ut_asserteq(13, dev_seq(dev)); + + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 9, true, + &dev)); ut_asserteq_ptr(NULL, dev); /* Test aliases */ ut_assertok(uclass_get_device_by_seq(UCLASS_TEST_FDT, 6, &dev)); ut_asserteq_str("e-test", dev->name); - - ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 7, - true, &dev)); + ut_asserteq(6, dev_seq(dev)); /* * Note that c-test nodes are not probed since it is not a top-level @@ -354,6 +362,7 @@ static int dm_test_fdt_uclass_seq(struct unit_test_state *uts) */ ut_assertok(uclass_get_device_by_seq(UCLASS_TEST_FDT, 3, &dev)); ut_asserteq_str("b-test", dev->name); + ut_asserteq(3, dev_seq(dev)); /* * d-test wants sequence number 3 also, but it can't have it because @@ -361,31 +370,29 @@ static int dm_test_fdt_uclass_seq(struct unit_test_state *uts) */ ut_assertok(uclass_get_device(UCLASS_TEST_FDT, 2, &dev)); ut_asserteq_str("d-test", dev->name); - - /* - * d-test actually gets 9, because thats the next free one after the - * aliases. - */ - ut_assertok(uclass_get_device_by_seq(UCLASS_TEST_FDT, 9, &dev)); - ut_asserteq_str("d-test", dev->name); - - /* initially no one wants seq 10 */ - ut_asserteq(-ENODEV, uclass_get_device_by_seq(UCLASS_TEST_FDT, 10, - &dev)); - ut_assertok(uclass_get_device(UCLASS_TEST_FDT, 0, &dev)); - ut_assertok(uclass_get_device(UCLASS_TEST_FDT, 4, &dev)); - - /* But now that it is probed, we can find it */ - ut_assertok(uclass_get_device_by_seq(UCLASS_TEST_FDT, 10, &dev)); - ut_asserteq_str("f-test", dev->name); - - /* - * And we should still have holes in our sequence numbers, that is 2 - * and 4 should not be used. - */ - ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 2, + ut_asserteq(13, dev_seq(dev)); + + /* g-test gets the next value after f-test */ + ut_assertok(uclass_get_device_by_seq(UCLASS_TEST_FDT, 15, &dev)); + ut_asserteq_str("g-test", dev->name); + ut_asserteq(15, dev_seq(dev)); + + /* And we should still have holes in our sequence numbers */ + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 0, true, + &dev)); + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 1, true, + &dev)); + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 2, true, + &dev)); + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 4, true, + &dev)); + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 7, true, + &dev)); + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 9, true, + &dev)); + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 10, true, &dev)); - ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 4, + ut_asserteq(-ENODEV, uclass_find_device_by_seq(UCLASS_TEST_FDT, 11, true, &dev)); return 0; -- cgit v1.2.3