mirror of
https://xff.cz/git/u-boot/
synced 2025-09-04 10:12:14 +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:
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -80,18 +80,21 @@ struct driver_info;
|
|||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
/* Normal remove, remove all devices */
|
/* Normal remove, remove all devices */
|
||||||
DM_REMOVE_NORMAL = 1 << 0,
|
DM_REMOVE_NORMAL = 1 << 0,
|
||||||
|
|
||||||
/* Remove devices with active DMA */
|
/* 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 */
|
/* 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 */
|
/* Add more use cases here */
|
||||||
|
|
||||||
/* 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,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user