diff options
| author | Tom Rini <[email protected]> | 2019-10-16 18:10:31 -0400 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2019-10-16 18:10:31 -0400 |
| commit | c83b1bb923421e95e499b22b010d2f9f463c1226 (patch) | |
| tree | 48860f46e83dc30d9a77fac61c979fb3625588d7 /drivers/core | |
| parent | d2a93a88631929169d3ef1c537430330404f96f7 (diff) | |
| parent | d11ef4d54cab0e740efbceb9c6b5697a41770eea (diff) | |
Merge tag 'dm-pull-15oct19' of https://gitlab.denx.de/u-boot/custodians/u-boot-dm
binman enhancements:
- Dropping some test Elf files and building them from source instead
- Refactoring of x86 16-bit entries
- Support for SPL symbols within sections
- Handle the 'notes' sections and hidden symbols in recent binutils
- Improved error reporting with a tool fails
libfdt and documentation fixes
vboot required-key test
driver model power-domain controls
patman Message-Id enhancement
Diffstat (limited to 'drivers/core')
| -rw-r--r-- | drivers/core/device-remove.c | 5 | ||||
| -rw-r--r-- | drivers/core/device.c | 14 | ||||
| -rw-r--r-- | drivers/core/dump.c | 4 | ||||
| -rw-r--r-- | drivers/core/uclass.c | 4 |
4 files changed, 20 insertions, 7 deletions
diff --git a/drivers/core/device-remove.c b/drivers/core/device-remove.c index 586fadee0a8..5c8dc4ad701 100644 --- a/drivers/core/device-remove.c +++ b/drivers/core/device-remove.c @@ -16,6 +16,7 @@ #include <dm/uclass.h> #include <dm/uclass-internal.h> #include <dm/util.h> +#include <power-domain.h> int device_chld_unbind(struct udevice *dev, struct driver *drv) { @@ -192,6 +193,10 @@ int device_remove(struct udevice *dev, uint flags) } } + if (!(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF) && + (dev != gd->cur_serial_dev)) + dev_power_domain_off(dev); + if (flags_remove(flags, drv->flags)) { device_free(dev); diff --git a/drivers/core/device.c b/drivers/core/device.c index ce66c72e5ec..95f26efdd3b 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -82,6 +82,11 @@ static int device_bind_common(struct udevice *parent, const struct driver *drv, 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->req_seq); +#if CONFIG_IS_ENABLED(OF_PRIOR_STAGE) + if (dev->req_seq == -1) + dev->req_seq = + uclass_find_next_free_req_seq(drv->id); +#endif } else { dev->req_seq = uclass_find_next_free_req_seq(drv->id); } @@ -307,7 +312,6 @@ static void *alloc_priv(int size, uint flags) int device_probe(struct udevice *dev) { - struct power_domain pd; const struct driver *drv; int size = 0; int ret; @@ -389,9 +393,11 @@ int device_probe(struct udevice *dev) pinctrl_select_state(dev, "default"); if (CONFIG_IS_ENABLED(POWER_DOMAIN) && dev->parent && - device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) { - if (!power_domain_get(dev, &pd)) - power_domain_on(&pd); + (device_get_uclass_id(dev) != UCLASS_POWER_DOMAIN) && + !(drv->flags & DM_FLAG_DEFAULT_PD_CTRL_OFF)) { + ret = dev_power_domain_on(dev); + if (ret) + goto fail; } ret = uclass_pre_probe_device(dev); diff --git a/drivers/core/dump.c b/drivers/core/dump.c index 8fbfd93fb5e..4704049aee5 100644 --- a/drivers/core/dump.c +++ b/drivers/core/dump.c @@ -16,7 +16,7 @@ static void show_devices(struct udevice *dev, int depth, int last_flag) struct udevice *child; /* print the first 20 characters to not break the tree-format. */ - printf(" %-10.10s %2d [ %c ] %-20.20s ", dev->uclass->uc_drv->name, + printf(" %-10.10s %3d [ %c ] %-20.20s ", dev->uclass->uc_drv->name, dev_get_uclass_index(dev, NULL), dev->flags & DM_FLAG_ACTIVATED ? '+' : ' ', dev->driver->name); @@ -64,7 +64,7 @@ void dm_dump_all(void) */ static void dm_display_line(struct udevice *dev, int index) { - printf("%i %c %s @ %08lx", index, + printf("%-3i %c %s @ %08lx", index, dev->flags & DM_FLAG_ACTIVATED ? '*' : ' ', dev->name, (ulong)map_to_sysmem(dev)); if (dev->seq != -1 || dev->req_seq != -1) diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index f217876cd2c..36f4d1c289d 100644 --- a/drivers/core/uclass.c +++ b/drivers/core/uclass.c @@ -269,7 +269,9 @@ int uclass_find_device_by_name(enum uclass_id id, const char *name, return -ENODEV; } -#if !CONFIG_IS_ENABLED(OF_CONTROL) || CONFIG_IS_ENABLED(OF_PLATDATA) +#if !CONFIG_IS_ENABLED(OF_CONTROL) || \ + CONFIG_IS_ENABLED(OF_PLATDATA) || \ + CONFIG_IS_ENABLED(OF_PRIOR_STAGE) int uclass_find_next_free_req_seq(enum uclass_id id) { struct uclass *uc; |
