All of lore.kernel.org
 help / color / mirror / Atom feed
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
------------------------------------------------------------

  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.com \
    --cc=grant.likely@secretlab.ca \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.