1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-09 12:42:08 +02:00

dm: core: Add a way to skip powering down power domains

When removing a device the power domains it uses are generally powered
off. But when we are trying to unbind all devices (e.g. for running tests)
we don't want to probe a device in the 'remove' path.

Add a new flag to skip this power-down step.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2020-03-28 14:03:48 -06:00
parent 8474da946f
commit ced1080489
3 changed files with 10 additions and 6 deletions

View File

@@ -198,7 +198,8 @@ int device_remove(struct udevice *dev, uint flags)
} }
} }
if (!(drv->flags & if (!(flags & DM_REMOVE_NO_PD) &&
!(drv->flags &
(DM_FLAG_DEFAULT_PD_CTRL_OFF | DM_FLAG_REMOVE_WITH_PD_ON)) && (DM_FLAG_DEFAULT_PD_CTRL_OFF | DM_FLAG_REMOVE_WITH_PD_ON)) &&
dev != gd->cur_serial_dev) dev != gd->cur_serial_dev)
dev_power_domain_off(dev); dev_power_domain_off(dev);

View File

@@ -118,7 +118,7 @@ int uclass_destroy(struct uclass *uc)
while (!list_empty(&uc->dev_head)) { while (!list_empty(&uc->dev_head)) {
dev = list_first_entry(&uc->dev_head, struct udevice, dev = list_first_entry(&uc->dev_head, struct udevice,
uclass_node); uclass_node);
ret = device_remove(dev, DM_REMOVE_NORMAL); ret = device_remove(dev, DM_REMOVE_NORMAL | DM_REMOVE_NO_PD);
if (ret) if (ret)
return log_msg_ret("remove", ret); return log_msg_ret("remove", ret);
ret = device_unbind(dev); ret = device_unbind(dev);

View File

@@ -92,6 +92,9 @@ enum {
/* Remove devices with any active flag */ /* Remove devices with any active flag */
DM_REMOVE_ACTIVE_ALL = DM_REMOVE_ACTIVE_DMA | DM_REMOVE_OS_PREPARE, DM_REMOVE_ACTIVE_ALL = DM_REMOVE_ACTIVE_DMA | DM_REMOVE_OS_PREPARE,
/* Don't power down any attached power domains */
DM_REMOVE_NO_PD = 1 << 1,
}; };
/** /**