From: Gary Thomas <gary@mlbassoc•com>
To: Grant Likely <grant.likely@secretlab•ca>
Cc: Linux PPC Development <linuxppc-dev@ozlabs•org>
Subject: Re: OF device mappings
Date: Sat, 28 Feb 2009 12:18:23 -0700 [thread overview]
Message-ID: <49A98DFF.9050503@mlbassoc.com> (raw)
In-Reply-To: <fa686aa40902281044l3b910866g7467131db80c87e7@mail.gmail.com>
Grant Likely wrote:
> On Sat, Feb 28, 2009 at 11:21 AM, Gary Thomas <gary@mlbassoc•com> wrote:
>> Grant Likely wrote:
>>> 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.
>
> You can't. There is no platform_device. There is only the of_device.
>
> The bit that you're missing is that the 'platform bus' isn't being
> used at all for these devices. The 'of_platform bus' is used instead.
> platform bus and of_platform bus perform essentially the same job,
> but the of_platform bus differs in the way it probes drivers.
> Specifically, an of_platform_driver can be handed a list of values
> that it will match against, and it has a 1:1 relationship with a node
> in the device tree.
>
>> 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.
>
> Again, there is no platform_device. of_device *is* the device that was created.
But this doesn't work :-( I also don't understand how you
can say "there is no platform_device" - they are everywhere,
corresponding to actual device instances, as the system
creates them, typically in a driver 'probe' function.
I've tried both ways. If I look up the of_platform node and
then pass the 'dev' structure to the DSA driver, it doesn't work.
If I look up the actual device instance from the platform_bus
and pass that to the driver, it does.
How do I get to the proper 'dev' structure which will make the
DSA driver work?
More details - the DSA driver is expecting to get the 'dev'
structure pointer which was created in the gianfar driver,
static int gfar_probe(struct platform_device *pdev)
namely '&pdev->dev' -- this works.
If I look up the of_platform device like this:
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);
and pass '&of_dev->dev', the DSA driver fails.
What am I missing and how do I solve this?
I'm not trying to be obstinate; I just need this to work
and I'm trying to make it work in an extensible, "play nice
in the OF sandbox" way.
Thanks for your help
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
next prev parent reply other threads:[~2009-02-28 19:18 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-28 17:46 OF device mappings Gary Thomas
2009-02-28 18:04 ` Grant Likely
2009-02-28 18:21 ` Gary Thomas
2009-02-28 18:44 ` Grant Likely
2009-02-28 19:18 ` Gary Thomas [this message]
2009-02-28 20:19 ` Grant Likely
2009-02-28 20:25 ` Gary Thomas
2009-02-28 21:05 ` Benjamin Herrenschmidt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49A98DFF.9050503@mlbassoc.com \
--to=gary@mlbassoc$(echo .)com \
--cc=grant.likely@secretlab$(echo .)ca \
--cc=linuxppc-dev@ozlabs$(echo .)org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox