Skip to content
  • Masahiro Yamada's avatar
    devres: introduce Devres (Managed Device Resource) framework · 608f26c5
    Masahiro Yamada authored
    
    
    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: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Acked-by: default avatarSimon Glass <sjg@chromium.org>
    608f26c5