On 25 July 2015 at 06:52, Masahiro Yamada <yamada.masah...@socionext.com> wrote: > In U-Boot's driver model, memory is basically allocated and freed > in the core framework. So, low level drivers generally only have > to specify the size of needed memory with .priv_auto_alloc_size, > .platdata_auto_alloc_size, etc. Nevertheless, some drivers still > need to allocate/free memory on their own in case they cannot > statically know the necessary memory size. So, I believe it is > reasonable enough to port Devres into U-boot. > > Devres, which originates in Linux, manages device resources for each > device and automatically releases them on driver detach. With devres, > device resources are guaranteed to be freed whether initialization > fails half-way or the device gets detached. > > The basic idea is totally the same to that of Linux, but I tweaked > it a bit so that it fits in U-Boot's driver model. > > In U-Boot, drivers are activated in two steps: binding and probing. > Binding puts a driver and a device together. It is just data > manipulation on the system memory, so nothing has happened on the > hardware device at this moment. When the device is really used, it > is probed. Probing initializes the real hardware device to make it > really ready for use. > > So, the resources acquired during the probing process must be freed > when the device is removed. Likewise, what has been allocated in > binding should be released when the device is unbound. The struct > devres has a member "probe" to remember when the resource was > allocated. > > CONFIG_DEBUG_DEVRES is also supported for easier debugging. > If enabled, debug messages are printed each time a resource is > allocated/freed. > > Signed-off-by: Masahiro Yamada <yamada.masah...@socionext.com> > --- > > Changes in v4: > - Comment struct devres > > Changes in v3: > - Update git-description. Do not mention about the DM core part. > > Changes in v2: > - Add more APIs: _free, _find, _get, _remove, _destroy, _release > - Move devres_release_probe() and devres_release_all() decrlarations > to dm/device-internal.h > - Move comments to headers > > drivers/core/Kconfig | 10 +++ > drivers/core/Makefile | 2 +- > drivers/core/device-remove.c | 5 ++ > drivers/core/device.c | 3 + > drivers/core/devres.c | 196 > +++++++++++++++++++++++++++++++++++++++++++ > include/dm/device-internal.h | 19 +++++ > include/dm/device.h | 140 +++++++++++++++++++++++++++++++ > 7 files changed, 374 insertions(+), 1 deletion(-)
Acked-by: Simon Glass <s...@chromium.org> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot