[RFC 2/3] OLPC: add missing elements to device tree
Andres Salomon
dilinger at queued.net
Thu Mar 10 13:51:25 EST 2011
On Sat, 5 Mar 2011 17:19:43 -0700
Grant Likely <grant.likely at secretlab.ca> wrote:
> On Sat, Mar 05, 2011 at 09:23:47AM -0800, Andres Salomon wrote:
> > On Fri, 4 Mar 2011 21:50:42 -0700
> > Grant Likely <grant.likely at secretlab.ca> wrote:
> >
> > > > +static void __init prom_alloc_property(struct device_node
> > > > *node,
> > > > + const char *name, const char *value)
> > > > +{
> > > > + struct property *p = prom_early_alloc(sizeof(struct
> > > > property));
> > >
> > > How early is this running? If the allocator is set up by now,
> > > then this should use kzalloc()...
> >
> > It's running at the same time the device tree is created, so no, the
> > allocator isn't available yet.
> >
> > This isn't strictly a requirement, but it would be good to get
> > firmware hacks out of the way as early as possible, and it might as
> > well be done at the same time that the DT is created.
>
> Yes, you definitely want to get firmware fiddling done with as soon as
> possible. Certainly before anything starts relying on the device tree
> data.
>
> Another option (assuming OFW is still alive) is to as it to create the
> missing properties before extracting the tree. This is what we're
> currently doing in PowerPC.
OFW is indeed still alive. I don't have an opinion on that, I'll leave
it up to dsd to decide (once he's no longer busy with other stuff).
>
> >
> > >
> > > > +
> > > > + p->name = prom_alloc_string(name, NULL);
> > > > + p->value = prom_alloc_string(value, &p->length);
> > >
> > > ... which would also mean that kstrdup()/kmemdup() can be used
> > > here directly.
> > >
> > > > + prom_add_property(node, p);
> > > > +}
> > >
> > > This would be useful in common code. prom_create_property() might
> > > be a better name. It should also accept a length argument for the
> > > size of the data.
> > >
> > > > +
> > > > +/* Add dcon device as child of display */
> > > > +static void __init add_dcon_node(struct device_node *display)
> > > > +{
> > > > + struct device_node *node =
> > > > prom_early_alloc(sizeof(struct device_node));
> > > > + unsigned long flags;
> > > > +
> > > > + kref_init(&node->kref);
> > > > + node->name = prom_alloc_string("dcon", NULL);
> > > > + node->full_name = (char *) node->name;
> > > > + node->parent = display;
> > > > +
> > > > + write_lock_irqsave(&devtree_lock, flags);
> > > > + node->sibling = node->parent->child;
> > > > + node->allnext = allnodes;
> > > > + node->parent->child = node;
> > > > + allnodes = node;
> > > > + write_unlock_irqrestore(&devtree_lock, flags);
> > > > +
> > >
> > > This should be using the existing of_attach_node() function to
> > > link the node into the tree (in fact I know you've seen it
> > > because the above 6 lines are identical). :-) Also, there
> > > already exists a function "new_node" in
> > > arch/powerpc/platforms/iseries/vio.c that would be useful to move
> > > into drivers/of/base.c
> >
> > Is there any particular reason why OF_DYNAMIC needs to depend upon
> > PPC_OF?
>
> Only historical. Those functions can probably be brought out from
> under the OF_DYNAMIC protection... Bonus points for making pdt.c and
> fdt.c use it for linking nodes to the tree so that all methods are
> consistent. :-)
Done. I've done absolutely no testing of the flattree changes.
>
> It would also be useful to make the property linking code common for
> fdt.c and pdt.c
I can look at that and the new_node stuff later.
More information about the devicetree-discuss
mailing list