[U-Boot] [PATCH v2 08/10] dm: syscon: Provide a generic syscon driver

Simon Glass sjg at chromium.org
Mon Aug 1 04:20:55 CEST 2016


Hi Paul,

On 27 July 2016 at 08:26, Paul Burton <paul.burton at imgtec.com> wrote:
> Provide a trivial syscon driver matching the generic "syscon" compatible
> string, allowing for simple system controllers to be used without a
> custom driver just as in Linux.
>
> Signed-off-by: Paul Burton <paul.burton at imgtec.com>
>
> ---
>
> Changes in v2:
> - New patch
>
>  drivers/core/syscon-uclass.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/drivers/core/syscon-uclass.c b/drivers/core/syscon-uclass.c
> index 01bd968..2148469 100644
> --- a/drivers/core/syscon-uclass.c
> +++ b/drivers/core/syscon-uclass.c
> @@ -95,3 +95,14 @@ UCLASS_DRIVER(syscon) = {
>         .per_device_auto_alloc_size = sizeof(struct syscon_uc_info),
>         .pre_probe = syscon_pre_probe,
>  };
> +
> +static const struct udevice_id generic_syscon_ids[] = {
> +       { .compatible = "syscon" },
> +       { }
> +};
> +
> +U_BOOT_DRIVER(generic_syscon) = {
> +       .name   = "syscon",
> +       .id     = UCLASS_SYSCON,
> +       .of_match = generic_syscon_ids,
> +};
> --
> 2.9.0
>

This would work if driver model checked compatible strings in priority
order. But it does not.

lists_bind_fdt() checks every driver to see if it is compatible. So
your driver may be picked in preference to a more specific one.

I've been aware of this limitation but it hasn't come up until now.

I suppose the solution is to flip things around so that we:

1. Pick a node
2. Look at each compatible string in turn, starting from the first
(most specific)
3. Search for a driver for that string

Do you want to take a look?

Regards,
Simon


More information about the U-Boot mailing list