dm: core: Drop seq and req_seq
authorSimon Glass <sjg@chromium.org>
Thu, 17 Dec 2020 04:20:32 +0000 (21:20 -0700)
committerSimon Glass <sjg@chromium.org>
Sat, 19 Dec 2020 03:32:21 +0000 (20:32 -0700)
Now that migration to the new sequence numbers is complete, drop the old
fields. Add a test that covers the new behaviour.

Also drop the check for OF_PRIOR_STAGE since we always assign sequence
numbers now.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/device-remove.c
drivers/core/device.c
include/dm/device.h
test/dm/test-fdt.c

index 9f7615d..289220b 100644 (file)
@@ -207,7 +207,6 @@ int device_remove(struct udevice *dev, uint flags)
        if (flags_remove(flags, drv->flags)) {
                device_free(dev);
 
-               dev->seq = -1;
                dev->flags &= ~DM_FLAG_ACTIVATED;
        }
 
index 4abb5be..d1a08ce 100644 (file)
@@ -72,30 +72,18 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
        dev->driver = drv;
        dev->uclass = uc;
 
-       dev->seq = -1;
-       dev->req_seq = -1;
        dev->sqq = -1;
        if (CONFIG_IS_ENABLED(DM_SEQ_ALIAS) &&
            (uc->uc_drv->flags & DM_UC_FLAG_SEQ_ALIAS)) {
                /*
                 * Some devices, such as a SPI bus, I2C bus and serial ports
                 * are numbered using aliases.
-                *
-                * This is just a 'requested' sequence, and will be
-                * resolved (and ->seq updated) when the device is probed.
                 */
                if (CONFIG_IS_ENABLED(OF_CONTROL) &&
                    !CONFIG_IS_ENABLED(OF_PLATDATA)) {
                        if (uc->uc_drv->name && ofnode_valid(node)) {
-                               dev_read_alias_seq(dev, &dev->sqq);
-                               dev_read_alias_seq(dev, &dev->req_seq);
-                               auto_seq = false;
-                       }
-                       if (CONFIG_IS_ENABLED(OF_PRIOR_STAGE)) {
-                               if (dev->req_seq == -1) {
-                                       dev->req_seq =
-                                               uclass_find_next_free_seq(uc);
-                               }
+                               if (!dev_read_alias_seq(dev, &dev->sqq))
+                                       auto_seq = false;
                        }
                }
        }
@@ -509,7 +497,6 @@ fail_uclass:
 fail:
        dev->flags &= ~DM_FLAG_ACTIVATED;
 
-       dev->seq = -1;
        device_free(dev);
 
        return ret;
index 75f7549..30fc98d 100644 (file)
@@ -131,16 +131,11 @@ enum {
  * @child_head: List of children of this device
  * @sibling_node: Next device in list of all devices
  * @flags: Flags for this device DM_FLAG_...
- * @sqq: Allocated sequence number for this device (-1 = none). This is set up
+ * @seq: Allocated sequence number for this device (-1 = none). This is set up
  * when the device is bound and is unique within the device's uclass. If the
  * device has an alias in the devicetree then that is used to set the sequence
  * number. Otherwise, the next available number is used. Sequence numbers are
  * used by certain commands that need device to be numbered (e.g. 'mmc dev')
- *
- * The following two fields are deprecated:
- * @req_seq: Requested sequence number for this device (-1 = any)
- * @seq: Allocated sequence number for this device (-1 = none). This is set up
- * when the device is probed and will be unique within the device's uclass.
  * @devres_head: List of memory allocations associated with this device.
  *             When CONFIG_DEVRES is enabled, devm_kmalloc() and friends will
  *             add to this list. Memory so-allocated will be freed
@@ -164,8 +159,6 @@ struct udevice {
        struct list_head sibling_node;
        uint32_t flags;
        int sqq;
-       int req_seq;
-       int seq;
 #ifdef CONFIG_DEVRES
        struct list_head devres_head;
 #endif
index 5f443bd..eb3c2cf 100644 (file)
@@ -441,6 +441,45 @@ static int dm_test_fdt_uclass_seq_manual(struct unit_test_state *uts)
 }
 DM_TEST(dm_test_fdt_uclass_seq_manual, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
 
+static int dm_test_fdt_uclass_seq_more(struct unit_test_state *uts)
+{
+       struct udevice *dev;
+       ofnode node;
+
+       /* Check creating a device with an alias */
+       node = ofnode_path("/some-bus/c-test@1");
+       ut_assertok(device_bind(dm_root(), DM_GET_DRIVER(testfdt_drv),
+                               "c-test@1", NULL, node, &dev));
+       ut_asserteq(12, dev_seq(dev));
+       ut_assertok(uclass_get_device_by_seq(UCLASS_TEST_FDT, 12, &dev));
+       ut_asserteq_str("c-test@1", dev->name);
+
+       /*
+        * Now bind a device without an alias. It should not get the next
+        * sequence number after all aliases, and existing bound devices. The
+        * last alias is 12, so we have:
+        *
+        * 13 d-test
+        * 14 f-test
+        * 15 g-test
+        * 16 h-test
+        * 17 another-test
+        * 18 chosen-test
+        *
+        * So next available is 19
+        */
+       ut_assertok(device_bind(dm_root(), DM_GET_DRIVER(testfdt_drv),
+                               "fred", NULL, ofnode_null(), &dev));
+       ut_asserteq(19, dev_seq(dev));
+
+       ut_assertok(device_bind(dm_root(), DM_GET_DRIVER(testfdt_drv),
+                               "fred2", NULL, ofnode_null(), &dev));
+       ut_asserteq(20, dev_seq(dev));
+
+       return 0;
+}
+DM_TEST(dm_test_fdt_uclass_seq_more, 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)
 {