mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00: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:
parent
8474da946f
commit
ced1080489
3 changed files with 10 additions and 6 deletions
|
@ -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)) &&
|
||||
dev != gd->cur_serial_dev)
|
||||
dev_power_domain_off(dev);
|
||||
|
|
|
@ -118,7 +118,7 @@ int uclass_destroy(struct uclass *uc)
|
|||
while (!list_empty(&uc->dev_head)) {
|
||||
dev = list_first_entry(&uc->dev_head, struct udevice,
|
||||
uclass_node);
|
||||
ret = device_remove(dev, DM_REMOVE_NORMAL);
|
||||
ret = device_remove(dev, DM_REMOVE_NORMAL | DM_REMOVE_NO_PD);
|
||||
if (ret)
|
||||
return log_msg_ret("remove", ret);
|
||||
ret = device_unbind(dev);
|
||||
|
|
|
@ -80,18 +80,21 @@ struct driver_info;
|
|||
*/
|
||||
enum {
|
||||
/* Normal remove, remove all devices */
|
||||
DM_REMOVE_NORMAL = 1 << 0,
|
||||
DM_REMOVE_NORMAL = 1 << 0,
|
||||
|
||||
/* Remove devices with active DMA */
|
||||
DM_REMOVE_ACTIVE_DMA = DM_FLAG_ACTIVE_DMA,
|
||||
DM_REMOVE_ACTIVE_DMA = DM_FLAG_ACTIVE_DMA,
|
||||
|
||||
/* Remove devices which need some final OS preparation steps */
|
||||
DM_REMOVE_OS_PREPARE = DM_FLAG_OS_PREPARE,
|
||||
DM_REMOVE_OS_PREPARE = DM_FLAG_OS_PREPARE,
|
||||
|
||||
/* Add more use cases here */
|
||||
|
||||
/* 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,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue