[PATCH 26/27] dm: core: Drop seq and req_seq

Simon Glass sjg at chromium.org
Mon Nov 30 02:54:01 CET 2020


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 at chromium.org>
---

 drivers/core/device-remove.c |  1 -
 drivers/core/device.c        | 18 +++---------------
 include/dm/device.h          |  9 +--------
 test/dm/test-fdt.c           | 28 ++++++++++++++++++++++++++++
 4 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c
index efdb0f29058..114bb1bcea8 100644
--- a/drivers/core/device-remove.c
+++ b/drivers/core/device-remove.c
@@ -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;
 	}
 
diff --git a/drivers/core/device.c b/drivers/core/device.c
index d9648f9394e..bcf437ac231 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -72,34 +72,23 @@ 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);
-			}
-			if (CONFIG_IS_ENABLED(OF_PRIOR_STAGE)) {
-				if (dev->req_seq == -1) {
+				if (dev_read_alias_seq(dev, &dev->sqq))
 					auto_seq = true;
-					dev->req_seq =
-						uclass_find_next_free_seq(uc);
-				}
+			} else {
+				auto_seq = true;
 			}
 		} else {
 			auto_seq = true;
-			dev->req_seq = uclass_find_next_free_seq(uc);
 		}
 		if (auto_seq && !(gd->flags & GD_FLG_DM_NO_SEQ))
 			dev->sqq = uclass_find_next_free_seq(uc);
@@ -518,7 +507,6 @@ fail_uclass:
 fail:
 	dev->flags &= ~DM_FLAG_ACTIVATED;
 
-	dev->seq = -1;
 	device_free(dev);
 
 	return ret;
diff --git a/include/dm/device.h b/include/dm/device.h
index 073c5438fc2..b95aa346820 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -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
diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c
index 50267f2fc26..c4de91da102 100644
--- a/test/dm/test-fdt.c
+++ b/test/dm/test-fdt.c
@@ -386,6 +386,34 @@ 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_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 at 1");
+	ut_assertok(device_bind(dm_root(), DM_GET_DRIVER(testfdt_drv),
+				"c-test at 1", NULL, node, &dev));
+	ut_asserteq(0, uclass_get_device_by_seq(UCLASS_TEST_FDT, 12, &dev));
+
+	/*
+	 * Now bind a device without an alias. It should not get the next
+	 * sequence number after all aliases, skipping 10 and 11
+	 */
+	ut_assertok(device_bind(dm_root(), DM_GET_DRIVER(testfdt_drv),
+				"fred", NULL, ofnode_null(), &dev));
+	ut_asserteq(13, dev_seq(dev));
+
+	ut_assertok(device_bind(dm_root(), DM_GET_DRIVER(testfdt_drv),
+				"fred2", NULL, ofnode_null(), &dev));
+	ut_asserteq(14, 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)
 {
-- 
2.29.2.454.gaff20da3a2-goog



More information about the U-Boot mailing list