[PATCH v3 03/28] dm: core: Update uclass_find_next_free_req_seq() args

Simon Glass sjg at chromium.org
Thu Dec 17 05:20:08 CET 2020


At present this is passed a uclass ID and it has to do a lookup. The
callers all have the uclass pointer, except for the I2C uclass where the
code will soon be deleted.

Update the argument to a uclass * instead of an ID since it is more
efficient.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

(no changes since v1)

 drivers/core/device.c            | 4 ++--
 drivers/core/uclass.c            | 8 +-------
 drivers/i2c/designware_i2c_pci.c | 8 +++++++-
 include/dm/uclass-internal.h     | 4 ++--
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/core/device.c b/drivers/core/device.c
index fce990994ca..22d80694cd8 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -89,10 +89,10 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
 #if CONFIG_IS_ENABLED(OF_PRIOR_STAGE)
 			if (dev->req_seq == -1)
 				dev->req_seq =
-					uclass_find_next_free_req_seq(drv->id);
+					uclass_find_next_free_req_seq(uc);
 #endif
 		} else {
-			dev->req_seq = uclass_find_next_free_req_seq(drv->id);
+			dev->req_seq = uclass_find_next_free_req_seq(uc);
 		}
 	}
 
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c
index e2372c65d29..96b7d16f3fc 100644
--- a/drivers/core/uclass.c
+++ b/drivers/core/uclass.c
@@ -272,17 +272,11 @@ int uclass_find_device_by_name(enum uclass_id id, const char *name,
 	return -ENODEV;
 }
 
-int uclass_find_next_free_req_seq(enum uclass_id id)
+int uclass_find_next_free_req_seq(struct uclass *uc)
 {
-	struct uclass *uc;
 	struct udevice *dev;
-	int ret;
 	int max = -1;
 
-	ret = uclass_get(id, &uc);
-	if (ret)
-		return ret;
-
 	list_for_each_entry(dev, &uc->dev_head, uclass_node) {
 		if ((dev->req_seq != -1) && (dev->req_seq > max))
 			max = dev->req_seq;
diff --git a/drivers/i2c/designware_i2c_pci.c b/drivers/i2c/designware_i2c_pci.c
index 8d7b1fe6df3..3c15320674b 100644
--- a/drivers/i2c/designware_i2c_pci.c
+++ b/drivers/i2c/designware_i2c_pci.c
@@ -90,7 +90,9 @@ static int designware_i2c_pci_probe(struct udevice *dev)
 
 static int designware_i2c_pci_bind(struct udevice *dev)
 {
+	struct uclass *uc;
 	char name[20];
+	int ret;
 
 	if (dev_of_valid(dev))
 		return 0;
@@ -108,7 +110,11 @@ static int designware_i2c_pci_bind(struct udevice *dev)
 	 * be possible. We cannot use static data in drivers since they may be
 	 * used in SPL or before relocation.
 	 */
-	dev->req_seq = uclass_find_next_free_req_seq(UCLASS_I2C);
+	ret = uclass_get(UCLASS_I2C, &uc);
+	if (ret)
+		return ret;
+
+	dev->req_seq = uclass_find_next_free_req_seq(uc);
 	sprintf(name, "i2c_designware#%u", dev->req_seq);
 	device_set_name(dev, name);
 
diff --git a/include/dm/uclass-internal.h b/include/dm/uclass-internal.h
index 6e3f15c2b08..2c21871e0fd 100644
--- a/include/dm/uclass-internal.h
+++ b/include/dm/uclass-internal.h
@@ -19,10 +19,10 @@
  * maximum req_seq of the uclass + 1.
  * This allows assiging req_seq number in the binding order.
  *
- * @id:		Id number of the uclass
+ * @uc:		uclass to check
  * @return	The next free req_seq number
  */
-int uclass_find_next_free_req_seq(enum uclass_id id);
+int uclass_find_next_free_req_seq(struct uclass *uc);
 
 /**
  * uclass_get_device_tail() - handle the end of a get_device call
-- 
2.29.2.684.gfbc64c5ab5-goog



More information about the U-Boot mailing list