dm: core: Add flags parameter to device_remove()

This patch adds the flags parameter to device_remove() and changes all
calls to this function to provide the default value of DM_REMOVE_NORMAL
for "normal" device removal.

This is in preparation for the driver specific pre-OS (e.g. DMA
cancelling) remove support.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Stefan Roese
2017-03-20 12:51:48 +01:00
committed by Simon Glass
parent 11db152246
commit 706865afe5
21 changed files with 65 additions and 37 deletions

View File

@@ -96,12 +96,13 @@ int device_probe(struct udevice *dev);
* children are deactivated first.
*
* @dev: Pointer to device to remove
* @flags: Flags for selective device removal
* @return 0 if OK, -ve on error (an error here is normally a very bad thing)
*/
#if CONFIG_IS_ENABLED(DM_DEVICE_REMOVE)
int device_remove(struct udevice *dev);
int device_remove(struct udevice *dev, uint flags);
#else
static inline int device_remove(struct udevice *dev) { return 0; }
static inline int device_remove(struct udevice *dev, uint flags) { return 0; }
#endif
/**

View File

@@ -46,6 +46,32 @@ struct driver_info;
#define DM_FLAG_OF_PLATDATA (1 << 8)
/*
* Call driver remove function to stop currently active DMA transfers or
* give DMA buffers back to the HW / controller. This may be needed for
* some drivers to do some final stage cleanup before the OS is called
* (U-Boot exit)
*/
#define DM_FLAG_ACTIVE_DMA (1 << 9)
/*
* One or multiple of these flags are passed to device_remove() so that
* a selective device removal as specified by the remove-stage and the
* driver flags can be done.
*/
enum {
/* Normal remove, remove all devices */
DM_REMOVE_NORMAL = 1 << 0,
/* Remove devices with active DMA */
DM_REMOVE_ACTIVE_DMA = DM_FLAG_ACTIVE_DMA,
/* Add more use cases here */
/* Remove devices with any active flag */
DM_REMOVE_ACTIVE_ALL = DM_REMOVE_ACTIVE_DMA,
};
/**
* struct udevice - An instance of a driver
*