summaryrefslogtreecommitdiff
path: root/drivers/core
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2019-10-16 18:10:31 -0400
committerTom Rini <[email protected]>2019-10-16 18:10:31 -0400
commitc83b1bb923421e95e499b22b010d2f9f463c1226 (patch)
tree48860f46e83dc30d9a77fac61c979fb3625588d7 /drivers/core
parentd2a93a88631929169d3ef1c537430330404f96f7 (diff)
parentd11ef4d54cab0e740efbceb9c6b5697a41770eea (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.c5
-rw-r--r--drivers/core/device.c14
-rw-r--r--drivers/core/dump.c4
-rw-r--r--drivers/core/uclass.c4
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;