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:
@@ -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);
|
||||||
|
@@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user