[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