[U-Boot] [PATCH 04/16] dm: board: Add a uclass for init functions
Igor Grinberg
grinberg at compulab.co.il
Mon Mar 20 07:54:40 UTC 2017
On 03/19/17 20:59, Simon Glass wrote:
> Add a uclass to handle board init. This allows drivers to be provided to
> perform the various phases of init. Functions are provided to call all
> devices that can handle a particular phase.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> common/Kconfig | 31 +++++++
> common/init/Makefile | 1 +
> common/init/board-uclass.c | 108 ++++++++++++++++++++++++
> include/asm-generic/global_data.h | 5 ++
> include/board.h | 170 ++++++++++++++++++++++++++++++++++++++
> include/dm/uclass-id.h | 1 +
> 6 files changed, 316 insertions(+)
> create mode 100644 common/init/board-uclass.c
> create mode 100644 include/board.h
[...]
> diff --git a/include/board.h b/include/board.h
> new file mode 100644
> index 0000000000..0975f5ac12
> --- /dev/null
> +++ b/include/board.h
[...]
> +/* Operations for the board driver */
> +struct board_ops {
> + /**
> + * phase() - Execute a phase of board init
> + *
> + * @dev: Device to use
> + * @phase: Phase to execute
> + * @return 0 if done, -ENOSYS if not supported (which is often fine),
> + BOARD_PHASE_CLAIMED if this was handled and that processing
> + of this phase should stop (i.e. do not send it to other
> + devices), other error if something went wrong
> + */
> + int (*phase)(struct udevice *dev, enum board_phase_t phase);
That looks a bit tiny interface.
This will force all the boards to define switch to figure out what the
current phase is... This might cause a problem (probably #ifdefs) in the board
code as some code will be available in SPL and some not.
I would prefer a wider interface instead of a single entry point to any
kind of flexibility to the board driver.
> +
> + /**
> + * get_desc() - Get a description string for a board
> + *
> + * @dev: Device to check (UCLASS_BOARD)
> + * @buf: Buffer to place string
> + * @size: Size of string space
> + * @return 0 if OK, -ENOSPC if buffer is too small, other -ve on error
> + */
> + int (*get_desc)(struct udevice *dev, char *buf, int size);
> +};
> +
> +#define board_get_ops(dev) ((struct board_ops *)(dev)->driver->ops)
> +
[...]
--
Regards,
Igor.
More information about the U-Boot
mailing list