OF device mappings
Gary Thomas
gary at mlbassoc.com
Sun Mar 1 05:21:17 EST 2009
Grant Likely wrote:
> On Sat, Feb 28, 2009 at 10:46 AM, Gary Thomas <gary at mlbassoc.com> wrote:
>> Still looking for some help... I need to be able to locate
>> the kernel platform_device which corresponds to an instance
>> from my OF tree. Basically, I have a [somewhat] unrelated
>> driver which needs to know these things, so the drivers in
>> question should not have to be affected.
>>
>> In particular, I'm working with the net/dsa drivers (Distributed
>> Switch Architecture) which need access to the network driver as
>> well as the MII/MDIO bus driver. It doesn't make sense to tie
>> those drivers back to DSA, but rather let the DSA driver find
>> its way to them.
>>
>> I've defined this in by DTS tree:
>> lan1 {
>> cell-index = <0x01>;
>
> Side note, why do you have cell-index here? I suspect that you're
> using it incorrectly.
Probably - I don't think I need it anyway.
>> compatible = "marvell,m88e609x";
>> net_dev = "fsl-gianfar.0";
>> mii_bus = "fsl-gianfar_mdio.14";
>
> These two lines don't make much sense. They are encoding Linux
> internal details with could very well change in the future.
>
>> net_devX = <ð0>;
>> mii_busX = <&mii_bus>;
>
> This is the right thing to do. This give you the phandle to the relevant node.
As I suspected.
> Once you have a handle to the node, you can iterate through the
> of_platform bus devices and look for a node which has a matching node
> pointer stored in archdata. That will give you a struct device which
> is contained by a struct of_device (note well: this will give you an
> of_device, not a platform_device.)
I have code which does this already, but I could not figure out
how to get from the of_device node to the actual platform_device.
for_each_compatible_node(np, NULL, "marvell,m88e609x") {
const phandle *ph;
struct device *dev;
struct of_device *of_dev;
ph = of_get_property(np, "net_devX", NULL);
if (ph == NULL) {
printk("%s: missing 'net_dev'\n", np->name);
break;
}
of_dev = of_find_device_by_phandle(*ph);
}
How do I find the platform_device which was created when this
particular of_device was instantiated? I made sure that this code
is run late - after all the of_devices have been handled.
> I'm working on a set of patches which should make this much easier.
> I'll try to remember to CC you when I post them to the list.
Looking forward to your code/ideas
>> };
>> ... two ways to find the same node.
>>
>> Using 'net_dev' (which I admit is pretty hokey), I can look
>> up the corresponding platform device, which does work for
>> the DSA layer. What I want is to be able to get to this
>> from the 'net_devX' pointer, but I don't seem to be able
>> to get out of the OF tree and into the actual platform
>> device tree to find the appropriate instance.
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
More information about the Linuxppc-dev
mailing list