On Fri, Apr 08, 2016 at 04:34:25PM +0200, Martin Pieuchot wrote:
> On 08/04/16(Fri) 14:46, Patrick Wildt wrote:
> > Hi,
> > 
> > so that we can easily check if a node is compatible or to find nodes
> > that are compatible, I would like to add helpers to the fdt routines.
> > 
> > This way the drivers can check if they "match" to a node by simply
> > calling:
> > 
> >     if (fdt_node_compatible(ma->ma_node, "samsung,exynos4210-ehci"))
> >             return (1);
> > 
> > Sometimes it's helpful to find any node that is compatible.  It can
> > be helpful for instance on finding the early uart.  Simplified example:
> > 
> >     if ((node = fdt_find_compatible("arm,pl011")) != NULL)
> >             pl011cnattach(...);
> > 
> > Thoughts? ok?
> 
> Always hard to comment without seeing which code would use that.
> 
> Is a custom function really needed?  Why not do like sparc64 and macppc,
> for example your ehci_match() could be:
> 
> {
>       char compat[32];
>       ...
> 
>       if (OF_getprop(ma->ma_node, "compatible", compat, sizeof(compat)) == -1)
>               return 0;
>       
>       if (strcmp(compat, "samsung,exynos4210-ehci") == 0
>               return 1;
>       
>       return 0;
> }
> 

The compatible attribute can be a list of strings:

        compatible = "grinn,am335x-chiliboard", "grinn,am335x-chilisom",
                     "ti,am33xx";

Implementing parsing multiple strings in a buffer and checking it in
every _match function seemed a bit too much overhead. Imagine 20 drivers
doing the same code over and over again.

Especially if you're also are not looking for one compatible, but
multiple compatibles:

static char *ampintc_compatibles[] = {
        "arm,gic",
        "arm,cortex-a7-gic",
        "arm,cortex-a9-gic",
        "arm,cortex-a15-gic",
        NULL
};

        for (int i = 0; ampintc_compatibles[i]; i++)
                if (fdt_node_compatible(ia->ca_node,
                    ampintc_compatibles[i]))
                        return (1);

Reply via email to