dm: core: Update uclass_find_next_free_req_seq() args

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@chromium.org>
This commit is contained in:
Simon Glass 2020-12-16 21:20:08 -07:00
parent 8b85dfc675
commit d03adb4a78
4 changed files with 12 additions and 12 deletions

View file

@ -89,10 +89,10 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv,
#if CONFIG_IS_ENABLED(OF_PRIOR_STAGE) #if CONFIG_IS_ENABLED(OF_PRIOR_STAGE)
if (dev->req_seq == -1) if (dev->req_seq == -1)
dev->req_seq = dev->req_seq =
uclass_find_next_free_req_seq(drv->id); uclass_find_next_free_req_seq(uc);
#endif #endif
} else { } else {
dev->req_seq = uclass_find_next_free_req_seq(drv->id); dev->req_seq = uclass_find_next_free_req_seq(uc);
} }
} }

View file

@ -272,17 +272,11 @@ int uclass_find_device_by_name(enum uclass_id id, const char *name,
return -ENODEV; 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; struct udevice *dev;
int ret;
int max = -1; int max = -1;
ret = uclass_get(id, &uc);
if (ret)
return ret;
list_for_each_entry(dev, &uc->dev_head, uclass_node) { list_for_each_entry(dev, &uc->dev_head, uclass_node) {
if ((dev->req_seq != -1) && (dev->req_seq > max)) if ((dev->req_seq != -1) && (dev->req_seq > max))
max = dev->req_seq; max = dev->req_seq;

View file

@ -90,7 +90,9 @@ static int designware_i2c_pci_probe(struct udevice *dev)
static int designware_i2c_pci_bind(struct udevice *dev) static int designware_i2c_pci_bind(struct udevice *dev)
{ {
struct uclass *uc;
char name[20]; char name[20];
int ret;
if (dev_of_valid(dev)) if (dev_of_valid(dev))
return 0; 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 * be possible. We cannot use static data in drivers since they may be
* used in SPL or before relocation. * 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); sprintf(name, "i2c_designware#%u", dev->req_seq);
device_set_name(dev, name); device_set_name(dev, name);

View file

@ -19,10 +19,10 @@
* maximum req_seq of the uclass + 1. * maximum req_seq of the uclass + 1.
* This allows assiging req_seq number in the binding order. * 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 * @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 * uclass_get_device_tail() - handle the end of a get_device call