[PATCH] of: Have of_device_add call platform_device_add rather than device_add

Grant Likely grant.likely at secretlab.ca
Thu Nov 22 05:07:46 EST 2012


On Wed, Nov 21, 2012 at 5:44 PM, Jason Gunthorpe
<jgunthorpe at obsidianresearch.com> wrote:
> On Wed, Nov 21, 2012 at 03:51:04PM +0000, Grant Likely wrote:
>> On Wed, 21 Nov 2012 00:24:48 -0700, Jason Gunthorpe <jgunthorpe at obsidianresearch.com> wrote:
>> > This allows platform_device_add a chance to call insert_resource
>> > on all of the resources from OF. At a minimum this fills in proc/iomem
>> > and presumably makes resource tracking and conflict detection work
>> > better.
>> >
>> > Signed-off-by: Jason Gunthorpe <jgunthorpe at obsidianresearch.com>
>> >  drivers/of/device.c |    2 +-
>> >  1 files changed, 1 insertions(+), 1 deletions(-)
>> >
>> > Tested on PPC32 and ARM32 embedded kernels.
>> >
>> > diff --git a/drivers/of/device.c b/drivers/of/device.c
>> > index 4c74e4f..a5b67dc 100644
>> > +++ b/drivers/of/device.c
>> > @@ -62,7 +62,7 @@ int of_device_add(struct platform_device *ofdev)
>> >     if (!ofdev->dev.parent)
>> >             set_dev_node(&ofdev->dev, of_node_to_nid(ofdev->dev.of_node));
>> >
>> > -   return device_add(&ofdev->dev);
>> > +   return platform_device_add(ofdev);
>> >  }
>> >
>> >  int of_device_register(struct platform_device *pdev)
>>
>> This has the side effect of moving all devices at the root of the tree
>> from /sys/devices/ to /sys/devices/platform. It also has the possibility
>> of breaking if any devices get registered with overlapping regions. I
>> think there are some powerpc 5200 boards that do this, and I'm not sure
>> about the larger Power boxen.
>
> Okay, I'll try to test your patch.
>
> I know sensible overlapping seems to work:
>
> e0000000-e7ffffff : PCIe 0 MEM
>   e0000000-e000ffff : 0000:00:01.0
>     e0000000-e0000fff : /pex at e0000000/chip at 0/chip_control at 0
>       e0000008-e000000b : dat
>         e0000008-e000000b : dat
>       e000000c-e000000f : set
>         e000000c-e000000f : set
>       e0000010-e0000013 : dirin
>         e0000010-e0000013 : dirin
>
> Which is nesting the generic gpio driver under a larger region..

Try two sibling nodes with overlapping addresses. There are powerpc
device trees doing that even though it isn't legal by the ofw and
epapr specs.

g.


More information about the devicetree-discuss mailing list