[PATCH v3] of: Keep track of populated platform devices

Rob Herring robherring2 at gmail.com
Tue May 13 05:24:50 PDT 2014


On Tue, May 13, 2014 at 6:48 AM, Pawel Moll <pawel.moll at arm.com> wrote:
> In "Device Tree powered" systems, platform devices are usually
> massively populated with of_platform_populate() call, executed
> at some level of initcalls, either by generic architecture
> or by platform-specific code.
>
> There are situations though where certain devices must be
> created (and bound with drivers) before all the others.
> This presents a challenge, as devices created explicitly
> would be created again by of_platform_populate().
>
> This patch tries to solve that issue in a generic way,
> adding a "populated" flag for a DT node description.
> Once set, this device will never be created again via
> of_* API, so of_platform_populate() will skip such nodes
> (and its children) in a similar way to the non-available
> ones.
>
> The flag is cleared when a device is being removed and
> returns the DT node by calling of_device_node_put() (it
> was missing from the amba device release function, added).
>
> Signed-off-by: Pawel Moll <pawel.moll at arm.com>

A few formatting nits, but otherwise:

Reviewed-by: Rob Herring <robh at kernel.org>

[..]

> @@ -206,12 +206,13 @@ static struct platform_device *of_platform_device_create_pdata(
>  {
>         struct platform_device *dev;
>
> -       if (!of_device_is_available(np))
> +       if (!of_device_is_available(np) ||
> +                       of_node_test_and_set_flag(np, OF_POPULATED))

This should be lined up with the ! on the previous line.


> @@ -264,14 +269,15 @@ static struct amba_device *of_amba_device_create(struct device_node *node,
>
>         pr_debug("Creating amba device %s\n", node->full_name);
>
> -       if (!of_device_is_available(node))
> +       if (!of_device_is_available(node) ||
> +                       of_node_test_and_set_flag(node, OF_POPULATED))

And this one.

>                 return NULL;

Rob



More information about the linux-arm-kernel mailing list