diff options
author | Tom Rini <trini@konsulko.com> | 2020-07-06 15:46:38 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-07-06 15:46:38 -0400 |
commit | 6e7d7aa2e2062995c1cbc3af81cf40c04c50ad30 (patch) | |
tree | 3c560d567a76e9850e0195fb892d7e1fbaeed198 /drivers/core/uclass.c | |
parent | 2f5fbb5b39f7b67044dda5c35e4a4b31685a3109 (diff) | |
parent | 621e09cb3bf7e6d4fce9dd5e6de97e057adebc3a (diff) | |
download | u-boot-6e7d7aa2e2062995c1cbc3af81cf40c04c50ad30.tar.gz |
Merge branch 'next'
Merge all outstanding changes from the current next branch in now that
we have released.
Diffstat (limited to 'drivers/core/uclass.c')
-rw-r--r-- | drivers/core/uclass.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index 2ab419cfe4..c3f1b73cd6 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -689,13 +689,14 @@ int uclass_unbind_device(struct udevice *dev) int uclass_resolve_seq(struct udevice *dev) { + struct uclass *uc = dev->uclass; + struct uclass_driver *uc_drv = uc->uc_drv; struct udevice *dup; - int seq; + int seq = 0; int ret; assert(dev->seq == -1); - ret = uclass_find_device_by_seq(dev->uclass->uc_drv->id, dev->req_seq, - false, &dup); + 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); @@ -707,9 +708,17 @@ int uclass_resolve_seq(struct udevice *dev) return ret; } - for (seq = 0; seq < DM_MAX_SEQ; seq++) { - ret = uclass_find_device_by_seq(dev->uclass->uc_drv->id, seq, - false, &dup); + if (CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(DM_SEQ_ALIAS) && + (uc_drv->flags & DM_UC_FLAG_SEQ_ALIAS)) { + /* + * dev_read_alias_highest_id() will return -1 if there no + * alias. Thus we can always add one. + */ + seq = dev_read_alias_highest_id(uc_drv->name) + 1; + } + + for (; seq < DM_MAX_SEQ; seq++) { + ret = uclass_find_device_by_seq(uc_drv->id, seq, false, &dup); if (ret == -ENODEV) break; if (ret) |