Grant Likely wrote: > On Sat, Feb 28, 2009 at 10:46 AM, Gary Thomas <g...@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 ------------------------------------------------------------ _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev